/* Generated by Cython 3.2.4 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "define_macros": [
            [
                "HB_NO_MT",
                "1"
            ],
            [
                "HB_EXPERIMENTAL_API",
                "1"
            ],
            [
                "HB_HAS_SUBSET",
                "1"
            ],
            [
                "HB_HAS_RASTER",
                "1"
            ],
            [
                "Py_LIMITED_API",
                "0x030A0000"
            ],
            [
                "HAVE_MMAP",
                "1"
            ],
            [
                "HAVE_UNISTD_H",
                "1"
            ],
            [
                "HAVE_SYS_MMAN_H",
                "1"
            ]
        ],
        "depends": [
            "harfbuzz/src/hb-ot.h",
            "harfbuzz/src/hb-raster.h",
            "harfbuzz/src/hb-subset-serialize.h",
            "harfbuzz/src/hb-subset.h",
            "harfbuzz/src/hb.h"
        ],
        "extra_compile_args": [
            "-std=c++11",
            "-g0"
        ],
        "include_dirs": [
            "harfbuzz/src"
        ],
        "language": "c++",
        "name": "uharfbuzz._harfbuzz",
        "sources": [
            "src/uharfbuzz/_harfbuzz.pyx",
            "harfbuzz/src/harfbuzz-world.cc"
        ]
    },
    "module_name": "uharfbuzz._harfbuzz"
}
END: Cython Metadata */

#ifndef PY_SSIZE_T_CLEAN
#define PY_SSIZE_T_CLEAN
#endif /* PY_SSIZE_T_CLEAN */
/* InitLimitedAPI */
#if defined(Py_LIMITED_API)
  #if !defined(CYTHON_LIMITED_API)
  #define CYTHON_LIMITED_API 1
  #endif
#elif defined(CYTHON_LIMITED_API)
  #ifdef _MSC_VER
  #pragma message ("Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.")
  #else
  #warning Limited API usage is enabled with 'CYTHON_LIMITED_API' but 'Py_LIMITED_API' does not define a Python target version. Consider setting 'Py_LIMITED_API' instead.
  #endif
#endif

#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x03080000
    #error Cython requires Python 3.8+.
#else
#define __PYX_ABI_VERSION "3_2_4"
#define CYTHON_HEX_VERSION 0x030204F0
#define CYTHON_FUTURE_DIVISION 1
/* CModulePreamble */
#include <stddef.h>
#ifndef offsetof
  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif
#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
#if defined(GRAALVM_PYTHON)
  /* For very preliminary testing purposes. Most variables are set the same as PyPy.
     The existence of this section does not imply that anything works or is even tested */
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 1
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 0
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #undef CYTHON_AVOID_BORROWED_REFS
  #define CYTHON_AVOID_BORROWED_REFS 1
  #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_ASSUME_SAFE_SIZE
  #define CYTHON_ASSUME_SAFE_SIZE 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 0
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_AM_SEND
  #define CYTHON_USE_AM_SEND 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 1
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
  #undef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 0
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#elif defined(PYPY_VERSION)
  #define CYTHON_COMPILING_IN_PYPY 1
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 1
  #ifndef CYTHON_USE_TYPE_SPECS
    #define CYTHON_USE_TYPE_SPECS 0
  #endif
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #undef CYTHON_AVOID_BORROWED_REFS
  #define CYTHON_AVOID_BORROWED_REFS 1
  #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #ifndef CYTHON_ASSUME_SAFE_SIZE
    #define CYTHON_ASSUME_SAFE_SIZE 1
  #endif
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #if PY_VERSION_HEX < 0x03090000
    #undef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #undef CYTHON_USE_MODULE_STATE
  #define CYTHON_USE_MODULE_STATE 0
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE (PYPY_VERSION_NUM >= 0x07030C00)
  #endif
  #undef CYTHON_USE_AM_SEND
  #define CYTHON_USE_AM_SEND 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_NUM >= 0x07031100)
  #endif
  #undef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 0
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#elif defined(CYTHON_LIMITED_API)
  #ifdef Py_LIMITED_API
    #undef __PYX_LIMITED_VERSION_HEX
    #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
  #endif
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #define CYTHON_COMPILING_IN_LIMITED_API 1
  #define CYTHON_COMPILING_IN_GRAAL 0
  #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_TYPE_SPECS
  #define CYTHON_USE_TYPE_SPECS 1
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #ifndef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #endif
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #endif
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_ASSUME_SAFE_SIZE
  #define CYTHON_ASSUME_SAFE_SIZE 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_GIL
  #define CYTHON_FAST_GIL 0
  #undef CYTHON_METH_FASTCALL
  #define CYTHON_METH_FASTCALL (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_MODULE_STATE
    #define CYTHON_USE_MODULE_STATE 0
  #endif
  #undef CYTHON_USE_SYS_MONITORING
  #define CYTHON_USE_SYS_MONITORING 0
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 0
  #endif
  #ifndef CYTHON_USE_AM_SEND
    #define CYTHON_USE_AM_SEND (__PYX_LIMITED_VERSION_HEX >= 0x030A0000)
  #endif
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
  #endif
  #ifndef CYTHON_USE_FREELISTS
  #define CYTHON_USE_FREELISTS 1
  #endif
  #undef CYTHON_IMMORTAL_CONSTANTS
  #define CYTHON_IMMORTAL_CONSTANTS 0
#else
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_CPYTHON 1
  #define CYTHON_COMPILING_IN_LIMITED_API 0
  #define CYTHON_COMPILING_IN_GRAAL 0
  #ifdef Py_GIL_DISABLED
    #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 1
  #else
    #define CYTHON_COMPILING_IN_CPYTHON_FREETHREADING 0
  #endif
  #if PY_VERSION_HEX < 0x030A0000
    #undef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #elif !defined(CYTHON_USE_TYPE_SLOTS)
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #ifndef CYTHON_USE_TYPE_SPECS
    #define CYTHON_USE_TYPE_SPECS 0
  #endif
  #ifndef CYTHON_USE_PYTYPE_LOOKUP
    #define CYTHON_USE_PYTYPE_LOOKUP 1
  #endif
  #ifndef CYTHON_USE_PYLONG_INTERNALS
    #define CYTHON_USE_PYLONG_INTERNALS 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_USE_PYLIST_INTERNALS
    #define CYTHON_USE_PYLIST_INTERNALS 0
  #elif !defined(CYTHON_USE_PYLIST_INTERNALS)
    #define CYTHON_USE_PYLIST_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING || PY_VERSION_HEX >= 0x030B00A2
    #undef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #elif !defined(CYTHON_USE_UNICODE_WRITER)
    #define CYTHON_USE_UNICODE_WRITER 1
  #endif
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 1
  #elif !defined(CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)
    #define CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_ASSUME_SAFE_SIZE
    #define CYTHON_ASSUME_SAFE_SIZE 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #ifndef CYTHON_FAST_THREAD_STATE
    #define CYTHON_FAST_THREAD_STATE 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_FAST_GIL
    #define CYTHON_FAST_GIL 0
  #elif !defined(CYTHON_FAST_GIL)
    #define CYTHON_FAST_GIL (PY_VERSION_HEX < 0x030C00A6)
  #endif
  #ifndef CYTHON_METH_FASTCALL
    #define CYTHON_METH_FASTCALL 1
  #endif
  #ifndef CYTHON_FAST_PYCALL
    #define CYTHON_FAST_PYCALL 1
  #endif
  #ifndef CYTHON_PEP487_INIT_SUBCLASS
    #define CYTHON_PEP487_INIT_SUBCLASS 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT 1
  #endif
  #ifndef CYTHON_USE_MODULE_STATE
    #define CYTHON_USE_MODULE_STATE 0
  #endif
  #ifndef CYTHON_USE_SYS_MONITORING
    #define CYTHON_USE_SYS_MONITORING (PY_VERSION_HEX >= 0x030d00B1)
  #endif
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE 1
  #endif
  #ifndef CYTHON_USE_AM_SEND
    #define CYTHON_USE_AM_SEND 1
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    #undef CYTHON_USE_DICT_VERSIONS
    #define CYTHON_USE_DICT_VERSIONS 0
  #elif !defined(CYTHON_USE_DICT_VERSIONS)
    #define CYTHON_USE_DICT_VERSIONS  (PY_VERSION_HEX < 0x030C00A5 && !CYTHON_USE_MODULE_STATE)
  #endif
  #ifndef CYTHON_USE_EXC_INFO_STACK
    #define CYTHON_USE_EXC_INFO_STACK 1
  #endif
  #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
    #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
  #endif
  #ifndef CYTHON_USE_FREELISTS
    #define CYTHON_USE_FREELISTS (!CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
  #endif
  #if defined(CYTHON_IMMORTAL_CONSTANTS) && PY_VERSION_HEX < 0x030C0000
    #undef CYTHON_IMMORTAL_CONSTANTS
    #define CYTHON_IMMORTAL_CONSTANTS 0  // definitely won't work
  #elif !defined(CYTHON_IMMORTAL_CONSTANTS)
    #define CYTHON_IMMORTAL_CONSTANTS (PY_VERSION_HEX >= 0x030C0000 && !CYTHON_USE_MODULE_STATE && CYTHON_COMPILING_IN_CPYTHON_FREETHREADING)
  #endif
#endif
#ifndef CYTHON_COMPRESS_STRINGS
  #define CYTHON_COMPRESS_STRINGS 1
#endif
#ifndef CYTHON_FAST_PYCCALL
#define CYTHON_FAST_PYCCALL  CYTHON_FAST_PYCALL
#endif
#ifndef CYTHON_VECTORCALL
#if CYTHON_COMPILING_IN_LIMITED_API
#define CYTHON_VECTORCALL  (__PYX_LIMITED_VERSION_HEX >= 0x030C0000)
#else
#define CYTHON_VECTORCALL  (CYTHON_FAST_PYCCALL)
#endif
#endif
#if CYTHON_USE_PYLONG_INTERNALS
  #undef SHIFT
  #undef BASE
  #undef MASK
  #ifdef SIZEOF_VOID_P
    enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
  #endif
#endif
#ifndef __has_attribute
  #define __has_attribute(x) 0
#endif
#ifndef __has_cpp_attribute
  #define __has_cpp_attribute(x) 0
#endif
#ifndef CYTHON_RESTRICT
  #if defined(__GNUC__)
    #define CYTHON_RESTRICT __restrict__
  #elif defined(_MSC_VER) && _MSC_VER >= 1400
    #define CYTHON_RESTRICT __restrict
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_RESTRICT restrict
  #else
    #define CYTHON_RESTRICT
  #endif
#endif
#ifndef CYTHON_UNUSED
  #if defined(__cplusplus)
    /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
     * but leads to warnings with -pedantic, since it is a C++17 feature */
    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
      #if __has_cpp_attribute(maybe_unused)
        #define CYTHON_UNUSED [[maybe_unused]]
      #endif
    #endif
  #endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__))
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_UNUSED_VAR
#  if defined(__cplusplus)
     template<class T> void CYTHON_UNUSED_VAR( const T& ) { }
#  else
#    define CYTHON_UNUSED_VAR(x) (void)(x)
#  endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
  #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#  define CYTHON_NCP_UNUSED
# else
#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_USE_CPP_STD_MOVE
  #if defined(__cplusplus) && (\
    __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
    #define CYTHON_USE_CPP_STD_MOVE 1
  #else
    #define CYTHON_USE_CPP_STD_MOVE 0
  #endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#include <stdint.h>
typedef uintptr_t  __pyx_uintptr_t;
#ifndef CYTHON_FALLTHROUGH
  #if defined(__cplusplus)
    /* for clang __has_cpp_attribute(fallthrough) is true even before C++17
     * but leads to warnings with -pedantic, since it is a C++17 feature */
    #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
      #if __has_cpp_attribute(fallthrough)
        #define CYTHON_FALLTHROUGH [[fallthrough]]
      #endif
    #endif
    #ifndef CYTHON_FALLTHROUGH
      #if __has_cpp_attribute(clang::fallthrough)
        #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
      #elif __has_cpp_attribute(gnu::fallthrough)
        #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
      #endif
    #endif
  #endif
  #ifndef CYTHON_FALLTHROUGH
    #if __has_attribute(fallthrough)
      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
    #else
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
  #if defined(__clang__) && defined(__apple_build_version__)
    #if __apple_build_version__ < 7000000
      #undef  CYTHON_FALLTHROUGH
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
#endif
#ifndef Py_UNREACHABLE
  #define Py_UNREACHABLE()  assert(0); abort()
#endif
#ifdef __cplusplus
  template <typename T>
  struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
  #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL<type>::value)
#else
  #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
#endif
#if CYTHON_COMPILING_IN_PYPY == 1
  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX < 0x030A0000)
#else
  #define __PYX_NEED_TP_PRINT_SLOT  (PY_VERSION_HEX < 0x03090000)
#endif
#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))

/* CppInitCode */
#ifndef __cplusplus
  #error "Cython files generated with the C++ option must be compiled with a C++ compiler."
#endif
#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #else
    #define CYTHON_INLINE inline
  #endif
#endif
template<typename T>
void __Pyx_call_destructor(T& x) {
    x.~T();
}
template<typename T>
class __Pyx_FakeReference {
  public:
    __Pyx_FakeReference() : ptr(NULL) { }
    __Pyx_FakeReference(const T& ref) : ptr(const_cast<T*>(&ref)) { }
    T *operator->() { return ptr; }
    T *operator&() { return ptr; }
    operator T&() { return *ptr; }
    template<typename U> bool operator ==(const U& other) const { return *ptr == other; }
    template<typename U> bool operator !=(const U& other) const { return *ptr != other; }
    template<typename U> bool operator==(const __Pyx_FakeReference<U>& other) const { return *ptr == *other.ptr; }
    template<typename U> bool operator!=(const __Pyx_FakeReference<U>& other) const { return *ptr != *other.ptr; }
  private:
    T *ptr;
};

/* PythonCompatibility */
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#define __Pyx_BUILTIN_MODULE_NAME "builtins"
#define __Pyx_DefaultClassType PyType_Type
#if CYTHON_COMPILING_IN_LIMITED_API
    #ifndef CO_OPTIMIZED
    static int CO_OPTIMIZED;
    #endif
    #ifndef CO_NEWLOCALS
    static int CO_NEWLOCALS;
    #endif
    #ifndef CO_VARARGS
    static int CO_VARARGS;
    #endif
    #ifndef CO_VARKEYWORDS
    static int CO_VARKEYWORDS;
    #endif
    #ifndef CO_ASYNC_GENERATOR
    static int CO_ASYNC_GENERATOR;
    #endif
    #ifndef CO_GENERATOR
    static int CO_GENERATOR;
    #endif
    #ifndef CO_COROUTINE
    static int CO_COROUTINE;
    #endif
#else
    #ifndef CO_COROUTINE
      #define CO_COROUTINE 0x80
    #endif
    #ifndef CO_ASYNC_GENERATOR
      #define CO_ASYNC_GENERATOR 0x200
    #endif
#endif
static int __Pyx_init_co_variables(void);
#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
  #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
#else
  #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
  #define __Pyx_Py_Is(x, y)  Py_Is(x, y)
#else
  #define __Pyx_Py_Is(x, y) ((x) == (y))
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
  #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
#else
  #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
  #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
#else
  #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
#endif
#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
  #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
#else
  #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
#endif
#define __Pyx_NoneAsNull(obj)  (__Pyx_Py_IsNone(obj) ? NULL : (obj))
#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
#else
  #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
  #define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
  #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef Py_TPFLAGS_SEQUENCE
  #define Py_TPFLAGS_SEQUENCE 0
#endif
#ifndef Py_TPFLAGS_MAPPING
  #define Py_TPFLAGS_MAPPING 0
#endif
#ifndef Py_TPFLAGS_IMMUTABLETYPE
  #define Py_TPFLAGS_IMMUTABLETYPE (1UL << 8)
#endif
#ifndef Py_TPFLAGS_DISALLOW_INSTANTIATION
  #define Py_TPFLAGS_DISALLOW_INSTANTIATION (1UL << 7)
#endif
#ifndef METH_STACKLESS
  #define METH_STACKLESS 0
#endif
#ifndef METH_FASTCALL
  #ifndef METH_FASTCALL
     #define METH_FASTCALL 0x80
  #endif
  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
                                                          Py_ssize_t nargs, PyObject *kwnames);
#else
  #if PY_VERSION_HEX >= 0x030d00A4
  #  define __Pyx_PyCFunctionFast PyCFunctionFast
  #  define __Pyx_PyCFunctionFastWithKeywords PyCFunctionFastWithKeywords
  #else
  #  define __Pyx_PyCFunctionFast _PyCFunctionFast
  #  define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
  #endif
#endif
#if CYTHON_METH_FASTCALL
  #define __Pyx_METH_FASTCALL METH_FASTCALL
  #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
  #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
#else
  #define __Pyx_METH_FASTCALL METH_VARARGS
  #define __Pyx_PyCFunction_FastCall PyCFunction
  #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
#endif
#if CYTHON_VECTORCALL
  #define __pyx_vectorcallfunc vectorcallfunc
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  PY_VECTORCALL_ARGUMENTS_OFFSET
  #define __Pyx_PyVectorcall_NARGS(n)  PyVectorcall_NARGS((size_t)(n))
#else
  #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET  0
  #define __Pyx_PyVectorcall_NARGS(n)  ((Py_ssize_t)(n))
#endif
#if PY_VERSION_HEX >= 0x030900B1
#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_CheckExact(func)
#else
#define __Pyx_PyCFunction_CheckExact(func)  PyCFunction_Check(func)
#endif
#define __Pyx_CyOrPyCFunction_Check(func)  PyCFunction_Check(func)
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  (((PyCFunctionObject*)(func))->m_ml->ml_meth)
#elif !CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyOrPyCFunction_GET_FUNCTION(func)  PyCFunction_GET_FUNCTION(func)
#endif
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CyOrPyCFunction_GET_FLAGS(func)  (((PyCFunctionObject*)(func))->m_ml->ml_flags)
static CYTHON_INLINE PyObject* __Pyx_CyOrPyCFunction_GET_SELF(PyObject *func) {
    return (__Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_STATIC) ? NULL : ((PyCFunctionObject*)func)->m_self;
}
#endif
static CYTHON_INLINE int __Pyx__IsSameCFunction(PyObject *func, void (*cfunc)(void)) {
#if CYTHON_COMPILING_IN_LIMITED_API
    return PyCFunction_Check(func) && PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
#else
    return PyCFunction_Check(func) && PyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
#endif
}
#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCFunction(func, cfunc)
#if PY_VERSION_HEX < 0x03090000 || (CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000)
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  ((void)m, PyType_FromSpecWithBases(s, b))
  typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
#else
  #define __Pyx_PyType_FromModuleAndSpec(m, s, b)  PyType_FromModuleAndSpec(m, s, b)
  #define __Pyx_PyCMethod  PyCMethod
#endif
#ifndef METH_METHOD
  #define METH_METHOD 0x200
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
  #define PyObject_Malloc(s)   PyMem_Malloc(s)
  #define PyObject_Free(p)     PyMem_Free(p)
  #define PyObject_Realloc(p)  PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)
#elif CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) GraalPyFrame_SetLineNumber((frame), (lineno))
#elif CYTHON_COMPILING_IN_GRAAL
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) _PyFrame_SetLineNumber((frame), (lineno))
#else
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyThreadState_Current PyThreadState_Get()
#elif !CYTHON_FAST_THREAD_STATE
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x030d00A1
  #define __Pyx_PyThreadState_Current PyThreadState_GetUnchecked()
#else
  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#endif
#if CYTHON_USE_MODULE_STATE
static CYTHON_INLINE void *__Pyx__PyModule_GetState(PyObject *op)
{
    void *result;
    result = PyModule_GetState(op);
    if (!result)
        Py_FatalError("Couldn't find the module state");
    return result;
}
#define __Pyx_PyModule_GetState(o) (__pyx_mstatetype *)__Pyx__PyModule_GetState(o)
#else
#define __Pyx_PyModule_GetState(op) ((void)op,__pyx_mstate_global)
#endif
#define __Pyx_PyObject_GetSlot(obj, name, func_ctype)  __Pyx_PyType_GetSlot(Py_TYPE((PyObject *) obj), name, func_ctype)
#define __Pyx_PyObject_TryGetSlot(obj, name, func_ctype) __Pyx_PyType_TryGetSlot(Py_TYPE(obj), name, func_ctype)
#define __Pyx_PyObject_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
#define __Pyx_PyObject_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSubSlot(Py_TYPE(obj), sub, name, func_ctype)
#if CYTHON_USE_TYPE_SLOTS
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((type)->name)
  #define __Pyx_PyType_TryGetSlot(type, name, func_ctype) __Pyx_PyType_GetSlot(type, name, func_ctype)
  #define __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype) (((type)->sub) ? ((type)->sub->name) : NULL)
  #define __Pyx_PyType_TryGetSubSlot(type, sub, name, func_ctype) __Pyx_PyType_GetSubSlot(type, sub, name, func_ctype)
#else
  #define __Pyx_PyType_GetSlot(type, name, func_ctype)  ((func_ctype) PyType_GetSlot((type), Py_##name))
  #define __Pyx_PyType_TryGetSlot(type, name, func_ctype)\
    ((__PYX_LIMITED_VERSION_HEX >= 0x030A0000 ||\
     (PyType_GetFlags(type) & Py_TPFLAGS_HEAPTYPE) || __Pyx_get_runtime_version() >= 0x030A0000) ?\
     __Pyx_PyType_GetSlot(type, name, func_ctype) : NULL)
  #define __Pyx_PyType_GetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_GetSlot(obj, name, func_ctype)
  #define __Pyx_PyType_TryGetSubSlot(obj, sub, name, func_ctype) __Pyx_PyType_TryGetSlot(obj, name, func_ctype)
#endif
#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
#endif
#define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
#define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStrWithError(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
    PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
    if (res == NULL) PyErr_Clear();
    return res;
}
#elif !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000
#define __Pyx_PyDict_GetItemStrWithError  PyDict_GetItemWithError
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#else
static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
#if CYTHON_COMPILING_IN_PYPY
    return PyDict_GetItem(dict, name);
#else
    PyDictEntry *ep;
    PyDictObject *mp = (PyDictObject*) dict;
    long hash = ((PyStringObject *) name)->ob_shash;
    assert(hash != -1);
    ep = (mp->ma_lookup)(mp, name, hash);
    if (ep == NULL) {
        return NULL;
    }
    return ep->me_value;
#endif
}
#define __Pyx_PyDict_GetItemStr           PyDict_GetItem
#endif
#if CYTHON_USE_TYPE_SLOTS
  #define __Pyx_PyType_GetFlags(tp)   (((PyTypeObject *)tp)->tp_flags)
  #define __Pyx_PyType_HasFeature(type, feature)  ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
#else
  #define __Pyx_PyType_GetFlags(tp)   (PyType_GetFlags((PyTypeObject *)tp))
  #define __Pyx_PyType_HasFeature(type, feature)  PyType_HasFeature(type, feature)
#endif
#define __Pyx_PyObject_GetIterNextFunc(iterator)  __Pyx_PyObject_GetSlot(iterator, tp_iternext, iternextfunc)
#if CYTHON_USE_TYPE_SPECS
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  {\
    PyTypeObject *type = Py_TYPE((PyObject*)obj);\
    assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
    PyObject_GC_Del(obj);\
    Py_DECREF(type);\
}
#else
#define __Pyx_PyHeapTypeObject_GC_Del(obj)  PyObject_GC_Del(obj)
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((void)u, 1114111U)
  #define __Pyx_PyUnicode_KIND(u)         ((void)u, (0))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)u)
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GetLength(u))
#else
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_READY(op)       (0)
  #else
    #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                                0 : _PyUnicode_Ready((PyObject *)(op)))
  #endif
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
  #define __Pyx_PyUnicode_KIND(u)         ((int)PyUnicode_KIND(u))
  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
  #if PY_VERSION_HEX >= 0x030C0000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_LENGTH(u))
  #else
    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
    #else
    #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
    #endif
  #endif
#endif
#if CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
#else
  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY
  #if !defined(PyUnicode_DecodeUnicodeEscape)
    #define PyUnicode_DecodeUnicodeEscape(s, size, errors)  PyUnicode_Decode(s, size, "unicode_escape", errors)
  #endif
  #if !defined(PyUnicode_Contains)
    #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
  #endif
  #if !defined(PyByteArray_Check)
    #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
  #endif
  #if !defined(PyObject_Format)
    #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
  #endif
#endif
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  #define __Pyx_PySequence_ListKeepNew(obj)\
    (likely(PyList_CheckExact(obj) && PyUnstable_Object_IsUniquelyReferenced(obj)) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#elif CYTHON_COMPILING_IN_CPYTHON
  #define __Pyx_PySequence_ListKeepNew(obj)\
    (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
#else
  #define __Pyx_PySequence_ListKeepNew(obj)  PySequence_List(obj)
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        __Pyx_IS_TYPE(obj, &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#endif
enum __Pyx_ReferenceSharing {
  __Pyx_ReferenceSharing_DefinitelyUnique, // We created it so we know it's unshared - no need to check
  __Pyx_ReferenceSharing_OwnStrongReference,
  __Pyx_ReferenceSharing_FunctionArgument,
  __Pyx_ReferenceSharing_SharedReference, // Never trust it to be unshared because it's a global or similar
};
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && PY_VERSION_HEX >= 0x030E0000
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing)\
    (sharing == __Pyx_ReferenceSharing_DefinitelyUnique ? 1 :\
      (sharing == __Pyx_ReferenceSharing_FunctionArgument ? PyUnstable_Object_IsUniqueReferencedTemporary(o) :\
      (sharing == __Pyx_ReferenceSharing_OwnStrongReference ? PyUnstable_Object_IsUniquelyReferenced(o) : 0)))
#elif (CYTHON_COMPILING_IN_CPYTHON && !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING) || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)sharing), Py_REFCNT(o) == 1)
#else
#define __Pyx_IS_UNIQUELY_REFERENCED(o, sharing) (((void)o), ((void)sharing), 0)
#endif
#if CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
  #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
  #elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_PyList_GetItemRef(o, i) (likely((i) >= 0) ? PySequence_GetItem(o, i) : (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
  #else
    #define __Pyx_PyList_GetItemRef(o, i) PySequence_ITEM(o, i)
  #endif
#elif CYTHON_COMPILING_IN_LIMITED_API || !CYTHON_ASSUME_SAFE_MACROS
  #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    #define __Pyx_PyList_GetItemRef(o, i) PyList_GetItemRef(o, i)
  #else
    #define __Pyx_PyList_GetItemRef(o, i) __Pyx_XNewRef(PyList_GetItem(o, i))
  #endif
#else
  #define __Pyx_PyList_GetItemRef(o, i) __Pyx_NewRef(PyList_GET_ITEM(o, i))
#endif
#if CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS && !CYTHON_COMPILING_IN_LIMITED_API && CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) (__Pyx_IS_UNIQUELY_REFERENCED(o, unsafe_shared) ?\
    __Pyx_NewRef(PyList_GET_ITEM(o, i)) : __Pyx_PyList_GetItemRef(o, i))
#else
  #define __Pyx_PyList_GetItemRefFast(o, i, unsafe_shared) __Pyx_PyList_GetItemRef(o, i)
#endif
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_PyDict_GetItemRef(dict, key, result) PyDict_GetItemRef(dict, key, result)
#elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
  *result = PyObject_GetItem(dict, key);
  if (*result == NULL) {
    if (PyErr_ExceptionMatches(PyExc_KeyError)) {
      PyErr_Clear();
      return 0;
    }
    return -1;
  }
  return 1;
}
#else
static CYTHON_INLINE int __Pyx_PyDict_GetItemRef(PyObject *dict, PyObject *key, PyObject **result) {
  *result = PyDict_GetItemWithError(dict, key);
  if (*result == NULL) {
    return PyErr_Occurred() ? -1 : 0;
  }
  Py_INCREF(*result);
  return 1;
}
#endif
#if defined(CYTHON_DEBUG_VISIT_CONST) && CYTHON_DEBUG_VISIT_CONST
  #define __Pyx_VISIT_CONST(obj)  Py_VISIT(obj)
#else
  #define __Pyx_VISIT_CONST(obj)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
  #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
  #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GET_ITEM(o, i)
  #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
  #define __Pyx_PyList_GET_ITEM(o, i) PyList_GET_ITEM(o, i)
#else
  #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
  #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
  #define __Pyx_PyTuple_GET_ITEM(o, i) PyTuple_GetItem(o, i)
  #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
  #define __Pyx_PyList_GET_ITEM(o, i) PyList_GetItem(o, i)
#endif
#if CYTHON_ASSUME_SAFE_SIZE
  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
  #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
  #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
  #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GET_LENGTH(o)
#else
  #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
  #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
  #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
  #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
  #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
  #define __Pyx_PyUnicode_GET_LENGTH(o) PyUnicode_GetLength(o)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_InternFromString)
  #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
#endif
#define __Pyx_PyLong_FromHash_t PyLong_FromSsize_t
#define __Pyx_PyLong_AsHash_t   __Pyx_PyIndex_AsSsize_t
#if __PYX_LIMITED_VERSION_HEX >= 0x030A0000
    #define __Pyx_PySendResult PySendResult
#else
    typedef enum {
        PYGEN_RETURN = 0,
        PYGEN_ERROR = -1,
        PYGEN_NEXT = 1,
    } __Pyx_PySendResult;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX < 0x030A00A3
  typedef __Pyx_PySendResult (*__Pyx_pyiter_sendfunc)(PyObject *iter, PyObject *value, PyObject **result);
#else
  #define __Pyx_pyiter_sendfunc sendfunc
#endif
#if !CYTHON_USE_AM_SEND
#define __PYX_HAS_PY_AM_SEND 0
#elif __PYX_LIMITED_VERSION_HEX >= 0x030A0000
#define __PYX_HAS_PY_AM_SEND 1
#else
#define __PYX_HAS_PY_AM_SEND 2  // our own backported implementation
#endif
#if __PYX_HAS_PY_AM_SEND < 2
    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
#else
    typedef struct {
        unaryfunc am_await;
        unaryfunc am_aiter;
        unaryfunc am_anext;
        __Pyx_pyiter_sendfunc am_send;
    } __Pyx_PyAsyncMethodsStruct;
    #define __Pyx_SlotTpAsAsync(s) ((PyAsyncMethods*)(s))
#endif
#if CYTHON_USE_AM_SEND && PY_VERSION_HEX < 0x030A00F0
    #define __Pyx_TPFLAGS_HAVE_AM_SEND (1UL << 21)
#else
    #define __Pyx_TPFLAGS_HAVE_AM_SEND (0)
#endif
#if PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyInterpreterState_Get() PyInterpreterState_Get()
#else
#define __Pyx_PyInterpreterState_Get() PyThreadState_Get()->interp
#endif
#if CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030A0000
#ifdef __cplusplus
extern "C"
#endif
PyAPI_FUNC(void *) PyMem_Calloc(size_t nelem, size_t elsize);
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_init_co_variable(PyObject *inspect, const char* name, int *write_to) {
    int value;
    PyObject *py_value = PyObject_GetAttrString(inspect, name);
    if (!py_value) return 0;
    value = (int) PyLong_AsLong(py_value);
    Py_DECREF(py_value);
    *write_to = value;
    return value != -1 || !PyErr_Occurred();
}
static int __Pyx_init_co_variables(void) {
    PyObject *inspect;
    int result;
    inspect = PyImport_ImportModule("inspect");
    result =
#if !defined(CO_OPTIMIZED)
        __Pyx_init_co_variable(inspect, "CO_OPTIMIZED", &CO_OPTIMIZED) &&
#endif
#if !defined(CO_NEWLOCALS)
        __Pyx_init_co_variable(inspect, "CO_NEWLOCALS", &CO_NEWLOCALS) &&
#endif
#if !defined(CO_VARARGS)
        __Pyx_init_co_variable(inspect, "CO_VARARGS", &CO_VARARGS) &&
#endif
#if !defined(CO_VARKEYWORDS)
        __Pyx_init_co_variable(inspect, "CO_VARKEYWORDS", &CO_VARKEYWORDS) &&
#endif
#if !defined(CO_ASYNC_GENERATOR)
        __Pyx_init_co_variable(inspect, "CO_ASYNC_GENERATOR", &CO_ASYNC_GENERATOR) &&
#endif
#if !defined(CO_GENERATOR)
        __Pyx_init_co_variable(inspect, "CO_GENERATOR", &CO_GENERATOR) &&
#endif
#if !defined(CO_COROUTINE)
        __Pyx_init_co_variable(inspect, "CO_COROUTINE", &CO_COROUTINE) &&
#endif
        1;
    Py_DECREF(inspect);
    return result ? 0 : -1;
}
#else
static int __Pyx_init_co_variables(void) {
    return 0;  // It's a limited API-only feature
}
#endif

/* MathInitCode */
#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
  #ifndef _USE_MATH_DEFINES
    #define _USE_MATH_DEFINES
  #endif
#endif
#include <math.h>
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif

#ifndef CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#define CYTHON_CLINE_IN_TRACEBACK_RUNTIME 0
#endif
#ifndef CYTHON_CLINE_IN_TRACEBACK
#define CYTHON_CLINE_IN_TRACEBACK CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#endif
#if CYTHON_CLINE_IN_TRACEBACK
#define __PYX_MARK_ERR_POS(f_index, lineno)  { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; __pyx_clineno = __LINE__; (void) __pyx_clineno; }
#else
#define __PYX_MARK_ERR_POS(f_index, lineno)  { __pyx_filename = __pyx_f[f_index]; (void) __pyx_filename; __pyx_lineno = lineno; (void) __pyx_lineno; (void) __pyx_clineno; }
#endif
#define __PYX_ERR(f_index, lineno, Ln_error) \
    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }

#ifdef CYTHON_EXTERN_C
    #undef __PYX_EXTERN_C
    #define __PYX_EXTERN_C CYTHON_EXTERN_C
#elif defined(__PYX_EXTERN_C)
    #ifdef _MSC_VER
    #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
    #else
    #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
    #endif
#else
    #define __PYX_EXTERN_C extern "C++"
#endif

#define __PYX_HAVE__uharfbuzz___harfbuzz
#define __PYX_HAVE_API__uharfbuzz___harfbuzz
/* Early includes */
#include <stdint.h>
#include "hb.h"
#include "hb-ot.h"
#include "hb-subset-serialize.h"
#include "hb-subset.h"
#include "hb-raster.h"
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stddef.h>
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif

#ifdef CYTHON_FREETHREADING_COMPATIBLE
#if CYTHON_FREETHREADING_COMPATIBLE
#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_NOT_USED
#else
#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
#endif
#else
#define __Pyx_FREETHREADING_COMPATIBLE Py_MOD_GIL_USED
#endif
#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
    (sizeof(type) < sizeof(Py_ssize_t))  ||\
    (sizeof(type) > sizeof(Py_ssize_t) &&\
          likely(v < (type)PY_SSIZE_T_MAX ||\
                 v == (type)PY_SSIZE_T_MAX)  &&\
          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
                                v == (type)PY_SSIZE_T_MIN)))  ||\
    (sizeof(type) == sizeof(Py_ssize_t) &&\
          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
                               v == (type)PY_SSIZE_T_MAX)))  )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
    return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
    #include <cstdlib>
    #define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
    #define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char*);
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString        PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
    #define __Pyx_PyByteArray_AsString(s) PyByteArray_AS_STRING(s)
#else
    #define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AsString(s))
    #define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AsString(s))
    #define __Pyx_PyByteArray_AsString(s) PyByteArray_AsString(s)
#endif
#define __Pyx_PyObject_AsWritableString(s)    ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
#define __Pyx_PyUnicode_FromOrdinal(o)       PyUnicode_FromOrdinal((int)o)
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
static CYTHON_INLINE PyObject *__Pyx_NewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_NewRef)
    return Py_NewRef(obj);
#else
    Py_INCREF(obj);
    return obj;
#endif
}
static CYTHON_INLINE PyObject *__Pyx_XNewRef(PyObject *obj) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030a0000 || defined(Py_XNewRef)
    return Py_XNewRef(obj);
#else
    Py_XINCREF(obj);
    return obj;
#endif
}
static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b);
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t);
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
#if CYTHON_ASSUME_SAFE_MACROS
#define __Pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AS_DOUBLE(x)
#else
#define __Pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#define __Pyx_PyFloat_AS_DOUBLE(x) PyFloat_AsDouble(x)
#endif
#define __Pyx_PyFloat_AsFloat(x) ((float) __Pyx_PyFloat_AsDouble(x))
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#if CYTHON_USE_PYLONG_INTERNALS
  #if PY_VERSION_HEX >= 0x030C00A7
  #ifndef _PyLong_SIGN_MASK
    #define _PyLong_SIGN_MASK 3
  #endif
  #ifndef _PyLong_NON_SIZE_BITS
    #define _PyLong_NON_SIZE_BITS 3
  #endif
  #define __Pyx_PyLong_Sign(x)  (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
  #define __Pyx_PyLong_IsNeg(x)  ((__Pyx_PyLong_Sign(x) & 2) != 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (!__Pyx_PyLong_IsNeg(x))
  #define __Pyx_PyLong_IsZero(x)  (__Pyx_PyLong_Sign(x) & 1)
  #define __Pyx_PyLong_IsPos(x)  (__Pyx_PyLong_Sign(x) == 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  (__Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
  #define __Pyx_PyLong_SignedDigitCount(x)\
        ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
  #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
    #define __Pyx_PyLong_IsCompact(x)     PyUnstable_Long_IsCompact((PyLongObject*) x)
    #define __Pyx_PyLong_CompactValue(x)  PyUnstable_Long_CompactValue((PyLongObject*) x)
  #else
    #define __Pyx_PyLong_IsCompact(x)     (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
    #define __Pyx_PyLong_CompactValue(x)  ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
  #endif
  typedef Py_ssize_t  __Pyx_compact_pylong;
  typedef size_t  __Pyx_compact_upylong;
  #else
  #define __Pyx_PyLong_IsNeg(x)  (Py_SIZE(x) < 0)
  #define __Pyx_PyLong_IsNonNeg(x)  (Py_SIZE(x) >= 0)
  #define __Pyx_PyLong_IsZero(x)  (Py_SIZE(x) == 0)
  #define __Pyx_PyLong_IsPos(x)  (Py_SIZE(x) > 0)
  #define __Pyx_PyLong_CompactValueUnsigned(x)  ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
  #define __Pyx_PyLong_DigitCount(x)  __Pyx_sst_abs(Py_SIZE(x))
  #define __Pyx_PyLong_SignedDigitCount(x)  Py_SIZE(x)
  #define __Pyx_PyLong_IsCompact(x)  (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
  #define __Pyx_PyLong_CompactValue(x)\
        ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
  typedef sdigit  __Pyx_compact_pylong;
  typedef digit  __Pyx_compact_upylong;
  #endif
  #if PY_VERSION_HEX >= 0x030C00A5
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->long_value.ob_digit)
  #else
  #define __Pyx_PyLong_Digits(x)  (((PyLongObject*)x)->ob_digit)
  #endif
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#elif __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeASCII(c_str, size, NULL)
#else
  #define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#endif


/* Test for GCC > 2.95 */
#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
  #define likely(x)   __builtin_expect(!!(x), 1)
  #define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
/* PretendToInitialize */
#ifdef __cplusplus
#if __cplusplus > 201103L
#include <type_traits>
#endif
template <typename T>
static void __Pyx_pretend_to_initialize(T* ptr) {
#if __cplusplus > 201103L
    if ((std::is_trivially_default_constructible<T>::value))
#endif
        *ptr = T();
    (void)ptr;
}
#else
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
#endif


#if !CYTHON_USE_MODULE_STATE
static PyObject *__pyx_m = NULL;
#endif
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * const __pyx_cfilenm = __FILE__;
static const char *__pyx_filename;

/* #### Code section: filename_table ### */

static const char* const __pyx_f[] = {
  "src/uharfbuzz/_harfbuzz.pyx",
  "src/uharfbuzz/_face.pxi",
  "src/uharfbuzz/_set.pxi",
  "src/uharfbuzz/_font.pxi",
  "<stringsource>",
  "src/uharfbuzz/_map.pxi",
  "src/uharfbuzz/_blob.pxi",
  "src/uharfbuzz/_buffer.pxi",
  "src/uharfbuzz/_draw.pxi",
  "src/uharfbuzz/_paint.pxi",
  "src/uharfbuzz/_raster.pxi",
  "src/uharfbuzz/_serialize.pxi",
  "src/uharfbuzz/_subset.pxi",
};
/* #### Code section: utility_code_proto_before_types ### */
/* Atomics.proto (used by UnpackUnboundCMethod) */
#include <pythread.h>
#ifndef CYTHON_ATOMICS
    #define CYTHON_ATOMICS 1
#endif
#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
#define __PYX_GET_CYTHON_COMPILING_IN_CPYTHON_FREETHREADING() CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __pyx_atomic_int_type int
#define __pyx_nonatomic_int_type int
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
                        (__STDC_VERSION__ >= 201112L) &&\
                        !defined(__STDC_NO_ATOMICS__))
    #include <stdatomic.h>
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
                    (__cplusplus >= 201103L) ||\
                    (defined(_MSC_VER) && _MSC_VER >= 1700)))
    #include <atomic>
#endif
#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
                        (__STDC_VERSION__ >= 201112L) &&\
                        !defined(__STDC_NO_ATOMICS__) &&\
                       ATOMIC_INT_LOCK_FREE == 2)
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type atomic_int
    #define __pyx_atomic_ptr_type atomic_uintptr_t
    #define __pyx_nonatomic_ptr_type uintptr_t
    #define __pyx_atomic_incr_relaxed(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed)
    #define __pyx_atomic_incr_acq_rel(value) atomic_fetch_add_explicit(value, 1, memory_order_acq_rel)
    #define __pyx_atomic_decr_acq_rel(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel)
    #define __pyx_atomic_sub(value, arg) atomic_fetch_sub(value, arg)
    #define __pyx_atomic_int_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
    #define __pyx_atomic_load(value) atomic_load(value)
    #define __pyx_atomic_store(value, new_value) atomic_store(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) atomic_load_explicit(value, memory_order_relaxed)
    #define __pyx_atomic_pointer_load_acquire(value) atomic_load_explicit(value, memory_order_acquire)
    #define __pyx_atomic_pointer_exchange(value, new_value) atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
    #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) atomic_compare_exchange_strong(value, expected, desired)
    #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
        #pragma message ("Using standard C atomics")
    #elif defined(__PYX_DEBUG_ATOMICS)
        #warning "Using standard C atomics"
    #endif
#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
                    (__cplusplus >= 201103L) ||\
\
                    (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\
                    ATOMIC_INT_LOCK_FREE == 2)
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type std::atomic_int
    #define __pyx_atomic_ptr_type std::atomic_uintptr_t
    #define __pyx_nonatomic_ptr_type uintptr_t
    #define __pyx_atomic_incr_relaxed(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed)
    #define __pyx_atomic_incr_acq_rel(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_acq_rel)
    #define __pyx_atomic_decr_acq_rel(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel)
    #define __pyx_atomic_sub(value, arg) std::atomic_fetch_sub(value, arg)
    #define __pyx_atomic_int_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
    #define __pyx_atomic_load(value) std::atomic_load(value)
    #define __pyx_atomic_store(value, new_value) std::atomic_store(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) std::atomic_load_explicit(value, std::memory_order_relaxed)
    #define __pyx_atomic_pointer_load_acquire(value) std::atomic_load_explicit(value, std::memory_order_acquire)
    #define __pyx_atomic_pointer_exchange(value, new_value) std::atomic_exchange(value, (__pyx_nonatomic_ptr_type)new_value)
    #define __pyx_atomic_pointer_cmp_exchange(value, expected, desired) std::atomic_compare_exchange_strong(value, expected, desired)
    #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
        #pragma message ("Using standard C++ atomics")
    #elif defined(__PYX_DEBUG_ATOMICS)
        #warning "Using standard C++ atomics"
    #endif
#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
                    (__GNUC_MINOR__ > 1 ||\
                    (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
    #define __pyx_atomic_ptr_type void*
    #define __pyx_nonatomic_ptr_type void*
    #define __pyx_atomic_incr_relaxed(value) __sync_fetch_and_add(value, 1)
    #define __pyx_atomic_incr_acq_rel(value) __sync_fetch_and_add(value, 1)
    #define __pyx_atomic_decr_acq_rel(value) __sync_fetch_and_sub(value, 1)
    #define __pyx_atomic_sub(value, arg) __sync_fetch_and_sub(value, arg)
    static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
        __pyx_nonatomic_int_type old = __sync_val_compare_and_swap(value, *expected, desired);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #define __pyx_atomic_load(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_store(value, new_value) __sync_lock_test_and_set(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_pointer_load_acquire(value) __sync_fetch_and_add(value, 0)
    #define __pyx_atomic_pointer_exchange(value, new_value) __sync_lock_test_and_set(value, (__pyx_atomic_ptr_type)new_value)
    static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
        __pyx_nonatomic_ptr_type old = __sync_val_compare_and_swap(value, *expected, desired);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #ifdef __PYX_DEBUG_ATOMICS
        #warning "Using GNU atomics"
    #endif
#elif CYTHON_ATOMICS && defined(_MSC_VER)
    #include <intrin.h>
    #undef __pyx_atomic_int_type
    #define __pyx_atomic_int_type long
    #define __pyx_atomic_ptr_type void*
    #undef __pyx_nonatomic_int_type
    #define __pyx_nonatomic_int_type long
    #define __pyx_nonatomic_ptr_type void*
    #pragma intrinsic (_InterlockedExchangeAdd, _InterlockedExchange, _InterlockedCompareExchange, _InterlockedCompareExchangePointer, _InterlockedExchangePointer)
    #define __pyx_atomic_incr_relaxed(value) _InterlockedExchangeAdd(value, 1)
    #define __pyx_atomic_incr_acq_rel(value) _InterlockedExchangeAdd(value, 1)
    #define __pyx_atomic_decr_acq_rel(value) _InterlockedExchangeAdd(value, -1)
    #define __pyx_atomic_sub(value, arg) _InterlockedExchangeAdd(value, -arg)
    static CYTHON_INLINE int __pyx_atomic_int_cmp_exchange(__pyx_atomic_int_type* value, __pyx_nonatomic_int_type* expected, __pyx_nonatomic_int_type desired) {
        __pyx_nonatomic_int_type old = _InterlockedCompareExchange(value, desired, *expected);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #define __pyx_atomic_load(value) _InterlockedExchangeAdd(value, 0)
    #define __pyx_atomic_store(value, new_value) _InterlockedExchange(value, new_value)
    #define __pyx_atomic_pointer_load_relaxed(value) *(void * volatile *)value
    #define __pyx_atomic_pointer_load_acquire(value) _InterlockedCompareExchangePointer(value, 0, 0)
    #define __pyx_atomic_pointer_exchange(value, new_value) _InterlockedExchangePointer(value, (__pyx_atomic_ptr_type)new_value)
    static CYTHON_INLINE int __pyx_atomic_pointer_cmp_exchange(__pyx_atomic_ptr_type* value, __pyx_nonatomic_ptr_type* expected, __pyx_nonatomic_ptr_type desired) {
        __pyx_atomic_ptr_type old = _InterlockedCompareExchangePointer(value, desired, *expected);
        int result = old == *expected;
        *expected = old;
        return result;
    }
    #ifdef __PYX_DEBUG_ATOMICS
        #pragma message ("Using MSVC atomics")
    #endif
#else
    #undef CYTHON_ATOMICS
    #define CYTHON_ATOMICS 0
    #ifdef __PYX_DEBUG_ATOMICS
        #warning "Not using atomics"
    #endif
#endif

/* CriticalSectionsDefinition.proto (used by CriticalSections) */
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyCriticalSection void*
#define __Pyx_PyCriticalSection2 void*
#define __Pyx_PyCriticalSection_End(cs)
#define __Pyx_PyCriticalSection2_End(cs)
#else
#define __Pyx_PyCriticalSection PyCriticalSection
#define __Pyx_PyCriticalSection2 PyCriticalSection2
#define __Pyx_PyCriticalSection_End PyCriticalSection_End
#define __Pyx_PyCriticalSection2_End PyCriticalSection2_End
#endif

/* CriticalSections.proto (used by ParseKeywordsImpl) */
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyCriticalSection_Begin(cs, arg) (void)(cs)
#define __Pyx_PyCriticalSection2_Begin(cs, arg1, arg2) (void)(cs)
#else
#define __Pyx_PyCriticalSection_Begin PyCriticalSection_Begin
#define __Pyx_PyCriticalSection2_Begin PyCriticalSection2_Begin
#endif
#if PY_VERSION_HEX < 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_BEGIN_CRITICAL_SECTION(o) {
#define __Pyx_END_CRITICAL_SECTION() }
#else
#define __Pyx_BEGIN_CRITICAL_SECTION Py_BEGIN_CRITICAL_SECTION
#define __Pyx_END_CRITICAL_SECTION Py_END_CRITICAL_SECTION
#endif

/* IncludeStructmemberH.proto (used by FixUpExtensionType) */
#include <structmember.h>

/* #### Code section: numeric_typedefs ### */
/* #### Code section: complex_type_declarations ### */
/* #### Code section: type_declarations ### */

/*--- Type declarations ---*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput;
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr;
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr;
struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods;
struct __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc;
typedef struct __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc;
struct __pyx_ctuple_double__and_double;
typedef struct __pyx_ctuple_double__and_double __pyx_ctuple_double__and_double;

/* "src/uharfbuzz/_font.pxi":623
 *         return hb_style_get_value(self._hb_font, tag)
 * 
 * cdef struct _pen_methods:             # <<<<<<<<<<<<<<
 *     void *moveTo
 *     void *lineTo
*/
struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods {
  void *moveTo;
  void *lineTo;
  void *curveTo;
  void *qCurveTo;
  void *closePath;
};

/* "src/uharfbuzz/_raster.pxi":96
 * 
 *     @transform.setter
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):             # <<<<<<<<<<<<<<
 *         xx, yx, xy, yy, dx, dy = value
 *         hb_raster_draw_set_transform(self._hb_raster_draw, xx, yx, xy, yy, dx, dy)
*/
struct __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc {
  double f0;
  double f1;
  double f2;
  double f3;
  double f4;
  double f5;
};

/* "src/uharfbuzz/_raster.pxi":107
 * 
 *     @scale_factor.setter
 *     def scale_factor(self, value: Tuple[float, float]):             # <<<<<<<<<<<<<<
 *         x, y = value
 *         hb_raster_draw_set_scale_factor(self._hb_raster_draw, x, y)
*/
struct __pyx_ctuple_double__and_double {
  double f0;
  double f1;
};

/* "src/uharfbuzz/_set.pxi":1
 * cdef class Set:             # <<<<<<<<<<<<<<
 *     cdef hb_set_t* _hb_set
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Set *__pyx_vtab;
  hb_set_t *_hb_set;
};


/* "src/uharfbuzz/_set.pxi":172
 *         return ("Set({%s})" % s)
 * 
 * cdef class SetIter:             # <<<<<<<<<<<<<<
 *     cdef Set s
 *     cdef hb_set_t *_hb_set
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *s;
  hb_set_t *_hb_set;
  hb_codepoint_t _c;
};


/* "src/uharfbuzz/_map.pxi":1
 * cdef class Map:             # <<<<<<<<<<<<<<
 *     cdef hb_map_t* _hb_map
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Map *__pyx_vtab;
  hb_map_t *_hb_map;
};


/* "src/uharfbuzz/_map.pxi":112
 *         return ("Map({%s})" % s)
 * 
 * cdef class MapIter:             # <<<<<<<<<<<<<<
 *     cdef Map m
 *     cdef hb_map_t *_hb_map
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *m;
  hb_map_t *_hb_map;
  int _i;
};


/* "src/uharfbuzz/_blob.pxi":1
 * cdef class Blob:             # <<<<<<<<<<<<<<
 *     cdef hb_blob_t* _hb_blob
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Blob *__pyx_vtab;
  hb_blob_t *_hb_blob;
};


/* "src/uharfbuzz/_buffer.pxi":6
 *     SAFE_TO_INSERT_TATWEEL = HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
 * 
 * cdef class GlyphInfo:             # <<<<<<<<<<<<<<
 * 
 *     cdef hb_glyph_info_t _hb_glyph_info
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_vtab;
  hb_glyph_info_t _hb_glyph_info;
};


/* "src/uharfbuzz/_buffer.pxi":27
 * 
 * 
 * cdef class GlyphPosition:             # <<<<<<<<<<<<<<
 *     cdef hb_glyph_position_t _hb_glyph_position
 *     # could maybe store Buffer to prevent GC
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_vtab;
  hb_glyph_position_t _hb_glyph_position;
};


/* "src/uharfbuzz/_buffer.pxi":98
 *     DEFINED = HB_BUFFER_SERIALIZE_FLAG_DEFINED
 * 
 * cdef class Buffer:             # <<<<<<<<<<<<<<
 *     cdef hb_buffer_t* _hb_buffer
 *     cdef object _message_callback
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer {
  PyObject_HEAD
  hb_buffer_t *_hb_buffer;
  PyObject *_message_callback;
};


/* "src/uharfbuzz/_face.pxi":122
 * 
 * 
 * cdef class Face:             # <<<<<<<<<<<<<<
 *     cdef hb_face_t* _hb_face
 *     cdef object _reference_table_func
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Face *__pyx_vtab;
  hb_face_t *_hb_face;
  PyObject *_reference_table_func;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *_blob;
};


/* "src/uharfbuzz/_draw.pxi":51
 * 
 * 
 * cdef class DrawFuncs:             # <<<<<<<<<<<<<<
 *     cdef hb_draw_funcs_t* _hb_drawfuncs
 *     cdef object _move_to_func
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs {
  PyObject_HEAD
  hb_draw_funcs_t *_hb_drawfuncs;
  PyObject *_move_to_func;
  PyObject *_line_to_func;
  PyObject *_cubic_to_func;
  PyObject *_quadratic_to_func;
  PyObject *_close_path_func;
};


/* "src/uharfbuzz/_paint.pxi":44
 * 
 * 
 * cdef class ColorLine:             # <<<<<<<<<<<<<<
 *     cdef hb_color_line_t* _color_line
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_vtab;
  hb_color_line_t *_color_line;
};


/* "src/uharfbuzz/_paint.pxi":256
 * 
 * 
 * cdef class PaintFuncs:             # <<<<<<<<<<<<<<
 *     cdef hb_paint_funcs_t* _hb_paintfuncs
 *     cdef object _push_transform_func
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs {
  PyObject_HEAD
  hb_paint_funcs_t *_hb_paintfuncs;
  PyObject *_push_transform_func;
  PyObject *_pop_transform_func;
  PyObject *_color_glyph_func;
  PyObject *_push_clip_glyph_func;
  PyObject *_push_clip_rectangle_func;
  PyObject *_pop_clip_func;
  PyObject *_color_func;
  PyObject *_image_func;
  PyObject *_linear_gradient_func;
  PyObject *_radial_gradient_func;
  PyObject *_sweep_gradient_func;
  PyObject *_push_group_func;
  PyObject *_pop_group_func;
  PyObject *_custom_palette_color_func;
};


/* "src/uharfbuzz/_font.pxi":140
 *     WEIGHT = HB_STYLE_TAG_WEIGHT
 * 
 * cdef class Font:             # <<<<<<<<<<<<<<
 *     cdef hb_font_t* _hb_font
 *     # GC bookkeeping
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font *__pyx_vtab;
  hb_font_t *_hb_font;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *_face;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *_ffuncs;
};


/* "src/uharfbuzz/_font.pxi":775
 * 
 * 
 * cdef class FontFuncs:             # <<<<<<<<<<<<<<
 *     cdef hb_font_funcs_t* _hb_ffuncs
 *     cdef object _glyph_h_advance_func
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs {
  PyObject_HEAD
  hb_font_funcs_t *_hb_ffuncs;
  PyObject *_glyph_h_advance_func;
  PyObject *_glyph_v_advance_func;
  PyObject *_glyph_v_origin_func;
  PyObject *_glyph_name_func;
  PyObject *_nominal_glyph_func;
  PyObject *_variation_glyph_func;
  PyObject *_font_h_extents_func;
  PyObject *_font_v_extents_func;
};


/* "src/uharfbuzz/_raster.pxi":14
 * 
 * 
 * cdef class RasterImage:             # <<<<<<<<<<<<<<
 *     cdef hb_raster_image_t* _hb_raster_image
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_vtab;
  hb_raster_image_t *_hb_raster_image;
};


/* "src/uharfbuzz/_raster.pxi":78
 * 
 * 
 * cdef class RasterDraw:             # <<<<<<<<<<<<<<
 *     cdef hb_raster_draw_t* _hb_raster_draw
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw {
  PyObject_HEAD
  hb_raster_draw_t *_hb_raster_draw;
};


/* "src/uharfbuzz/_raster.pxi":161
 * 
 * 
 * cdef class RasterPaint:             # <<<<<<<<<<<<<<
 *     cdef hb_raster_paint_t* _hb_raster_paint
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint {
  PyObject_HEAD
  hb_raster_paint_t *_hb_raster_paint;
};


/* "src/uharfbuzz/_serialize.pxi":1
 * cdef class HBObject:             # <<<<<<<<<<<<<<
 *     cdef hb_subset_serialize_object_t* _hb_obj_list
 *     cdef unsigned int _num
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject {
  PyObject_HEAD
  struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *__pyx_vtab;
  hb_subset_serialize_object_t *_hb_obj_list;
  unsigned int _num;
};


/* "src/uharfbuzz/_subset.pxi":36
 * 
 * 
 * cdef class SubsetInput:             # <<<<<<<<<<<<<<
 *     cdef hb_subset_input_t* _hb_input
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput {
  PyObject_HEAD
  hb_subset_input_t *_hb_input;
};


/* "src/uharfbuzz/_subset.pxi":139
 * 
 * 
 * cdef class SubsetPlan:             # <<<<<<<<<<<<<<
 *     cdef hb_subset_plan_t* _hb_plan
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan {
  PyObject_HEAD
  hb_subset_plan_t *_hb_plan;
};


/* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated {
  PyObject_HEAD
  PyObject *__pyx_v_replacement;
};


/* "uharfbuzz/_harfbuzz.pyx":44
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
 *     def decorator(func):             # <<<<<<<<<<<<<<
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *__pyx_outer_scope;
  PyObject *__pyx_v_func;
};


/* "src/uharfbuzz/_set.pxi":169
 *         if self.is_inverted():
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)             # <<<<<<<<<<<<<<
 *         return ("Set({%s})" % s)
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_v;
};


/* "src/uharfbuzz/_map.pxi":100
 * 
 *     def keys(self):
 *         return (k for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def values(self):
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};


/* "src/uharfbuzz/_map.pxi":103
 * 
 *     def values(self):
 *         return (v for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr {
  PyObject_HEAD
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
};


/* "src/uharfbuzz/_map.pxi":109
 * 
 *     def __repr__(self):
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))             # <<<<<<<<<<<<<<
 *         return ("Map({%s})" % s)
 * 
*/
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr {
  PyObject_HEAD
  PyObject *__pyx_genexpr_arg_0;
  PyObject *__pyx_v_k;
  PyObject *__pyx_v_v;
};



/* "src/uharfbuzz/_set.pxi":1
 * cdef class Set:             # <<<<<<<<<<<<<<
 *     cdef hb_set_t* _hb_set
 * 
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Set {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *(*from_ptr)(hb_set_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Set *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_Set;


/* "src/uharfbuzz/_map.pxi":1
 * cdef class Map:             # <<<<<<<<<<<<<<
 *     cdef hb_map_t* _hb_map
 * 
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Map {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *(*from_ptr)(hb_map_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Map *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_Map;


/* "src/uharfbuzz/_blob.pxi":1
 * cdef class Blob:             # <<<<<<<<<<<<<<
 *     cdef hb_blob_t* _hb_blob
 * 
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Blob {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *(*from_ptr)(hb_blob_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Blob *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_Blob;


/* "src/uharfbuzz/_buffer.pxi":6
 *     SAFE_TO_INSERT_TATWEEL = HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
 * 
 * cdef class GlyphInfo:             # <<<<<<<<<<<<<<
 * 
 *     cdef hb_glyph_info_t _hb_glyph_info
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphInfo {
  PyObject *(*set)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *, hb_glyph_info_t);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphInfo;


/* "src/uharfbuzz/_buffer.pxi":27
 * 
 * 
 * cdef class GlyphPosition:             # <<<<<<<<<<<<<<
 *     cdef hb_glyph_position_t _hb_glyph_position
 *     # could maybe store Buffer to prevent GC
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphPosition {
  PyObject *(*set)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *, hb_glyph_position_t);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphPosition;


/* "src/uharfbuzz/_face.pxi":122
 * 
 * 
 * cdef class Face:             # <<<<<<<<<<<<<<
 *     cdef hb_face_t* _hb_face
 *     cdef object _reference_table_func
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Face {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *(*from_ptr)(hb_face_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Face *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_Face;


/* "src/uharfbuzz/_paint.pxi":44
 * 
 * 
 * cdef class ColorLine:             # <<<<<<<<<<<<<<
 *     cdef hb_color_line_t* _color_line
 * 
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_ColorLine {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *(*from_ptr)(hb_color_line_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_ColorLine;


/* "src/uharfbuzz/_font.pxi":140
 *     WEIGHT = HB_STYLE_TAG_WEIGHT
 * 
 * cdef class Font:             # <<<<<<<<<<<<<<
 *     cdef hb_font_t* _hb_font
 *     # GC bookkeeping
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font {
  PyObject *(*_Font__create)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *);
  PyObject *(*_Font__create_sub_font)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *);
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *(*from_ptr)(hb_font_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_Font;


/* "src/uharfbuzz/_raster.pxi":14
 * 
 * 
 * cdef class RasterImage:             # <<<<<<<<<<<<<<
 *     cdef hb_raster_image_t* _hb_raster_image
 * 
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_RasterImage {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *(*from_ptr)(hb_raster_image_t *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_RasterImage;


/* "src/uharfbuzz/_serialize.pxi":1
 * cdef class HBObject:             # <<<<<<<<<<<<<<
 *     cdef hb_subset_serialize_object_t* _hb_obj_list
 *     cdef unsigned int _num
*/

struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject {
  PyObject *(*update_obj_length)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, char *, char *);
  hb_subset_serialize_link_t *(*create_links)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, unsigned int, int);
  PyObject *(*update_links)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, int, PyObject *);
};
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *__pyx_vtabptr_9uharfbuzz_9_harfbuzz_HBObject;
/* #### Code section: utility_code_proto ### */

/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, Py_ssize_t);
    void (*DECREF)(void*, PyObject*, Py_ssize_t);
    void (*GOTREF)(void*, PyObject*, Py_ssize_t);
    void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
    void* (*SetupContext)(const char*, Py_ssize_t, const char*);
    void (*FinishContext)(void**);
  } __Pyx_RefNannyAPIStruct;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          if (acquire_gil) {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
              PyGILState_Release(__pyx_gilstate_save);\
          } else {\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
          }
  #define __Pyx_RefNannyFinishContextNogil() {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __Pyx_RefNannyFinishContext();\
              PyGILState_Release(__pyx_gilstate_save);\
          }
  #define __Pyx_RefNannyFinishContextNogil() {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __Pyx_RefNannyFinishContext();\
              PyGILState_Release(__pyx_gilstate_save);\
          }
  #define __Pyx_RefNannyFinishContext()\
          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
  #define __Pyx_XINCREF(r)  do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0)
  #define __Pyx_XDECREF(r)  do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
  #define __Pyx_XGOTREF(r)  do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
  #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
#else
  #define __Pyx_RefNannyDeclarations
  #define __Pyx_RefNannySetupContext(name, acquire_gil)
  #define __Pyx_RefNannyFinishContextNogil()
  #define __Pyx_RefNannyFinishContext()
  #define __Pyx_INCREF(r) Py_INCREF(r)
  #define __Pyx_DECREF(r) Py_DECREF(r)
  #define __Pyx_GOTREF(r)
  #define __Pyx_GIVEREF(r)
  #define __Pyx_XINCREF(r) Py_XINCREF(r)
  #define __Pyx_XDECREF(r) Py_XDECREF(r)
  #define __Pyx_XGOTREF(r)
  #define __Pyx_XGIVEREF(r)
#endif
#define __Pyx_Py_XDECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; Py_XDECREF(tmp);\
    } while (0)
#define __Pyx_XDECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_XDECREF(tmp);\
    } while (0)
#define __Pyx_DECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_DECREF(tmp);\
    } while (0)
#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)

/* PyErrExceptionMatches.proto (used by PyObjectGetAttrStrNoError) */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
#endif

/* PyThreadStateGet.proto (used by PyErrFetchRestore) */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
#if PY_VERSION_HEX >= 0x030C00A6
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->current_exception != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
#else
#define __Pyx_PyErr_Occurred()  (__pyx_tstate->curexc_type != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  (__pyx_tstate->curexc_type)
#endif
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred()  (PyErr_Occurred() != NULL)
#define __Pyx_PyErr_CurrentExceptionType()  PyErr_Occurred()
#endif

/* PyErrFetchRestore.proto (used by PyObjectGetAttrStrNoError) */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
#endif

/* PyObjectGetAttrStr.proto (used by PyObjectGetAttrStrNoError) */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

/* PyObjectGetAttrStrNoError.proto (used by GetBuiltinName) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);

/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);

/* IncludeStringH.proto (used by decode_c_string) */
#include <string.h>

/* decode_c_string_utf16.proto (used by decode_c_string) */
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = 0;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = -1;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
    int byteorder = 1;
    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
}

/* decode_c_string.proto */
static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));

/* PyObjectCall.proto (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif

/* PyObjectCallMethO.proto (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

/* PyObjectFastCall.proto */
#define __Pyx_PyObject_FastCall(func, args, nargs)  __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject * const*args, size_t nargs, PyObject *kwargs);

/* WriteUnraisableException.proto */
static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename,
                                  int full_traceback, int nogil);

/* TupleAndListFromArray.proto (used by fastcall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
#endif
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
#endif

/* BytesEquals.proto (used by UnicodeEquals) */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);

/* UnicodeEquals.proto (used by fastcall) */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);

/* fastcall.proto */
#if CYTHON_AVOID_BORROWED_REFS
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_PySequence_ITEM(args, i)
#elif CYTHON_ASSUME_SAFE_MACROS
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_NewRef(__Pyx_PyTuple_GET_ITEM(args, i))
#else
    #define __Pyx_ArgRef_VARARGS(args, i) __Pyx_XNewRef(PyTuple_GetItem(args, i))
#endif
#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
#define __Pyx_KwValues_VARARGS(args, nargs) NULL
#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
#if CYTHON_METH_FASTCALL
    #define __Pyx_ArgRef_FASTCALL(args, i) __Pyx_NewRef(args[i])
    #define __Pyx_NumKwargs_FASTCALL(kwds) __Pyx_PyTuple_GET_SIZE(kwds)
    #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
    static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
    CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues);
  #else
    #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
  #endif
#else
    #define __Pyx_ArgRef_FASTCALL __Pyx_ArgRef_VARARGS
    #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
    #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
    #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
    #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
#endif
#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
#if CYTHON_METH_FASTCALL || (CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(args + start, stop - start)
#else
#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
#endif

/* decode_c_bytes.proto (used by decode_bytes) */
static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));

/* decode_bytes.proto */
static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
         PyObject* string, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
    char* as_c_string;
    Py_ssize_t size;
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
    as_c_string = PyBytes_AS_STRING(string);
    size = PyBytes_GET_SIZE(string);
#else
    if (PyBytes_AsStringAndSize(string, &as_c_string, &size) < 0) {
        return NULL;
    }
#endif
    return __Pyx_decode_c_bytes(
        as_c_string, size,
        start, stop, encoding, errors, decode_func);
}

/* py_dict_items.proto (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d);

/* CallCFunction.proto (used by CallUnboundCMethod0) */
#define __Pyx_CallCFunction(cfunc, self, args)\
    ((PyCFunction)(void(*)(void))(cfunc)->func)(self, args)
#define __Pyx_CallCFunctionWithKeywords(cfunc, self, args, kwargs)\
    ((PyCFunctionWithKeywords)(void(*)(void))(cfunc)->func)(self, args, kwargs)
#define __Pyx_CallCFunctionFast(cfunc, self, args, nargs)\
    ((__Pyx_PyCFunctionFast)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs)
#define __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, nargs, kwnames)\
    ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))(PyCFunction)(cfunc)->func)(self, args, nargs, kwnames)

/* PyObjectCallOneArg.proto (used by CallUnboundCMethod0) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);

/* UnpackUnboundCMethod.proto (used by CallUnboundCMethod0) */
typedef struct {
    PyObject *type;
    PyObject **method_name;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && CYTHON_ATOMICS
    __pyx_atomic_int_type initialized;
#endif
    PyCFunction func;
    PyObject *method;
    int flag;
} __Pyx_CachedCFunction;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
static CYTHON_INLINE int __Pyx_CachedCFunction_GetAndSetInitializing(__Pyx_CachedCFunction *cfunc) {
#if !CYTHON_ATOMICS
    return 1;
#else
    __pyx_nonatomic_int_type expected = 0;
    if (__pyx_atomic_int_cmp_exchange(&cfunc->initialized, &expected, 1)) {
        return 0;
    }
    return expected;
#endif
}
static CYTHON_INLINE void __Pyx_CachedCFunction_SetFinishedInitializing(__Pyx_CachedCFunction *cfunc) {
#if CYTHON_ATOMICS
    __pyx_atomic_store(&cfunc->initialized, 2);
#endif
}
#else
#define __Pyx_CachedCFunction_GetAndSetInitializing(cfunc) 2
#define __Pyx_CachedCFunction_SetFinishedInitializing(cfunc)
#endif

/* CallUnboundCMethod0.proto */
CYTHON_UNUSED
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#else
#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
#endif

/* py_dict_values.proto (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d);

/* OwnedDictNext.proto (used by ParseKeywordsImpl) */
#if CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue);
#else
CYTHON_INLINE
static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue);
#endif

/* RaiseDoubleKeywords.proto (used by ParseKeywordsImpl) */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);

/* ParseKeywordsImpl.export */
static int __Pyx_ParseKeywordsTuple(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs
);
static int __Pyx_ParseKeywordDictToDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name
);
static int __Pyx_ParseKeywordDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs
);

/* CallUnboundCMethod2.proto */
CYTHON_UNUSED
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2);
#else
#define __Pyx_CallUnboundCMethod2(cfunc, self, arg1, arg2)  __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2)
#endif

/* ParseKeywords.proto */
static CYTHON_INLINE int __Pyx_ParseKeywords(
    PyObject *kwds, PyObject *const *kwvalues, PyObject ** const argnames[],
    PyObject *kwds2, PyObject *values[],
    Py_ssize_t num_pos_args, Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs
);

/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);

/* KeywordStringCheck.proto */
static CYTHON_INLINE int __Pyx_CheckKeywordStrings(const char* function_name, PyObject *kw);

/* RaiseClosureNameError.proto */
static void __Pyx_RaiseClosureNameError(const char *varname);

/* PyObjectFormatAndDecref.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f);
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f);

/* UnicodeConcatInPlace.proto */
# if CYTHON_COMPILING_IN_CPYTHON
    #if CYTHON_REFNANNY
        #define __Pyx_PyUnicode_ConcatInPlace(left, right, unsafe_shared) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, unsafe_shared, __pyx_refnanny)
    #else
        #define __Pyx_PyUnicode_ConcatInPlace(left, right, unsafe_shared) __Pyx_PyUnicode_ConcatInPlaceImpl(&left, right, unsafe_shared)
    #endif
    #define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_DefinitelyUniqueInPlace(left, right) __Pyx_PyUnicode_ConcatInPlace(left, right, __Pyx_ReferenceSharing_DefinitelyUnique)
    #define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(left, right) __Pyx_PyUnicode_ConcatInPlace(left, right, __Pyx_ReferenceSharing_OwnStrongReference)
    #define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_FunctionArgumentInPlace(left, right) __Pyx_PyUnicode_ConcatInPlace(left, right, __Pyx_ReferenceSharing_DefinitelyUnique)
    #define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_SharedReferenceInPlace(left, right) __Pyx_PyUnicode_ConcatInPlace(left, right, __Pyx_ReferenceSharing_SharedReference)
    static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right, int unsafe_shared
        #if CYTHON_REFNANNY
        , void* __pyx_refnanny
        #endif
    );
#else
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_DefinitelyUniqueInPlace __Pyx_PyUnicode_Concat
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace __Pyx_PyUnicode_Concat
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_FunctionArgumentInPlace __Pyx_PyUnicode_Concat
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_SharedReferenceInPlace __Pyx_PyUnicode_Concat
#endif
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_DefinitelyUniqueInPlaceSafe(left, right)\
    ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
    PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_DefinitelyUniqueInPlace(left, right))
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(left, right)\
    ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
    PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(left, right))
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_FunctionArgumentInPlaceSafe(left, right)\
    ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
    PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_FunctionArgumentInPlace(left, right))
#define __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_SharedReferenceInPlaceSafe(left, right)\
    ((unlikely((left) == Py_None) || unlikely((right) == Py_None)) ?\
    PyNumber_InPlaceAdd(left, right) : __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_SharedReferenceInPlace(left, right))

/* PyObjectFormatSimple.proto */
#if CYTHON_COMPILING_IN_PYPY
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#elif CYTHON_USE_TYPE_SLOTS
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
        likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
        PyObject_Format(s, f))
#else
    #define __Pyx_PyObject_FormatSimple(s, f) (\
        likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
        PyObject_Format(s, f))
#endif

/* JoinPyUnicode.export */
static PyObject* __Pyx_PyUnicode_Join(PyObject** values, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char);

/* PyDictVersioning.proto (used by GetModuleGlobalName) */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
    (version_var) = __PYX_GET_DICT_VERSION(dict);\
    (cache_var) = (value);
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
        (VAR) = __Pyx_XNewRef(__pyx_dict_cached_value);\
    } else {\
        (VAR) = __pyx_dict_cached_value = (LOOKUP);\
        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
    }\
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
#else
#define __PYX_GET_DICT_VERSION(dict)  (0)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
#endif

/* GetModuleGlobalName.proto */
#if CYTHON_USE_DICT_VERSIONS
#define __Pyx_GetModuleGlobalName(var, name)  do {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_mstate_global->__pyx_d))) ?\
        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
#define __Pyx_GetModuleGlobalNameUncached(var, name)  do {\
    PY_UINT64_T __pyx_dict_version;\
    PyObject *__pyx_dict_cached_value;\
    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
} while(0)
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
#else
#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
#endif

/* PySequenceContains.proto */
static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
    int result = PySequence_Contains(seq, item);
    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}

/* PyDeprecationWarning_Check.proto */
#define __Pyx_PyExc_DeprecationWarning_Check(obj)  __Pyx_TypeCheck(obj, PyExc_DeprecationWarning)

/* dict_setdefault.proto (used by FetchCommonType) */
static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value);

/* LimitedApiGetTypeDict.proto (used by SetItemOnTypeDict) */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp);
#endif

/* SetItemOnTypeDict.proto (used by FixUpExtensionType) */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v);
#define __Pyx_SetItemOnTypeDict(tp, k, v) __Pyx__SetItemOnTypeDict((PyTypeObject*)tp, k, v)

/* FixUpExtensionType.proto (used by FetchCommonType) */
static CYTHON_INLINE int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);

/* AddModuleRef.proto (used by FetchSharedCythonModule) */
#if ((CYTHON_COMPILING_IN_CPYTHON_FREETHREADING ) ||\
     __PYX_LIMITED_VERSION_HEX < 0x030d0000)
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name);
#else
  #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#endif

/* FetchSharedCythonModule.proto (used by FetchCommonType) */
static PyObject *__Pyx_FetchSharedCythonABIModule(void);

/* FetchCommonType.proto (used by CommonTypesMetaclass) */
static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases);

/* CommonTypesMetaclass.proto (used by CythonFunctionShared) */
static int __pyx_CommonTypesMetaclass_init(PyObject *module);
#define __Pyx_CommonTypesMetaclass_USED

/* CallTypeTraverse.proto (used by CythonFunctionShared) */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#define __Pyx_call_type_traverse(o, always_call, visit, arg) 0
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg);
#endif

/* PyMethodNew.proto (used by CythonFunctionShared) */
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ);

/* PyVectorcallFastCallDict.proto (used by CythonFunctionShared) */
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
#endif

/* CythonFunctionShared.proto (used by CythonFunction) */
#define __Pyx_CyFunction_USED
#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
#define __Pyx_CYFUNCTION_CCLASS        0x04
#define __Pyx_CYFUNCTION_COROUTINE     0x08
#define __Pyx_CyFunction_GetClosure(f)\
    (((__pyx_CyFunctionObject *) (f))->func_closure)
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
  #define __Pyx_CyFunction_GetClassObj(f)\
      (((__pyx_CyFunctionObject *) (f))->func_classobj)
#else
  #define __Pyx_CyFunction_GetClassObj(f)\
      ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
#endif
#define __Pyx_CyFunction_SetClassObj(f, classobj)\
    __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
#define __Pyx_CyFunction_Defaults(type, f)\
    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
typedef struct {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject_HEAD
    PyObject *func;
#elif PY_VERSION_HEX < 0x030900B1
    PyCFunctionObject func;
#else
    PyCMethodObject func;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API && CYTHON_METH_FASTCALL
    __pyx_vectorcallfunc func_vectorcall;
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_weakreflist;
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_dict;
#endif
    PyObject *func_name;
    PyObject *func_qualname;
    PyObject *func_doc;
    PyObject *func_globals;
    PyObject *func_code;
    PyObject *func_closure;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    PyObject *func_classobj;
#endif
    PyObject *defaults;
    int flags;
    PyObject *defaults_tuple;
    PyObject *defaults_kwdict;
    PyObject *(*defaults_getter)(PyObject *);
    PyObject *func_annotations;
    PyObject *func_is_coroutine;
} __pyx_CyFunctionObject;
#undef __Pyx_CyOrPyCFunction_Check
#define __Pyx_CyFunction_Check(obj)  __Pyx_TypeCheck(obj, __pyx_mstate_global->__pyx_CyFunctionType)
#define __Pyx_CyOrPyCFunction_Check(obj)  __Pyx_TypeCheck2(obj, __pyx_mstate_global->__pyx_CyFunctionType, &PyCFunction_Type)
#define __Pyx_CyFunction_CheckExact(obj)  __Pyx_IS_TYPE(obj, __pyx_mstate_global->__pyx_CyFunctionType)
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void));
#undef __Pyx_IsSameCFunction
#define __Pyx_IsSameCFunction(func, cfunc)   __Pyx__IsSameCyOrCFunction(func, cfunc)
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func,
                                                         PyTypeObject *defaults_type);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
                                                            PyObject *tuple);
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
                                                             PyObject *dict);
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
                                                              PyObject *dict);
static int __pyx_CyFunction_init(PyObject *module);
#if CYTHON_METH_FASTCALL
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
#else
#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
#endif
#endif

/* CythonFunction.proto */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
                                      int flags, PyObject* qualname,
                                      PyObject *closure,
                                      PyObject *module, PyObject *globals,
                                      PyObject* code);

/* PyObjectFastCallMethod.proto */
#if CYTHON_VECTORCALL && PY_VERSION_HEX >= 0x03090000
#define __Pyx_PyObject_FastCallMethod(name, args, nargsf) PyObject_VectorcallMethod(name, args, nargsf, NULL)
#else
static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf);
#endif

/* RejectKeywords.export */
static void __Pyx_RejectKeywords(const char* function_name, PyObject *kwds);

/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

/* pyint_simplify.proto */
static CYTHON_INLINE int __Pyx_PyInt_FromNumber(PyObject **number_var, const char *argname, int accept_none);

/* ArgTypeTestFunc.export */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
        __Pyx__ArgTypeTest(obj, type, name, exact))

/* PyKeyError_Check.proto */
#define __Pyx_PyExc_KeyError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_KeyError)

/* RaiseException.export */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

/* RaiseUnboundLocalError.proto */
static void __Pyx_RaiseUnboundLocalError(const char *varname);

/* ListCompAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len)) {
        Py_INCREF(x);
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
        L->ob_item[len] = x;
        #else
        PyList_SET_ITEM(list, len, x);
        #endif
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
#endif

/* GetException.proto (used by pep479) */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* pep479.proto */
static void __Pyx_Generator_Replace_StopIteration(int in_async_gen);

/* PyTypeError_Check.proto */
#define __Pyx_PyExc_TypeError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_TypeError)

/* IterFinish.proto (used by dict_iter) */
static CYTHON_INLINE int __Pyx_IterFinish(void);

/* PyObjectCallNoArg.proto (used by PyObjectCallMethod0) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);

/* PyObjectGetMethod.proto (used by PyObjectCallMethod0) */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
#endif

/* PyObjectCallMethod0.proto (used by dict_iter) */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);

/* RaiseNeedMoreValuesToUnpack.proto (used by UnpackTuple2) */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);

/* RaiseTooManyValuesToUnpack.proto (used by UnpackItemEndCheck) */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);

/* UnpackItemEndCheck.proto (used by UnpackTuple2) */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);

/* RaiseNoneIterError.proto (used by UnpackTupleError) */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);

/* UnpackTupleError.proto (used by UnpackTuple2) */
static void __Pyx_UnpackTupleError(PyObject *, Py_ssize_t index);

/* UnpackTuple2.proto (used by dict_iter) */
static CYTHON_INLINE int __Pyx_unpack_tuple2(
    PyObject* tuple, PyObject** value1, PyObject** value2, int is_tuple, int has_known_size, int decref_tuple);
static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
    PyObject* tuple, PyObject** value1, PyObject** value2, int decref_tuple);
static int __Pyx_unpack_tuple2_generic(
    PyObject* tuple, PyObject** value1, PyObject** value2, int has_known_size, int decref_tuple);

/* dict_iter.proto */
static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict, PyObject* method_name,
                                                   Py_ssize_t* p_orig_length, int* p_is_dict);
static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
                                              PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);

/* PyUnicode_Unicode.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj);

/* RaiseUnexpectedTypeError.proto */
static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);

/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000
        L->ob_item[len] = x;
        #else
        PyList_SET_ITEM(list, len, x);
        #endif
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck, unsafe_shared) :\
    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck, has_gil, unsafe_shared)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck, unsafe_shared) :\
    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared);
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck, int unsafe_shared);

/* PyValueError_Check.proto */
#define __Pyx_PyExc_ValueError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_ValueError)

/* SwapException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* GetTopmostException.proto (used by SaveResetException) */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif

/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
#endif

/* PyObjectVectorCallKwBuilder.proto */
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#if CYTHON_VECTORCALL
#if PY_VERSION_HEX >= 0x03090000
#define __Pyx_Object_Vectorcall_CallFromBuilder PyObject_Vectorcall
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder _PyObject_Vectorcall
#endif
#define __Pyx_MakeVectorcallBuilderKwds(n) PyTuple_New(n)
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n);
static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n);
#else
#define __Pyx_Object_Vectorcall_CallFromBuilder __Pyx_PyObject_FastCallDict
#define __Pyx_MakeVectorcallBuilderKwds(n) __Pyx_PyDict_NewPresized(n)
#define __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n) PyDict_SetItem(builder, key, value)
#define __Pyx_VectorcallBuilder_AddArgStr(key, value, builder, args, n) PyDict_SetItemString(builder, key, value)
#endif

/* AssertionsEnabled.proto */
#if CYTHON_COMPILING_IN_LIMITED_API  ||  PY_VERSION_HEX >= 0x030C0000
  static int __pyx_assertions_enabled_flag;
  #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
  #if __clang__ || __GNUC__
  __attribute__((no_sanitize("thread")))
  #endif
  static int __Pyx_init_assertions_enabled(void) {
    PyObject *builtins, *debug, *debug_str;
    int flag;
    builtins = PyEval_GetBuiltins();
    if (!builtins) goto bad;
    debug_str = PyUnicode_FromStringAndSize("__debug__", 9);
    if (!debug_str) goto bad;
    debug = PyObject_GetItem(builtins, debug_str);
    Py_DECREF(debug_str);
    if (!debug) goto bad;
    flag = PyObject_IsTrue(debug);
    Py_DECREF(debug);
    if (flag == -1) goto bad;
    __pyx_assertions_enabled_flag = flag;
    return 0;
  bad:
    __pyx_assertions_enabled_flag = 1;
    return -1;
  }
#else
  #define __Pyx_init_assertions_enabled()  (0)
  #define __pyx_assertions_enabled()  (!Py_OptimizeFlag)
#endif

/* PyAssertionError_Check.proto */
#define __Pyx_PyExc_AssertionError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_AssertionError)

/* PyLongBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyLong_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
#endif

/* PyLongBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static CYTHON_INLINE PyObject* __Pyx_PyLong_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyLong_MultiplyObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceMultiply(op1, op2) : PyNumber_Multiply(op1, op2))
#endif

/* BuildPyUnicode.proto (used by COrdinalToPyUnicode) */
static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, const char* chars, int clength,
                                                int prepend_sign, char padding_char);

/* COrdinalToPyUnicode.proto (used by CIntToPyUnicode) */
static CYTHON_INLINE int __Pyx_CheckUnicodeValue(int value);
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromOrdinal_Padded(int value, Py_ssize_t width, char padding_char);

/* GCCDiagnostics.proto (used by CIntToPyUnicode) */
#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#define __Pyx_HAS_GCC_DIAGNOSTIC
#endif

/* IncludeStdlibH.proto (used by CIntToPyUnicode) */
#include <stdlib.h>

/* CIntToPyUnicode.proto */
#define __Pyx_PyUnicode_From_Py_ssize_t(value, width, padding_char, format_char) (\
    ((format_char) == ('c')) ?\
        __Pyx_uchar___Pyx_PyUnicode_From_Py_ssize_t(value, width, padding_char) :\
        __Pyx____Pyx_PyUnicode_From_Py_ssize_t(value, width, padding_char, format_char)\
    )
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char);
static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char);

/* PyObjectCall2Args.proto (used by PyObjectCallMethod1) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);

/* PyObjectCallMethod1.proto (used by StringJoin) */
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);

/* StringJoin.proto */
static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values);

/* PyRuntimeError_Check.proto */
#define __Pyx_PyExc_RuntimeError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_RuntimeError)

/* pyfloat_simplify.proto */
static CYTHON_INLINE int __Pyx_PyFloat_FromNumber(PyObject **number_var, const char *argname, int accept_none);

/* SliceTupleAndList.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(PyObject* src, Py_ssize_t start, Py_ssize_t stop);
#else
#define __Pyx_PyList_GetSlice(seq, start, stop)   PySequence_GetSlice(seq, start, stop)
#define __Pyx_PyTuple_GetSlice(seq, start, stop)  PySequence_GetSlice(seq, start, stop)
#endif

/* AllocateExtensionType.proto */
static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final);

/* DefaultPlacementNew.proto */
#include <new>
template<typename T>
void __Pyx_default_placement_construct(T* x) {
    new (static_cast<void*>(x)) T();
}

/* CheckTypeForFreelists.proto */
#if CYTHON_USE_FREELISTS
#if CYTHON_USE_TYPE_SPECS
#define __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, expected_tp, expected_size) ((int) ((t) == (expected_tp)))
#define __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS  Py_TPFLAGS_IS_ABSTRACT
#else
#define __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, expected_tp, expected_size) ((int) ((t)->tp_basicsize == (expected_size)))
#define __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS  (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)
#endif
#define __PYX_CHECK_TYPE_FOR_FREELISTS(t, expected_tp, expected_size)\
    (__PYX_CHECK_FINAL_TYPE_FOR_FREELISTS((t), (expected_tp), (expected_size)) &\
     (int) (!__Pyx_PyType_HasFeature((t), __PYX_CHECK_TYPE_FOR_FREELIST_FLAGS)))
#endif

/* ValidateBasesTuple.proto (used by PyType_Ready) */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
#endif

/* PyType_Ready.proto */
CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);

/* SetVTable.proto */
static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);

/* GetVTable.proto (used by MergeVTables) */
static void* __Pyx_GetVtable(PyTypeObject *type);

/* MergeVTables.proto */
static int __Pyx_MergeVtables(PyTypeObject *type);

/* DelItemOnTypeDict.proto (used by SetupReduce) */
static int __Pyx__DelItemOnTypeDict(PyTypeObject *tp, PyObject *k);
#define __Pyx_DelItemOnTypeDict(tp, k) __Pyx__DelItemOnTypeDict((PyTypeObject*)tp, k)

/* SetupReduce.proto */
static int __Pyx_setup_reduce(PyObject* type_obj);

/* HasAttr.proto (used by ImportImpl) */
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_HasAttr(o, n)  PyObject_HasAttrWithError(o, n)
#else
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
#endif

/* ImportImpl.export */
static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level);

/* Import.proto */
static CYTHON_INLINE PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level);

/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);

/* Py3UpdateBases.proto */
static PyObject* __Pyx_PEP560_update_bases(PyObject *bases);

/* CalculateMetaclass.proto */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);

/* PyObjectLookupSpecial.proto (used by Py3ClassCreate) */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_LookupSpecialNoError(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 0)
#define __Pyx_PyObject_LookupSpecial(obj, attr_name)  __Pyx__PyObject_LookupSpecial(obj, attr_name, 1)
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error);
#else
#define __Pyx_PyObject_LookupSpecialNoError(o,n) __Pyx_PyObject_GetAttrStrNoError(o,n)
#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
#endif

/* Py3ClassCreate.proto */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
                                           PyObject *mkw, PyObject *modname, PyObject *doc);
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);

/* ClassMethod.proto */
#if !CYTHON_COMPILING_IN_LIMITED_API
#include "descrobject.h"
#endif
CYTHON_UNUSED static PyObject* __Pyx_Method_ClassMethod(PyObject *method);

/* GetNameInClass.proto */
#define __Pyx_GetNameInClass(var, nmspace, name)  (var) = __Pyx__GetNameInClass(nmspace, name)
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name);

/* SetNameInClass.proto */
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000
#define __Pyx_SetNameInClass(ns, name, value)\
    (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value))
#elif CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_SetNameInClass(ns, name, value)\
    (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value))
#else
#define __Pyx_SetNameInClass(ns, name, value)  PyObject_SetItem(ns, name, value)
#endif

/* CLineInTraceback.proto (used by AddTraceback) */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#else
#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#endif

/* CodeObjectCache.proto (used by AddTraceback) */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject __Pyx_CachedCodeObjectType;
#else
typedef PyCodeObject __Pyx_CachedCodeObjectType;
#endif
typedef struct {
    __Pyx_CachedCodeObjectType* code_object;
    int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
    int count;
    int max_count;
    __Pyx_CodeObjectCacheEntry* entries;
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_int_type accessor_count;
  #endif
};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object);

/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename);

/* FromPyCTupleUtility.proto */
static CYTHON_INLINE __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(PyObject *);

/* FromPyCTupleUtility.proto */
static CYTHON_INLINE __pyx_ctuple_double__and_double __pyx_convert__from_py___pyx_ctuple_double__and_double(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_codepoint_t(hb_codepoint_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_glyph_flags_t(hb_glyph_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_flags_t(hb_buffer_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_cluster_level_t(hb_buffer_cluster_level_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_content_type_t(hb_buffer_content_type_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_serialize_format_t(hb_buffer_serialize_format_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_serialize_flags_t(hb_buffer_serialize_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_var_axis_flags_t(hb_ot_var_axis_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_color_palette_flags_t(hb_ot_color_palette_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(hb_ot_layout_glyph_class_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_name_id_predefined_t(hb_ot_name_id_predefined_t value);

/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_paint_composite_mode_t(hb_paint_composite_mode_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_paint_extend_t(hb_paint_extend_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_constant_t(hb_ot_math_constant_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_kern_t(hb_ot_math_kern_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_glyph_part_flags_t(hb_ot_math_glyph_part_flags_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_metrics_tag_t(hb_ot_metrics_tag_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_style_tag_t(hb_style_tag_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_raster_format_t(hb_raster_format_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_subset_sets_t(hb_subset_sets_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_subset_flags_t(hb_subset_flags_t value);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_codepoint_t __Pyx_PyLong_As_hb_codepoint_t(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_bool_t(hb_bool_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_long(unsigned long value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_mask_t(hb_mask_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_position_t(hb_position_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_int(unsigned int value);

/* CIntFromPy.proto */
static CYTHON_INLINE unsigned int __Pyx_PyLong_As_unsigned_int(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_buffer_flags_t __Pyx_PyLong_As_hb_buffer_flags_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_buffer_cluster_level_t __Pyx_PyLong_As_hb_buffer_cluster_level_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_buffer_content_type_t __Pyx_PyLong_As_hb_buffer_content_type_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_buffer_serialize_format_t __Pyx_PyLong_As_hb_buffer_serialize_format_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_buffer_serialize_flags_t __Pyx_PyLong_As_hb_buffer_serialize_flags_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE uint8_t __Pyx_PyLong_As_uint8_t(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_uint32_t(uint32_t value);

/* CIntFromPy.proto */
static CYTHON_INLINE uint32_t __Pyx_PyLong_As_uint32_t(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_uint8_t(uint8_t value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_name_id_t(hb_ot_name_id_t value);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_ot_name_id_t __Pyx_PyLong_As_hb_ot_name_id_t(PyObject *);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_int(int value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_bool_t __Pyx_PyLong_As_hb_bool_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_ot_math_constant_t __Pyx_PyLong_As_hb_ot_math_constant_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_ot_math_kern_t __Pyx_PyLong_As_hb_ot_math_kern_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_position_t __Pyx_PyLong_As_hb_position_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_ot_metrics_tag_t __Pyx_PyLong_As_hb_ot_metrics_tag_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_style_tag_t __Pyx_PyLong_As_hb_style_tag_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE char __Pyx_PyLong_As_char(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_raster_format_t __Pyx_PyLong_As_hb_raster_format_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE size_t __Pyx_PyLong_As_size_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE hb_subset_sets_t __Pyx_PyLong_As_hb_subset_sets_t(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE unsigned long __Pyx_PyLong_As_unsigned_long(PyObject *);

/* FormatTypeName.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
typedef PyObject *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%U"
#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
#define __Pyx_PyType_GetFullyQualifiedName PyType_GetFullyQualifiedName
#else
static __Pyx_TypeName __Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp);
#endif
#else  // !LIMITED_API
typedef const char *__Pyx_TypeName;
#define __Pyx_FMT_TYPENAME "%.200s"
#define __Pyx_PyType_GetFullyQualifiedName(tp) ((tp)->tp_name)
#define __Pyx_DECREF_TypeName(obj)
#endif

/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *);

/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2) {
    return PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2);
}
#endif
#define __Pyx_PyErr_ExceptionMatches2(err1, err2)  __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
#ifdef PyExceptionInstance_Check
  #define __Pyx_PyBaseException_Check(obj) PyExceptionInstance_Check(obj)
#else
  #define __Pyx_PyBaseException_Check(obj) __Pyx_TypeCheck(obj, PyExc_BaseException)
#endif

/* GetRuntimeVersion.proto */
#if __PYX_LIMITED_VERSION_HEX < 0x030b0000
static unsigned long __Pyx_cached_runtime_version = 0;
static void __Pyx_init_runtime_version(void);
#else
#define __Pyx_init_runtime_version()
#endif
static unsigned long __Pyx_get_runtime_version(void);

/* IterNextPlain.proto (used by CoroutineBase) */
static CYTHON_INLINE PyObject *__Pyx_PyIter_Next_Plain(PyObject *iterator);
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject *__Pyx_GetBuiltinNext_LimitedAPI(void);
#endif

/* ReturnWithStopIteration.proto (used by CoroutineBase) */
static CYTHON_INLINE void __Pyx_ReturnWithStopIteration(PyObject* value, int async, int iternext);

/* CoroutineBase.proto (used by Generator) */
struct __pyx_CoroutineObject;
typedef PyObject *(*__pyx_coroutine_body_t)(struct __pyx_CoroutineObject *, PyThreadState *, PyObject *);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_ExcInfoStruct  _PyErr_StackItem
#else
typedef struct {
    PyObject *exc_type;
    PyObject *exc_value;
    PyObject *exc_traceback;
} __Pyx_ExcInfoStruct;
#endif
typedef struct __pyx_CoroutineObject {
    PyObject_HEAD
    __pyx_coroutine_body_t body;
    PyObject *closure;
    __Pyx_ExcInfoStruct gi_exc_state;
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    PyObject *gi_weakreflist;
#endif
    PyObject *classobj;
    PyObject *yieldfrom;
    __Pyx_pyiter_sendfunc yieldfrom_am_send;
    PyObject *gi_name;
    PyObject *gi_qualname;
    PyObject *gi_modulename;
    PyObject *gi_code;
    PyObject *gi_frame;
#if CYTHON_USE_SYS_MONITORING && (CYTHON_PROFILE || CYTHON_TRACE)
    PyMonitoringState __pyx_pymonitoring_state[__Pyx_MonitoringEventTypes_CyGen_count];
    uint64_t __pyx_pymonitoring_version;
#endif
    int resume_label;
    char is_running;
} __pyx_CoroutineObject;
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
    PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
    PyObject *name, PyObject *qualname, PyObject *module_name);
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name);
static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self);
static int __Pyx_Coroutine_clear(PyObject *self);
static __Pyx_PySendResult __Pyx_Coroutine_AmSend(PyObject *self, PyObject *value, PyObject **retval);
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value);
static __Pyx_PySendResult __Pyx_Coroutine_Close(PyObject *self, PyObject **retval);
static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_Coroutine_SwapException(self)
#define __Pyx_Coroutine_ResetAndClearException(self)  __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state)
#else
#define __Pyx_Coroutine_SwapException(self) {\
    __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\
    __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\
    }
#define __Pyx_Coroutine_ResetAndClearException(self) {\
    __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\
    (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\
    }
#endif
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue)
#else
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue)
#endif
static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue);
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state);
static char __Pyx_Coroutine_test_and_set_is_running(__pyx_CoroutineObject *gen);
static void __Pyx_Coroutine_unset_is_running(__pyx_CoroutineObject *gen);
static char __Pyx_Coroutine_get_is_running(__pyx_CoroutineObject *gen);
static PyObject *__Pyx_Coroutine_get_is_running_getter(PyObject *gen, void *closure);
#if __PYX_HAS_PY_AM_SEND == 2
static void __Pyx_SetBackportTypeAmSend(PyTypeObject *type, __Pyx_PyAsyncMethodsStruct *static_amsend_methods, __Pyx_pyiter_sendfunc am_send);
#endif
static PyObject *__Pyx_Coroutine_fail_reduce_ex(PyObject *self, PyObject *arg);

/* Generator.proto */
#define __Pyx_Generator_USED
#define __Pyx_Generator_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_mstate_global->__pyx_GeneratorType)
#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\
    __Pyx__Coroutine_New(__pyx_mstate_global->__pyx_GeneratorType, body, code, closure, name, qualname, module_name)
static PyObject *__Pyx_Generator_Next(PyObject *self);
static int __pyx_Generator_init(PyObject *module);
static CYTHON_INLINE PyObject *__Pyx_Generator_GetInlinedResult(PyObject *self);

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer);

/* DecompressString.proto */
static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo);

/* MultiPhaseInitModuleState.proto */
#if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
static PyObject *__Pyx_State_FindModule(void*);
static int __Pyx_State_AddModule(PyObject* module, void*);
static int __Pyx_State_RemoveModule(void*);
#elif CYTHON_USE_MODULE_STATE
#define __Pyx_State_FindModule PyState_FindModule
#define __Pyx_State_AddModule PyState_AddModule
#define __Pyx_State_RemoveModule PyState_RemoveModule
#endif

/* #### Code section: module_declarations ### */
/* CythonABIVersion.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
    #if CYTHON_METH_FASTCALL
        #define __PYX_FASTCALL_ABI_SUFFIX  "_fastcall"
    #else
        #define __PYX_FASTCALL_ABI_SUFFIX
    #endif
    #define __PYX_LIMITED_ABI_SUFFIX "limited" __PYX_FASTCALL_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
#else
    #define __PYX_LIMITED_ABI_SUFFIX
#endif
#if __PYX_HAS_PY_AM_SEND == 1
    #define __PYX_AM_SEND_ABI_SUFFIX
#elif __PYX_HAS_PY_AM_SEND == 2
    #define __PYX_AM_SEND_ABI_SUFFIX "amsendbackport"
#else
    #define __PYX_AM_SEND_ABI_SUFFIX "noamsend"
#endif
#ifndef __PYX_MONITORING_ABI_SUFFIX
    #define __PYX_MONITORING_ABI_SUFFIX
#endif
#if CYTHON_USE_TP_FINALIZE
    #define __PYX_TP_FINALIZE_ABI_SUFFIX
#else
    #define __PYX_TP_FINALIZE_ABI_SUFFIX "nofinalize"
#endif
#if CYTHON_USE_FREELISTS || !defined(__Pyx_AsyncGen_USED)
    #define __PYX_FREELISTS_ABI_SUFFIX
#else
    #define __PYX_FREELISTS_ABI_SUFFIX "nofreelists"
#endif
#define CYTHON_ABI  __PYX_ABI_VERSION __PYX_LIMITED_ABI_SUFFIX __PYX_MONITORING_ABI_SUFFIX __PYX_TP_FINALIZE_ABI_SUFFIX __PYX_FREELISTS_ABI_SUFFIX __PYX_AM_SEND_ABI_SUFFIX
#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr(hb_set_t *__pyx_v_hb_set); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr(hb_map_t *__pyx_v_hb_map); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(hb_blob_t *__pyx_v_hb_blob); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_9GlyphInfo_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self, hb_glyph_info_t __pyx_v_info); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_13GlyphPosition_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self, hb_glyph_position_t __pyx_v_position); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(hb_face_t *__pyx_v_hb_face); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr(hb_color_line_t *__pyx_v_color_line); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create_sub_font(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_f_9uharfbuzz_9_harfbuzz_4Font_from_ptr(hb_font_t *__pyx_v_hb_font); /* proto*/
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_f_9uharfbuzz_9_harfbuzz_11RasterImage_from_ptr(hb_raster_image_t *__pyx_v_hb_img); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_obj_length(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, char *__pyx_v_head, char *__pyx_v_tail); /* proto*/
static hb_subset_serialize_link_t *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_create_links(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, unsigned int __pyx_v_link_num, int __pyx_v_is_real_link); /* proto*/
static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_links(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, int __pyx_v_is_real_link, PyObject *__pyx_v_links); /* proto*/

/* Module declarations from "cython" */

/* Module declarations from "libc.stdint" */

/* Module declarations from "uharfbuzz.charfbuzz" */

/* Module declarations from "libc.string" */

/* Module declarations from "libc.stdlib" */

/* Module declarations from "libc.math" */

/* Module declarations from "cpython.pycapsule" */

/* Module declarations from "libc.stddef" */

/* Module declarations from "cpython.unicode" */

/* Module declarations from "cpython.mem" */

/* Module declarations from "uharfbuzz._harfbuzz" */
static hb_user_data_key_t __pyx_v_9uharfbuzz_9_harfbuzz_k;
static hb_draw_funcs_t *__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs;
static int __pyx_f_9uharfbuzz_9_harfbuzz_msgcallback(hb_buffer_t *, hb_font_t *, char const *, void *); /*proto*/
static hb_blob_t *__pyx_f_9uharfbuzz_9_harfbuzz__reference_table_func(hb_face_t *, hb_tag_t, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__move_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__line_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__close_path_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__quadratic_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__cubic_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_transform_func(hb_paint_funcs_t *, void *, float, float, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_transform_func(hb_paint_funcs_t *, void *, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_glyph_func(hb_paint_funcs_t *, void *, hb_codepoint_t, hb_font_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_glyph_func(hb_paint_funcs_t *, void *, hb_codepoint_t, hb_font_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_rectangle_func(hb_paint_funcs_t *, void *, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_clip_func(hb_paint_funcs_t *, void *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_func(hb_paint_funcs_t *, void *, hb_bool_t, hb_color_t, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_image_func(hb_paint_funcs_t *, void *, hb_blob_t *, unsigned int, unsigned int, hb_tag_t, float, hb_glyph_extents_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_linear_gradient_func(hb_paint_funcs_t *, void *, hb_color_line_t *, float, float, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_radial_gradient_func(hb_paint_funcs_t *, void *, hb_color_line_t *, float, float, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_sweep_gradient_func(hb_paint_funcs_t *, void *, hb_color_line_t *, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_group_func(hb_paint_funcs_t *, void *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_group_func(hb_paint_funcs_t *, void *, hb_paint_composite_mode_t, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_custom_palette_color_func(hb_paint_funcs_t *, void *, unsigned int, hb_color_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_move_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_line_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_close_path_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_quadratic_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, void *); /*proto*/
static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_cubic_to_func(hb_draw_funcs_t *, void *, hb_draw_state_t *, float, float, float, float, float, float, void *); /*proto*/
static hb_position_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_h_advance_func(hb_font_t *, void *, hb_codepoint_t, void *); /*proto*/
static hb_position_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_advance_func(hb_font_t *, void *, hb_codepoint_t, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_origin_func(hb_font_t *, void *, hb_codepoint_t, hb_position_t *, hb_position_t *, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_name_func(hb_font_t *, void *, hb_codepoint_t, char *, unsigned int, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__nominal_glyph_func(hb_font_t *, void *, hb_codepoint_t, hb_codepoint_t *, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__variation_glyph_func(hb_font_t *, void *, hb_codepoint_t, hb_codepoint_t, hb_codepoint_t *, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__font_h_extents_func(hb_font_t *, void *, hb_font_extents_t *, void *); /*proto*/
static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__font_v_extents_func(hb_font_t *, void *, hb_font_extents_t *, void *); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "uharfbuzz._harfbuzz"
extern int __pyx_module_is_main_uharfbuzz___harfbuzz;
int __pyx_module_is_main_uharfbuzz___harfbuzz = 0;

/* Implementation of "uharfbuzz._harfbuzz" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_staticmethod;
static PyObject *__pyx_builtin_NotImplemented;
static PyObject *__pyx_builtin_enumerate;
static PyObject *__pyx_builtin_round;
/* #### Code section: string_decls ### */
/* #### Code section: decls ### */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_version_string(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_decorator(PyObject *__pyx_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_2deprecated(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_replacement); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_init); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_6copy(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__copy__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_10clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_12__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_14invert(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_16is_inverted(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_18__contains__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_20add(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_22add_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_last); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_24remove(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_26discard(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_28del_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_last); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_30_is_equal(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_32__eq__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_34issubset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_larger_set); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_36issuperset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_smaller_set); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_38_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_40set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_42_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_44update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_46__ior__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_48intersection_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_50__iand__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_52difference_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_54__isub__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_56symmetric_difference_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_58__ixor__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other); /* proto */
static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_60__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3min___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3max___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_62__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__repr___genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_genexpr_arg_0); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_64__repr__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_66__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_68__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_2__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_4__next__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_init); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6copy(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__copy__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_10_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_12update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_14clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_16__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_18__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_20_is_equal(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_22__eq__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_other); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_24__setitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k, PyObject *__pyx_v_v); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_26get(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_28__getitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_30__contains__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_32__delitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_c); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_34items(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4keys_genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_36keys(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6values_genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_38values(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_40__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__repr___genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_42__repr__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_44__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_46__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_m); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_2__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_4__next__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self, PyObject *__pyx_v_data); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_2from_file_path(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_filename); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self); /* proto */
static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_6__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_8__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_4create(PyTypeObject *__pyx_v_cls); /* proto */
static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_10clear_contents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12set_language_from_ot_tag(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_14set_script_from_ot_tag(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_16add_codepoints(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_codepoints, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_18add_utf8(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_20add_str(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_22guess_segment_properties(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_24set_message_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_callback); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_26serialize(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_format, PyObject *__pyx_v_flags); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_28__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_30__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_5Color_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_5Color_2from_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_blob, int __pyx_v_index); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4create(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_blob, PyObject *__pyx_v_index); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_6create_for_tables(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5count___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4blob___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8reference_table(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10table_tags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8unicodes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10variation_unicodes(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_variation_selector); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12has_var_data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10axis_infos___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15named_instances___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_math_data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12is_glyph_extended_math_shape(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14get_glyph_color_layers(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16get_color_palette(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_palette_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14color_palettes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18color_palette_color_get_name_id(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_color_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_20glyph_has_color_paint(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22get_glyph_color_svg(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_png___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24get_layout_glyph_class(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_26get_lookup_glyph_alternates(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_lookup_index, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_28get_language_feature_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index, PyObject *__pyx_v_language_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_30get_script_language_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_32get_table_script_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_34list_names(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_36get_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_name_id, PyObject *__pyx_v_language); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_38__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_40__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_4get_glyph_shape(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_6draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_gid, PyObject *__pyx_v_draw_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_8set_move_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_10set_line_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_12set_cubic_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_14set_quadratic_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_16set_close_path_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_18__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_20__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_6extend___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_4set_push_transform_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_6set_pop_transform_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_8set_color_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_10set_push_clip_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_12set_push_clip_rectangle_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_14set_pop_clip_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_16set_color_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_18set_image_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_20set_linear_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_22set_radial_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_24set_sweep_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_26set_push_group_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_28set_pop_group_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_30set_custom_palette_color_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_32__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_34__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_face_or_font); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4create(PyTypeObject *__pyx_v_cls, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4face___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_ffuncs); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_6set_variations(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_variations); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_8set_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_name, double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_10get_glyph_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_12get_glyph_from_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14get_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_16get_glyph_h_advance(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18get_glyph_v_advance(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_20get_glyph_h_origin(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_22get_glyph_v_origin(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_24get_font_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_26get_variation_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_unicode, PyObject *__pyx_v_variation_selector); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_28get_nominal_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_unicode); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_30get_var_coords_normalized(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_32set_var_coords_normalized(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_coords); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_34get_var_coords_design(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_36set_var_coords_design(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_coords); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_38glyph_to_string(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_40glyph_from_string(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_string); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_42draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_draw_funcs, PyObject *__pyx_v_draw_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_44paint_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_paint_funcs, PyObject *__pyx_v_paint_state, PyObject *__pyx_v_palette_index, PyObject *__pyx_v_foreground); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_46draw_glyph_with_pen(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, PyObject *__pyx_v_pen); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_48get_math_constant(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_constant); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_50get_math_glyph_italics_correction(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_52get_math_glyph_top_accent_attachment(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_54get_math_min_connector_overlap(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_56get_math_glyph_kerning(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern, PyObject *__pyx_v_correction_height); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_58get_math_glyph_kernings(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_60get_math_glyph_variants(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_62get_math_glyph_assembly(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_64get_metric_position(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_66get_metric_position_with_fallback(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_68get_metric_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_70get_metric_x_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_72get_metric_y_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_74get_glyph_color_png(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_76get_layout_baseline(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_baseline_tag, PyObject *__pyx_v_direction, PyObject *__pyx_v_script_tag, PyObject *__pyx_v_language_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_78get_style_value(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_80__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_82__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_4create(PyTypeObject *__pyx_v_cls); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_6set_glyph_h_advance_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_8set_glyph_v_advance_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_10set_glyph_v_origin_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_12set_glyph_name_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_14set_nominal_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_16set_variation_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_18set_font_h_extents_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_20set_font_v_extents_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_22__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_24__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6configure(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self, PyObject *__pyx_v_format, PyObject *__pyx_v_extents); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_8clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6format___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_4set_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, PyObject *__pyx_v_extents); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_6draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_8draw_glyph_or_fail(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_10render(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_14reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_4set_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_extents); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_6set_custom_palette_color(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_color_index, PyObject *__pyx_v_color); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_8clear_custom_palette_colors(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10paint_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12paint_glyph_or_fail(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_14render(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_16clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_18reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, PyObject *__pyx_v_num_nodes); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4repack(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6repack_with_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8serialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10serialize_with_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_12subset_preprocess(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_14subset(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_4subset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_source); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_6keep_everything(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_8pin_all_axes_to_default(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_10pin_axis_to_default(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_12pin_axis_location(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, double __pyx_v_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_14set_axis_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_min_value, PyObject *__pyx_v_max_value, PyObject *__pyx_v_def_value); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16get_axis_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18sets(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_set_type); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_flags); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input); /* proto */
static void __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_4execute(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_16shape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_buffer, PyObject *__pyx_v_features, PyObject *__pyx_v_shapers); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_18ot_tag_to_script(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_20ot_tag_to_language(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_22ot_layout_lookup_get_glyph_alternates(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_lookup_index, hb_codepoint_t __pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_24ot_layout_language_get_feature_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index, PyObject *__pyx_v_language_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_26ot_layout_script_get_language_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_28ot_layout_table_get_script_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_30ot_layout_get_baseline(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_baseline_tag, PyObject *__pyx_v_direction, PyObject *__pyx_v_script_tag, PyObject *__pyx_v_language_tag); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_32ot_layout_has_glyph_classes(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_34ot_layout_has_positioning(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_36ot_layout_has_substitution(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_38ot_layout_get_glyph_class(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_40ot_color_has_palettes(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_42ot_color_palette_get_count(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_44ot_color_palette_get_flags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_46ot_color_palette_get_colors(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_48ot_color_palette_get_name_id(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_50ot_color_palette_color_get_name_id(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_color_index); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_52ot_color_has_layers(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_54ot_color_glyph_get_layers(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_56ot_color_has_paint(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_58ot_color_glyph_has_paint(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_60ot_color_has_svg(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_62ot_color_glyph_get_svg(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_64ot_color_has_png(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_66ot_color_glyph_get_png(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_68ot_math_has_data(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_70ot_math_get_constant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_constant); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_72ot_math_get_glyph_italics_correction(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_74ot_math_get_glyph_top_accent_attachment(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_76ot_math_is_glyph_extended_shape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_78ot_math_get_min_connector_overlap(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_80ot_math_get_glyph_kerning(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern, int __pyx_v_correction_height); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_82ot_math_get_glyph_kernings(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_84ot_math_get_glyph_variants(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_86ot_math_get_glyph_assembly(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction); /* proto */
static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_88ot_font_set_funcs(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font); /* proto */
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Set(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SetIter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Map(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_MapIter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Blob(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphPosition(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Buffer(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Face(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_DrawFuncs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_ColorLine(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_PaintFuncs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Font(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_FontFuncs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterImage(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterDraw(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterPaint(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_HBObject(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetInput(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetPlan(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
/* #### Code section: late_includes ### */
/* #### Code section: module_state ### */
/* SmallCodeConfig */
#ifndef CYTHON_SMALL_CODE
#if defined(__clang__)
    #define CYTHON_SMALL_CODE
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
    #define CYTHON_SMALL_CODE __attribute__((cold))
#else
    #define CYTHON_SMALL_CODE
#endif
#endif

typedef struct {
  PyObject *__pyx_d;
  PyObject *__pyx_b;
  PyObject *__pyx_cython_runtime;
  PyObject *__pyx_empty_tuple;
  PyObject *__pyx_empty_bytes;
  PyObject *__pyx_empty_unicode;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Set;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_SetIter;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Map;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_MapIter;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Blob;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Buffer;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Face;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_Font;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_HBObject;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr;
  PyObject *__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Set;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Map;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Face;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_Font;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr;
  PyTypeObject *__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_pop;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values;
  PyObject *__pyx_k_;
  PyObject *__pyx_k__3;
  PyObject *__pyx_k__6;
  PyObject *__pyx_k__7;
  PyObject *__pyx_tuple[7];
  PyObject *__pyx_codeobj_tab[245];
  PyObject *__pyx_string_tab[1237];
  PyObject *__pyx_number_tab[5];
/* #### Code section: module_state_contents ### */
/* CommonTypesMetaclass.module_state_decls */
PyTypeObject *__pyx_CommonTypesMetaclassType;

/* CachedMethodType.module_state_decls */
#if CYTHON_COMPILING_IN_LIMITED_API
PyObject *__Pyx_CachedMethodType;
#endif

/* CythonFunctionShared.module_state_decls */
PyTypeObject *__pyx_CyFunctionType;


#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated;
#endif

#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator;
#endif

#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr;
#endif

#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr;
#endif

#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr;
#endif

#if CYTHON_USE_FREELISTS
struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr[8];
int __pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr;
#endif
/* CodeObjectCache.module_state_decls */
struct __Pyx_CodeObjectCache __pyx_code_cache;

/* IterNextPlain.module_state_decls */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
PyObject *__Pyx_GetBuiltinNext_LimitedAPI_cache;
#endif

/* Generator.module_state_decls */
PyTypeObject *__pyx_GeneratorType;

/* #### Code section: module_state_end ### */
} __pyx_mstatetype;

#if CYTHON_USE_MODULE_STATE
#ifdef __cplusplus
namespace {
extern struct PyModuleDef __pyx_moduledef;
} /* anonymous namespace */
#else
static struct PyModuleDef __pyx_moduledef;
#endif

#define __pyx_mstate_global (__Pyx_PyModule_GetState(__Pyx_State_FindModule(&__pyx_moduledef)))

#define __pyx_m (__Pyx_State_FindModule(&__pyx_moduledef))
#else
static __pyx_mstatetype __pyx_mstate_global_static =
#ifdef __cplusplus
    {};
#else
    {0};
#endif
static __pyx_mstatetype * const __pyx_mstate_global = &__pyx_mstate_global_static;
#endif
/* #### Code section: constant_name_defines ### */
#define __pyx_kp_u_All_shapers_failed __pyx_string_tab[0]
#define __pyx_kp_u_Callable_Blob_int_int_str_float __pyx_string_tab[1]
#define __pyx_kp_u_Callable_ColorLine_float_float_f __pyx_string_tab[2]
#define __pyx_kp_u_Callable_ColorLine_float_float_f_2 __pyx_string_tab[3]
#define __pyx_kp_u_Callable_Color_bool_object_None __pyx_string_tab[4]
#define __pyx_kp_u_Callable_Face_str_object_bytes __pyx_string_tab[5]
#define __pyx_kp_u_Callable_Font_int_int_object_int __pyx_string_tab[6]
#define __pyx_kp_u_Callable_Font_int_object_int __pyx_string_tab[7]
#define __pyx_kp_u_Callable_Font_int_object_int_int __pyx_string_tab[8]
#define __pyx_kp_u_Callable_Font_int_object_str __pyx_string_tab[9]
#define __pyx_kp_u_Callable_Font_object_FontExtents __pyx_string_tab[10]
#define __pyx_kp_u_Callable_PaintCompositeMode_obje __pyx_string_tab[11]
#define __pyx_kp_u_Callable_float_float_float_float __pyx_string_tab[12]
#define __pyx_kp_u_Callable_float_float_float_float_2 __pyx_string_tab[13]
#define __pyx_kp_u_Callable_float_float_object_None __pyx_string_tab[14]
#define __pyx_kp_u_Callable_int_object_Color __pyx_string_tab[15]
#define __pyx_kp_u_Callable_int_object_None __pyx_string_tab[16]
#define __pyx_kp_u_Callable_int_object_bool __pyx_string_tab[17]
#define __pyx_kp_u_Callable_object_None __pyx_string_tab[18]
#define __pyx_kp_u_Callable_str __pyx_string_tab[19]
#define __pyx_kp_u_Color_None __pyx_string_tab[20]
#define __pyx_kp_u_Dict_str_Union_int_bool_Sequence __pyx_string_tab[21]
#define __pyx_kp_u_Dict_str_float __pyx_string_tab[22]
#define __pyx_kp_u_Face_color_palette_color_get_nam_2 __pyx_string_tab[23]
#define __pyx_kp_u_Face_color_palettes __pyx_string_tab[24]
#define __pyx_kp_u_Face_face_has_layout_glyph_class __pyx_string_tab[25]
#define __pyx_kp_u_Face_get_color_palette_2 __pyx_string_tab[26]
#define __pyx_kp_u_Face_get_glyph_color_layers_2 __pyx_string_tab[27]
#define __pyx_kp_u_Face_get_glyph_color_svg_2 __pyx_string_tab[28]
#define __pyx_kp_u_Face_get_language_feature_tags_2 __pyx_string_tab[29]
#define __pyx_kp_u_Face_get_layout_baseline __pyx_string_tab[30]
#define __pyx_kp_u_Face_get_layout_glyph_class_2 __pyx_string_tab[31]
#define __pyx_kp_u_Face_get_lookup_glyph_alternates_2 __pyx_string_tab[32]
#define __pyx_kp_u_Face_get_script_language_tags_2 __pyx_string_tab[33]
#define __pyx_kp_u_Face_get_table_script_tags_2 __pyx_string_tab[34]
#define __pyx_kp_u_Face_glyph_has_color_paint_2 __pyx_string_tab[35]
#define __pyx_kp_u_Face_has_color_layers __pyx_string_tab[36]
#define __pyx_kp_u_Face_has_color_paint __pyx_string_tab[37]
#define __pyx_kp_u_Face_has_color_palettes __pyx_string_tab[38]
#define __pyx_kp_u_Face_has_color_png __pyx_string_tab[39]
#define __pyx_kp_u_Face_has_color_svg __pyx_string_tab[40]
#define __pyx_kp_u_Face_has_layout_positioning __pyx_string_tab[41]
#define __pyx_kp_u_Face_has_layout_substitution __pyx_string_tab[42]
#define __pyx_kp_u_Face_has_math_data __pyx_string_tab[43]
#define __pyx_kp_u_Face_is_glyph_extended_math_shap_2 __pyx_string_tab[44]
#define __pyx_kp_u_Failed_to_open __pyx_string_tab[45]
#define __pyx_kp_u_Font_draw_glyph __pyx_string_tab[46]
#define __pyx_kp_u_Font_get_glyph_color_png_2 __pyx_string_tab[47]
#define __pyx_kp_u_Font_get_math_constant_2 __pyx_string_tab[48]
#define __pyx_kp_u_Font_get_math_glyph_assembly_2 __pyx_string_tab[49]
#define __pyx_kp_u_Font_get_math_glyph_italics_corr_2 __pyx_string_tab[50]
#define __pyx_kp_u_Font_get_math_glyph_kerning_2 __pyx_string_tab[51]
#define __pyx_kp_u_Font_get_math_glyph_kernings_2 __pyx_string_tab[52]
#define __pyx_kp_u_Font_get_math_glyph_top_accent_a_2 __pyx_string_tab[53]
#define __pyx_kp_u_Font_get_math_glyph_variants_2 __pyx_string_tab[54]
#define __pyx_kp_u_Font_get_math_min_connector_over_2 __pyx_string_tab[55]
#define __pyx_kp_u_Input_num_of_subtables __pyx_string_tab[56]
#define __pyx_kp_u_Invalid_Unicode_string __pyx_string_tab[57]
#define __pyx_kp_u_List_Color __pyx_string_tab[58]
#define __pyx_kp_u_List_OTColor __pyx_string_tab[59]
#define __pyx_kp_u_List_OTColorLayer __pyx_string_tab[60]
#define __pyx_kp_u_List_OTMathGlyphVariant __pyx_string_tab[61]
#define __pyx_kp_u_List_OTMathKernEntry __pyx_string_tab[62]
#define __pyx_kp_u_List_OTNameEntry __pyx_string_tab[63]
#define __pyx_kp_u_List_Tuple_List_Tuple_int_int_in __pyx_string_tab[64]
#define __pyx_kp_u_List_bytes __pyx_string_tab[65]
#define __pyx_kp_u_List_float __pyx_string_tab[66]
#define __pyx_kp_u_List_int __pyx_string_tab[67]
#define __pyx_kp_u_List_str __pyx_string_tab[68]
#define __pyx_kp_u_List_str_None __pyx_string_tab[69]
#define __pyx_kp_u_Map_s __pyx_string_tab[70]
#define __pyx_kp_u_None __pyx_string_tab[71]
#define __pyx_kp_u_Note_that_Cython_is_deliberately __pyx_string_tab[72]
#define __pyx_kp_u_OTNameIdPredefined_int __pyx_string_tab[73]
#define __pyx_kp_u_Pass_draw_state_to_Font_draw_gly __pyx_string_tab[74]
#define __pyx_kp_u_Pickling_of_struct_members_such __pyx_string_tab[75]
#define __pyx_kp_u_Pickling_of_struct_members_such_2 __pyx_string_tab[76]
#define __pyx_kp_u_RasterExtents_None __pyx_string_tab[77]
#define __pyx_kp_u_RasterImage_None __pyx_string_tab[78]
#define __pyx_kp_u_Set __pyx_string_tab[79]
#define __pyx_kp_u_Set_int __pyx_string_tab[80]
#define __pyx_kp_u_Set_s __pyx_string_tab[81]
#define __pyx_kp_u_Subsetting_failed __pyx_string_tab[82]
#define __pyx_kp_u_Tuple_List_OTMathGlyphPart_int __pyx_string_tab[83]
#define __pyx_kp_u_Tuple_float_None_float_None_floa __pyx_string_tab[84]
#define __pyx_kp_u_Tuple_int_int_None __pyx_string_tab[85]
#define __pyx_kp_u_Union_str_Path __pyx_string_tab[86]
#define __pyx_kp_u__10 __pyx_string_tab[87]
#define __pyx_kp_u__11 __pyx_string_tab[88]
#define __pyx_kp_u__2 __pyx_string_tab[89]
#define __pyx_kp_u__4 __pyx_string_tab[90]
#define __pyx_kp_u__5 __pyx_string_tab[91]
#define __pyx_kp_u__8 __pyx_string_tab[92]
#define __pyx_kp_u__9 __pyx_string_tab[93]
#define __pyx_kp_u_add_note __pyx_string_tab[94]
#define __pyx_kp_u_disable __pyx_string_tab[95]
#define __pyx_kp_u_enable __pyx_string_tab[96]
#define __pyx_kp_u_float_None __pyx_string_tab[97]
#define __pyx_kp_u_gc __pyx_string_tab[98]
#define __pyx_kp_u_index_out_of_range_for_feature_a __pyx_string_tab[99]
#define __pyx_kp_u_instead __pyx_string_tab[100]
#define __pyx_kp_u_int_None __pyx_string_tab[101]
#define __pyx_kp_u_invalid_baseline_tag __pyx_string_tab[102]
#define __pyx_kp_u_invalid_constant __pyx_string_tab[103]
#define __pyx_kp_u_invalid_kern __pyx_string_tab[104]
#define __pyx_kp_u_is_deprecated __pyx_string_tab[105]
#define __pyx_kp_u_isenabled __pyx_string_tab[106]
#define __pyx_kp_u_no_default___reduce___due_to_non __pyx_string_tab[107]
#define __pyx_kp_u_num_of_graph_nodes __pyx_string_tab[108]
#define __pyx_kp_u_serialize_2 __pyx_string_tab[109]
#define __pyx_kp_u_serialize_with_tag_2 __pyx_string_tab[110]
#define __pyx_kp_u_src_uharfbuzz__blob_pxi __pyx_string_tab[111]
#define __pyx_kp_u_src_uharfbuzz__buffer_pxi __pyx_string_tab[112]
#define __pyx_kp_u_src_uharfbuzz__draw_pxi __pyx_string_tab[113]
#define __pyx_kp_u_src_uharfbuzz__face_pxi __pyx_string_tab[114]
#define __pyx_kp_u_src_uharfbuzz__font_pxi __pyx_string_tab[115]
#define __pyx_kp_u_src_uharfbuzz__harfbuzz_pyx __pyx_string_tab[116]
#define __pyx_kp_u_src_uharfbuzz__map_pxi __pyx_string_tab[117]
#define __pyx_kp_u_src_uharfbuzz__paint_pxi __pyx_string_tab[118]
#define __pyx_kp_u_src_uharfbuzz__raster_pxi __pyx_string_tab[119]
#define __pyx_kp_u_src_uharfbuzz__serialize_pxi __pyx_string_tab[120]
#define __pyx_kp_u_src_uharfbuzz__set_pxi __pyx_string_tab[121]
#define __pyx_kp_u_src_uharfbuzz__subset_pxi __pyx_string_tab[122]
#define __pyx_kp_u_str_None __pyx_string_tab[123]
#define __pyx_kp_u_stringsource __pyx_string_tab[124]
#define __pyx_kp_u_use __pyx_string_tab[125]
#define __pyx_n_u_A8 __pyx_string_tab[126]
#define __pyx_n_u_ACCENT_BASE_HEIGHT __pyx_string_tab[127]
#define __pyx_n_u_AXIS_HEIGHT __pyx_string_tab[128]
#define __pyx_n_u_BASE_GLYPH __pyx_string_tab[129]
#define __pyx_n_u_BGRA32 __pyx_string_tab[130]
#define __pyx_n_u_BOT __pyx_string_tab[131]
#define __pyx_n_u_BOTTOM_LEFT __pyx_string_tab[132]
#define __pyx_n_u_BOTTOM_RIGHT __pyx_string_tab[133]
#define __pyx_n_u_Blob __pyx_string_tab[134]
#define __pyx_n_u_Blob___reduce_cython __pyx_string_tab[135]
#define __pyx_n_u_Blob___setstate_cython __pyx_string_tab[136]
#define __pyx_n_u_Blob_from_file_path __pyx_string_tab[137]
#define __pyx_n_u_Buffer __pyx_string_tab[138]
#define __pyx_n_u_BufferClusterLevel __pyx_string_tab[139]
#define __pyx_n_u_BufferContentType __pyx_string_tab[140]
#define __pyx_n_u_BufferFlags __pyx_string_tab[141]
#define __pyx_n_u_BufferSerializeFlags __pyx_string_tab[142]
#define __pyx_n_u_BufferSerializeFormat __pyx_string_tab[143]
#define __pyx_n_u_Buffer___reduce_cython __pyx_string_tab[144]
#define __pyx_n_u_Buffer___setstate_cython __pyx_string_tab[145]
#define __pyx_n_u_Buffer_add_codepoints __pyx_string_tab[146]
#define __pyx_n_u_Buffer_add_str __pyx_string_tab[147]
#define __pyx_n_u_Buffer_add_utf8 __pyx_string_tab[148]
#define __pyx_n_u_Buffer_clear_contents __pyx_string_tab[149]
#define __pyx_n_u_Buffer_create __pyx_string_tab[150]
#define __pyx_n_u_Buffer_guess_segment_properties __pyx_string_tab[151]
#define __pyx_n_u_Buffer_reset __pyx_string_tab[152]
#define __pyx_n_u_Buffer_serialize __pyx_string_tab[153]
#define __pyx_n_u_Buffer_set_language_from_ot_tag __pyx_string_tab[154]
#define __pyx_n_u_Buffer_set_message_func __pyx_string_tab[155]
#define __pyx_n_u_Buffer_set_script_from_ot_tag __pyx_string_tab[156]
#define __pyx_n_u_CAP_HEIGHT __pyx_string_tab[157]
#define __pyx_n_u_CHARACTERS __pyx_string_tab[158]
#define __pyx_n_u_CID_FINDFONT_NAME __pyx_string_tab[159]
#define __pyx_n_u_CLEAR __pyx_string_tab[160]
#define __pyx_n_u_COLOR_BURN __pyx_string_tab[161]
#define __pyx_n_u_COLOR_DODGE __pyx_string_tab[162]
#define __pyx_n_u_COMPONENT __pyx_string_tab[163]
#define __pyx_n_u_COPYRIGHT __pyx_string_tab[164]
#define __pyx_n_u_Callable __pyx_string_tab[165]
#define __pyx_n_u_Color __pyx_string_tab[166]
#define __pyx_n_u_ColorLine __pyx_string_tab[167]
#define __pyx_n_u_ColorLine___reduce_cython __pyx_string_tab[168]
#define __pyx_n_u_ColorLine___setstate_cython __pyx_string_tab[169]
#define __pyx_n_u_ColorStop __pyx_string_tab[170]
#define __pyx_n_u_Color_from_int __pyx_string_tab[171]
#define __pyx_n_u_Color_to_int __pyx_string_tab[172]
#define __pyx_n_u_DARKEN __pyx_string_tab[173]
#define __pyx_n_u_DARK_BACKGROUND __pyx_string_tab[174]
#define __pyx_n_u_DEFAULT __pyx_string_tab[175]
#define __pyx_n_u_DEFAULT_REPLACEMENT_CODEPOINT __pyx_string_tab[176]
#define __pyx_n_u_DEFINED __pyx_string_tab[177]
#define __pyx_n_u_DELIMITED_SUB_FORMULA_MIN_HEIGHT __pyx_string_tab[178]
#define __pyx_n_u_DESCRIPTION __pyx_string_tab[179]
#define __pyx_n_u_DESIGNER __pyx_string_tab[180]
#define __pyx_n_u_DESIGNER_URL __pyx_string_tab[181]
#define __pyx_n_u_DEST __pyx_string_tab[182]
#define __pyx_n_u_DEST_ATOP __pyx_string_tab[183]
#define __pyx_n_u_DEST_IN __pyx_string_tab[184]
#define __pyx_n_u_DEST_OUT __pyx_string_tab[185]
#define __pyx_n_u_DEST_OVER __pyx_string_tab[186]
#define __pyx_n_u_DESUBROUTINIZE __pyx_string_tab[187]
#define __pyx_n_u_DIFFERENCE __pyx_string_tab[188]
#define __pyx_n_u_DISPLAY_OPERATOR_MIN_HEIGHT __pyx_string_tab[189]
#define __pyx_n_u_DO_NOT_INSERT_DOTTED_CIRCLE __pyx_string_tab[190]
#define __pyx_n_u_DROP_TABLE_TAG __pyx_string_tab[191]
#define __pyx_n_u_Dict __pyx_string_tab[192]
#define __pyx_n_u_DrawFuncs __pyx_string_tab[193]
#define __pyx_n_u_DrawFuncs___reduce_cython __pyx_string_tab[194]
#define __pyx_n_u_DrawFuncs___setstate_cython __pyx_string_tab[195]
#define __pyx_n_u_DrawFuncs_draw_glyph __pyx_string_tab[196]
#define __pyx_n_u_DrawFuncs_get_glyph_shape __pyx_string_tab[197]
#define __pyx_n_u_DrawFuncs_set_close_path_func __pyx_string_tab[198]
#define __pyx_n_u_DrawFuncs_set_cubic_to_func __pyx_string_tab[199]
#define __pyx_n_u_DrawFuncs_set_line_to_func __pyx_string_tab[200]
#define __pyx_n_u_DrawFuncs_set_move_to_func __pyx_string_tab[201]
#define __pyx_n_u_DrawFuncs_set_quadratic_to_func __pyx_string_tab[202]
#define __pyx_n_u_EOT __pyx_string_tab[203]
#define __pyx_n_u_EXCLUSION __pyx_string_tab[204]
#define __pyx_n_u_EXTENDER __pyx_string_tab[205]
#define __pyx_n_u_FLATTENED_ACCENT_BASE_HEIGHT __pyx_string_tab[206]
#define __pyx_n_u_FONT_FAMILY __pyx_string_tab[207]
#define __pyx_n_u_FONT_SUBFAMILY __pyx_string_tab[208]
#define __pyx_n_u_FRACTION_DENOMINATOR_DISPLAY_STY __pyx_string_tab[209]
#define __pyx_n_u_FRACTION_DENOMINATOR_GAP_MIN __pyx_string_tab[210]
#define __pyx_n_u_FRACTION_DENOMINATOR_SHIFT_DOWN __pyx_string_tab[211]
#define __pyx_n_u_FRACTION_DENOM_DISPLAY_STYLE_GAP __pyx_string_tab[212]
#define __pyx_n_u_FRACTION_NUMERATOR_DISPLAY_STYLE __pyx_string_tab[213]
#define __pyx_n_u_FRACTION_NUMERATOR_GAP_MIN __pyx_string_tab[214]
#define __pyx_n_u_FRACTION_NUMERATOR_SHIFT_UP __pyx_string_tab[215]
#define __pyx_n_u_FRACTION_NUM_DISPLAY_STYLE_GAP_M __pyx_string_tab[216]
#define __pyx_n_u_FRACTION_RULE_THICKNESS __pyx_string_tab[217]
#define __pyx_n_u_FULL_NAME __pyx_string_tab[218]
#define __pyx_n_u_Face __pyx_string_tab[219]
#define __pyx_n_u_Face___reduce_cython __pyx_string_tab[220]
#define __pyx_n_u_Face___setstate_cython __pyx_string_tab[221]
#define __pyx_n_u_Face_color_palette_color_get_nam __pyx_string_tab[222]
#define __pyx_n_u_Face_create __pyx_string_tab[223]
#define __pyx_n_u_Face_create_for_tables __pyx_string_tab[224]
#define __pyx_n_u_Face_get_color_palette __pyx_string_tab[225]
#define __pyx_n_u_Face_get_glyph_color_layers __pyx_string_tab[226]
#define __pyx_n_u_Face_get_glyph_color_svg __pyx_string_tab[227]
#define __pyx_n_u_Face_get_language_feature_tags __pyx_string_tab[228]
#define __pyx_n_u_Face_get_layout_glyph_class __pyx_string_tab[229]
#define __pyx_n_u_Face_get_lookup_glyph_alternates __pyx_string_tab[230]
#define __pyx_n_u_Face_get_name __pyx_string_tab[231]
#define __pyx_n_u_Face_get_script_language_tags __pyx_string_tab[232]
#define __pyx_n_u_Face_get_table_script_tags __pyx_string_tab[233]
#define __pyx_n_u_Face_glyph_has_color_paint __pyx_string_tab[234]
#define __pyx_n_u_Face_is_glyph_extended_math_shap __pyx_string_tab[235]
#define __pyx_n_u_Face_list_names __pyx_string_tab[236]
#define __pyx_n_u_Face_reference_table __pyx_string_tab[237]
#define __pyx_n_u_Face_variation_unicodes __pyx_string_tab[238]
#define __pyx_n_u_Font __pyx_string_tab[239]
#define __pyx_n_u_FontExtents __pyx_string_tab[240]
#define __pyx_n_u_FontFuncs __pyx_string_tab[241]
#define __pyx_n_u_FontFuncs___reduce_cython __pyx_string_tab[242]
#define __pyx_n_u_FontFuncs___setstate_cython __pyx_string_tab[243]
#define __pyx_n_u_FontFuncs_create __pyx_string_tab[244]
#define __pyx_n_u_FontFuncs_set_font_h_extents_fun __pyx_string_tab[245]
#define __pyx_n_u_FontFuncs_set_font_v_extents_fun __pyx_string_tab[246]
#define __pyx_n_u_FontFuncs_set_glyph_h_advance_fu __pyx_string_tab[247]
#define __pyx_n_u_FontFuncs_set_glyph_name_func __pyx_string_tab[248]
#define __pyx_n_u_FontFuncs_set_glyph_v_advance_fu __pyx_string_tab[249]
#define __pyx_n_u_FontFuncs_set_glyph_v_origin_fun __pyx_string_tab[250]
#define __pyx_n_u_FontFuncs_set_nominal_glyph_func __pyx_string_tab[251]
#define __pyx_n_u_FontFuncs_set_variation_glyph_fu __pyx_string_tab[252]
#define __pyx_n_u_Font___reduce_cython __pyx_string_tab[253]
#define __pyx_n_u_Font___setstate_cython __pyx_string_tab[254]
#define __pyx_n_u_Font_create __pyx_string_tab[255]
#define __pyx_n_u_Font_draw_glyph_2 __pyx_string_tab[256]
#define __pyx_n_u_Font_draw_glyph_with_pen __pyx_string_tab[257]
#define __pyx_n_u_Font_get_font_extents __pyx_string_tab[258]
#define __pyx_n_u_Font_get_glyph_color_png __pyx_string_tab[259]
#define __pyx_n_u_Font_get_glyph_extents __pyx_string_tab[260]
#define __pyx_n_u_Font_get_glyph_from_name __pyx_string_tab[261]
#define __pyx_n_u_Font_get_glyph_h_advance __pyx_string_tab[262]
#define __pyx_n_u_Font_get_glyph_h_origin __pyx_string_tab[263]
#define __pyx_n_u_Font_get_glyph_name __pyx_string_tab[264]
#define __pyx_n_u_Font_get_glyph_v_advance __pyx_string_tab[265]
#define __pyx_n_u_Font_get_glyph_v_origin __pyx_string_tab[266]
#define __pyx_n_u_Font_get_layout_baseline __pyx_string_tab[267]
#define __pyx_n_u_Font_get_math_constant __pyx_string_tab[268]
#define __pyx_n_u_Font_get_math_glyph_assembly __pyx_string_tab[269]
#define __pyx_n_u_Font_get_math_glyph_italics_corr __pyx_string_tab[270]
#define __pyx_n_u_Font_get_math_glyph_kerning __pyx_string_tab[271]
#define __pyx_n_u_Font_get_math_glyph_kernings __pyx_string_tab[272]
#define __pyx_n_u_Font_get_math_glyph_top_accent_a __pyx_string_tab[273]
#define __pyx_n_u_Font_get_math_glyph_variants __pyx_string_tab[274]
#define __pyx_n_u_Font_get_math_min_connector_over __pyx_string_tab[275]
#define __pyx_n_u_Font_get_metric_position __pyx_string_tab[276]
#define __pyx_n_u_Font_get_metric_position_with_fa __pyx_string_tab[277]
#define __pyx_n_u_Font_get_metric_variation __pyx_string_tab[278]
#define __pyx_n_u_Font_get_metric_x_variation __pyx_string_tab[279]
#define __pyx_n_u_Font_get_metric_y_variation __pyx_string_tab[280]
#define __pyx_n_u_Font_get_nominal_glyph __pyx_string_tab[281]
#define __pyx_n_u_Font_get_style_value __pyx_string_tab[282]
#define __pyx_n_u_Font_get_var_coords_design __pyx_string_tab[283]
#define __pyx_n_u_Font_get_var_coords_normalized __pyx_string_tab[284]
#define __pyx_n_u_Font_get_variation_glyph __pyx_string_tab[285]
#define __pyx_n_u_Font_glyph_from_string __pyx_string_tab[286]
#define __pyx_n_u_Font_glyph_to_string __pyx_string_tab[287]
#define __pyx_n_u_Font_paint_glyph __pyx_string_tab[288]
#define __pyx_n_u_Font_set_var_coords_design __pyx_string_tab[289]
#define __pyx_n_u_Font_set_var_coords_normalized __pyx_string_tab[290]
#define __pyx_n_u_Font_set_variation __pyx_string_tab[291]
#define __pyx_n_u_Font_set_variations __pyx_string_tab[292]
#define __pyx_n_u_GLYPHS __pyx_string_tab[293]
#define __pyx_n_u_GLYPH_EXTENTS __pyx_string_tab[294]
#define __pyx_n_u_GLYPH_FLAGS __pyx_string_tab[295]
#define __pyx_n_u_GLYPH_INDEX __pyx_string_tab[296]
#define __pyx_n_u_GLYPH_NAMES __pyx_string_tab[297]
#define __pyx_n_u_GRAPHEMES __pyx_string_tab[298]
#define __pyx_n_u_GlyphExtents __pyx_string_tab[299]
#define __pyx_n_u_GlyphFlags __pyx_string_tab[300]
#define __pyx_n_u_GlyphInfo __pyx_string_tab[301]
#define __pyx_n_u_GlyphInfo___reduce_cython __pyx_string_tab[302]
#define __pyx_n_u_GlyphInfo___setstate_cython __pyx_string_tab[303]
#define __pyx_n_u_GlyphPosition __pyx_string_tab[304]
#define __pyx_n_u_GlyphPosition___reduce_cython __pyx_string_tab[305]
#define __pyx_n_u_GlyphPosition___setstate_cython __pyx_string_tab[306]
#define __pyx_n_u_HARD_LIGHT __pyx_string_tab[307]
#define __pyx_n_u_HBObject __pyx_string_tab[308]
#define __pyx_n_u_HBObject___reduce_cython __pyx_string_tab[309]
#define __pyx_n_u_HBObject___setstate_cython __pyx_string_tab[310]
#define __pyx_n_u_HIDDEN __pyx_string_tab[311]
#define __pyx_n_u_HORIZONTAL_ASCENDER __pyx_string_tab[312]
#define __pyx_n_u_HORIZONTAL_CARET_OFFSET __pyx_string_tab[313]
#define __pyx_n_u_HORIZONTAL_CARET_RISE __pyx_string_tab[314]
#define __pyx_n_u_HORIZONTAL_CARET_RUN __pyx_string_tab[315]
#define __pyx_n_u_HORIZONTAL_CLIPPING_ASCENT __pyx_string_tab[316]
#define __pyx_n_u_HORIZONTAL_CLIPPING_DESCENT __pyx_string_tab[317]
#define __pyx_n_u_HORIZONTAL_DESCENDER __pyx_string_tab[318]
#define __pyx_n_u_HORIZONTAL_LINE_GAP __pyx_string_tab[319]
#define __pyx_n_u_HSL_COLOR __pyx_string_tab[320]
#define __pyx_n_u_HSL_HUE __pyx_string_tab[321]
#define __pyx_n_u_HSL_LUMINOSITY __pyx_string_tab[322]
#define __pyx_n_u_HSL_SATURATION __pyx_string_tab[323]
#define __pyx_n_u_HarfBuzzError __pyx_string_tab[324]
#define __pyx_n_u_INVALID __pyx_string_tab[325]
#define __pyx_n_u_INVALID_VALUE __pyx_string_tab[326]
#define __pyx_n_u_ITALIC __pyx_string_tab[327]
#define __pyx_n_u_IntEnum __pyx_string_tab[328]
#define __pyx_n_u_IntFlag __pyx_string_tab[329]
#define __pyx_n_u_JSON __pyx_string_tab[330]
#define __pyx_n_u_LAYOUT_FEATURE_TAG __pyx_string_tab[331]
#define __pyx_n_u_LAYOUT_SCRIPT_TAG __pyx_string_tab[332]
#define __pyx_n_u_LICENSE __pyx_string_tab[333]
#define __pyx_n_u_LICENSE_URL __pyx_string_tab[334]
#define __pyx_n_u_LIGATURE __pyx_string_tab[335]
#define __pyx_n_u_LIGHTEN __pyx_string_tab[336]
#define __pyx_n_u_LIGHT_BACKGROUND __pyx_string_tab[337]
#define __pyx_n_u_LOWER_LIMIT_BASELINE_DROP_MIN __pyx_string_tab[338]
#define __pyx_n_u_LOWER_LIMIT_GAP_MIN __pyx_string_tab[339]
#define __pyx_n_u_List __pyx_string_tab[340]
#define __pyx_n_u_MAC_FULL_NAME __pyx_string_tab[341]
#define __pyx_n_u_MANUFACTURER __pyx_string_tab[342]
#define __pyx_n_u_MARK __pyx_string_tab[343]
#define __pyx_n_u_MATH_LEADING __pyx_string_tab[344]
#define __pyx_n_u_MONOTONE_CHARACTERS __pyx_string_tab[345]
#define __pyx_n_u_MONOTONE_GRAPHEMES __pyx_string_tab[346]
#define __pyx_n_u_MULTIPLY __pyx_string_tab[347]
#define __pyx_n_u_Map __pyx_string_tab[348]
#define __pyx_n_u_MapIter __pyx_string_tab[349]
#define __pyx_n_u_MapIter___reduce_cython __pyx_string_tab[350]
#define __pyx_n_u_MapIter___setstate_cython __pyx_string_tab[351]
#define __pyx_n_u_Map___copy __pyx_string_tab[352]
#define __pyx_n_u_Map___reduce_cython __pyx_string_tab[353]
#define __pyx_n_u_Map___setstate_cython __pyx_string_tab[354]
#define __pyx_n_u_Map__is_equal __pyx_string_tab[355]
#define __pyx_n_u_Map__update __pyx_string_tab[356]
#define __pyx_n_u_Map_clear __pyx_string_tab[357]
#define __pyx_n_u_Map_copy __pyx_string_tab[358]
#define __pyx_n_u_Map_get __pyx_string_tab[359]
#define __pyx_n_u_Map_items __pyx_string_tab[360]
#define __pyx_n_u_Map_keys __pyx_string_tab[361]
#define __pyx_n_u_Map_update __pyx_string_tab[362]
#define __pyx_n_u_Map_values __pyx_string_tab[363]
#define __pyx_n_u_NAME_ID __pyx_string_tab[364]
#define __pyx_n_u_NAME_LANG_ID __pyx_string_tab[365]
#define __pyx_n_u_NAME_LEGACY __pyx_string_tab[366]
#define __pyx_n_u_NOTDEF_OUTLINE __pyx_string_tab[367]
#define __pyx_n_u_NO_ADVANCES __pyx_string_tab[368]
#define __pyx_n_u_NO_CLUSTERS __pyx_string_tab[369]
#define __pyx_n_u_NO_GLYPH_NAMES __pyx_string_tab[370]
#define __pyx_n_u_NO_HINTING __pyx_string_tab[371]
#define __pyx_n_u_NO_LAYOUT_CLOSURE __pyx_string_tab[372]
#define __pyx_n_u_NO_POSITIONS __pyx_string_tab[373]
#define __pyx_n_u_NO_PRUNE_UNICODE_RANGES __pyx_string_tab[374]
#define __pyx_n_u_NO_SUBSET_TABLE_TAG __pyx_string_tab[375]
#define __pyx_n_u_NamedTuple __pyx_string_tab[376]
#define __pyx_n_u_NotImplemented __pyx_string_tab[377]
#define __pyx_n_u_OPTICAL_SIZE __pyx_string_tab[378]
#define __pyx_n_u_OTColor __pyx_string_tab[379]
#define __pyx_n_u_OTColorLayer __pyx_string_tab[380]
#define __pyx_n_u_OTColorPalette __pyx_string_tab[381]
#define __pyx_n_u_OTColorPaletteFlags __pyx_string_tab[382]
#define __pyx_n_u_OTLayoutGlyphClass __pyx_string_tab[383]
#define __pyx_n_u_OTMathConstant __pyx_string_tab[384]
#define __pyx_n_u_OTMathGlyphPart __pyx_string_tab[385]
#define __pyx_n_u_OTMathGlyphPartFlags __pyx_string_tab[386]
#define __pyx_n_u_OTMathGlyphVariant __pyx_string_tab[387]
#define __pyx_n_u_OTMathKern __pyx_string_tab[388]
#define __pyx_n_u_OTMathKernEntry __pyx_string_tab[389]
#define __pyx_n_u_OTMetricsTag __pyx_string_tab[390]
#define __pyx_n_u_OTNameEntry __pyx_string_tab[391]
#define __pyx_n_u_OTNameIdPredefined __pyx_string_tab[392]
#define __pyx_n_u_OTVarAxisFlags __pyx_string_tab[393]
#define __pyx_n_u_OTVarAxisInfo __pyx_string_tab[394]
#define __pyx_n_u_OTVarNamedInstance __pyx_string_tab[395]
#define __pyx_n_u_OVERBAR_EXTRA_ASCENDER __pyx_string_tab[396]
#define __pyx_n_u_OVERBAR_RULE_THICKNESS __pyx_string_tab[397]
#define __pyx_n_u_OVERBAR_VERTICAL_GAP __pyx_string_tab[398]
#define __pyx_n_u_OVERLAY __pyx_string_tab[399]
#define __pyx_n_u_PAD __pyx_string_tab[400]
#define __pyx_n_u_PASSTHROUGH_UNRECOGNIZED __pyx_string_tab[401]
#define __pyx_n_u_PLUS __pyx_string_tab[402]
#define __pyx_n_u_POSTSCRIPT_NAME __pyx_string_tab[403]
#define __pyx_n_u_PRESERVE_DEFAULT_IGNORABLES __pyx_string_tab[404]
#define __pyx_n_u_PRODUCE_SAFE_TO_INSERT_TATWEEL __pyx_string_tab[405]
#define __pyx_n_u_PRODUCE_UNSAFE_TO_CONCAT __pyx_string_tab[406]
#define __pyx_n_u_PaintCompositeMode __pyx_string_tab[407]
#define __pyx_n_u_PaintExtend __pyx_string_tab[408]
#define __pyx_n_u_PaintFuncs __pyx_string_tab[409]
#define __pyx_n_u_PaintFuncs___reduce_cython __pyx_string_tab[410]
#define __pyx_n_u_PaintFuncs___setstate_cython __pyx_string_tab[411]
#define __pyx_n_u_PaintFuncs_set_color_func __pyx_string_tab[412]
#define __pyx_n_u_PaintFuncs_set_color_glyph_func __pyx_string_tab[413]
#define __pyx_n_u_PaintFuncs_set_custom_palette_co __pyx_string_tab[414]
#define __pyx_n_u_PaintFuncs_set_image_func __pyx_string_tab[415]
#define __pyx_n_u_PaintFuncs_set_linear_gradient_f __pyx_string_tab[416]
#define __pyx_n_u_PaintFuncs_set_pop_clip_func __pyx_string_tab[417]
#define __pyx_n_u_PaintFuncs_set_pop_group_func __pyx_string_tab[418]
#define __pyx_n_u_PaintFuncs_set_pop_transform_fun __pyx_string_tab[419]
#define __pyx_n_u_PaintFuncs_set_push_clip_glyph_f __pyx_string_tab[420]
#define __pyx_n_u_PaintFuncs_set_push_clip_rectang __pyx_string_tab[421]
#define __pyx_n_u_PaintFuncs_set_push_group_func __pyx_string_tab[422]
#define __pyx_n_u_PaintFuncs_set_push_transform_fu __pyx_string_tab[423]
#define __pyx_n_u_PaintFuncs_set_radial_gradient_f __pyx_string_tab[424]
#define __pyx_n_u_PaintFuncs_set_sweep_gradient_fu __pyx_string_tab[425]
#define __pyx_n_u_Path __pyx_string_tab[426]
#define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[427]
#define __pyx_n_u_RADICAL_DEGREE_BOTTOM_RAISE_PERC __pyx_string_tab[428]
#define __pyx_n_u_RADICAL_DISPLAY_STYLE_VERTICAL_G __pyx_string_tab[429]
#define __pyx_n_u_RADICAL_EXTRA_ASCENDER __pyx_string_tab[430]
#define __pyx_n_u_RADICAL_KERN_AFTER_DEGREE __pyx_string_tab[431]
#define __pyx_n_u_RADICAL_KERN_BEFORE_DEGREE __pyx_string_tab[432]
#define __pyx_n_u_RADICAL_RULE_THICKNESS __pyx_string_tab[433]
#define __pyx_n_u_RADICAL_VERTICAL_GAP __pyx_string_tab[434]
#define __pyx_n_u_REFLECT __pyx_string_tab[435]
#define __pyx_n_u_REMOVE_DEFAULT_IGNORABLES __pyx_string_tab[436]
#define __pyx_n_u_REPEAT __pyx_string_tab[437]
#define __pyx_n_u_RETAIN_GIDS __pyx_string_tab[438]
#define __pyx_n_u_RasterDraw __pyx_string_tab[439]
#define __pyx_n_u_RasterDraw___reduce_cython __pyx_string_tab[440]
#define __pyx_n_u_RasterDraw___setstate_cython __pyx_string_tab[441]
#define __pyx_n_u_RasterDraw_clear __pyx_string_tab[442]
#define __pyx_n_u_RasterDraw_draw_glyph __pyx_string_tab[443]
#define __pyx_n_u_RasterDraw_draw_glyph_or_fail __pyx_string_tab[444]
#define __pyx_n_u_RasterDraw_render __pyx_string_tab[445]
#define __pyx_n_u_RasterDraw_reset __pyx_string_tab[446]
#define __pyx_n_u_RasterDraw_set_glyph_extents __pyx_string_tab[447]
#define __pyx_n_u_RasterExtents __pyx_string_tab[448]
#define __pyx_n_u_RasterFormat __pyx_string_tab[449]
#define __pyx_n_u_RasterImage __pyx_string_tab[450]
#define __pyx_n_u_RasterImage___reduce_cython __pyx_string_tab[451]
#define __pyx_n_u_RasterImage___setstate_cython __pyx_string_tab[452]
#define __pyx_n_u_RasterImage_clear __pyx_string_tab[453]
#define __pyx_n_u_RasterImage_configure __pyx_string_tab[454]
#define __pyx_n_u_RasterPaint __pyx_string_tab[455]
#define __pyx_n_u_RasterPaint___reduce_cython __pyx_string_tab[456]
#define __pyx_n_u_RasterPaint___setstate_cython __pyx_string_tab[457]
#define __pyx_n_u_RasterPaint_clear __pyx_string_tab[458]
#define __pyx_n_u_RasterPaint_clear_custom_palette __pyx_string_tab[459]
#define __pyx_n_u_RasterPaint_paint_glyph __pyx_string_tab[460]
#define __pyx_n_u_RasterPaint_paint_glyph_or_fail __pyx_string_tab[461]
#define __pyx_n_u_RasterPaint_render __pyx_string_tab[462]
#define __pyx_n_u_RasterPaint_reset __pyx_string_tab[463]
#define __pyx_n_u_RasterPaint_set_custom_palette_c __pyx_string_tab[464]
#define __pyx_n_u_RasterPaint_set_glyph_extents __pyx_string_tab[465]
#define __pyx_n_u_RepackerError __pyx_string_tab[466]
#define __pyx_n_u_SAFE_TO_INSERT_TATWEEL __pyx_string_tab[467]
#define __pyx_n_u_SAMPLE_TEXT __pyx_string_tab[468]
#define __pyx_n_u_SCREEN __pyx_string_tab[469]
#define __pyx_n_u_SCRIPT_PERCENT_SCALE_DOWN __pyx_string_tab[470]
#define __pyx_n_u_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN __pyx_string_tab[471]
#define __pyx_n_u_SET_OVERLAPS_FLAG __pyx_string_tab[472]
#define __pyx_n_u_SKEWED_FRACTION_HORIZONTAL_GAP __pyx_string_tab[473]
#define __pyx_n_u_SKEWED_FRACTION_VERTICAL_GAP __pyx_string_tab[474]
#define __pyx_n_u_SLANT_ANGLE __pyx_string_tab[475]
#define __pyx_n_u_SLANT_RATIO __pyx_string_tab[476]
#define __pyx_n_u_SOFT_LIGHT __pyx_string_tab[477]
#define __pyx_n_u_SPACE_AFTER_SCRIPT __pyx_string_tab[478]
#define __pyx_n_u_SRC __pyx_string_tab[479]
#define __pyx_n_u_SRC_ATOP __pyx_string_tab[480]
#define __pyx_n_u_SRC_IN __pyx_string_tab[481]
#define __pyx_n_u_SRC_OUT __pyx_string_tab[482]
#define __pyx_n_u_SRC_OVER __pyx_string_tab[483]
#define __pyx_n_u_STACK_BOTTOM_DISPLAY_STYLE_SHIFT __pyx_string_tab[484]
#define __pyx_n_u_STACK_BOTTOM_SHIFT_DOWN __pyx_string_tab[485]
#define __pyx_n_u_STACK_DISPLAY_STYLE_GAP_MIN __pyx_string_tab[486]
#define __pyx_n_u_STACK_GAP_MIN __pyx_string_tab[487]
#define __pyx_n_u_STACK_TOP_DISPLAY_STYLE_SHIFT_UP __pyx_string_tab[488]
#define __pyx_n_u_STACK_TOP_SHIFT_UP __pyx_string_tab[489]
#define __pyx_n_u_STRETCH_STACK_BOTTOM_SHIFT_DOWN __pyx_string_tab[490]
#define __pyx_n_u_STRETCH_STACK_GAP_ABOVE_MIN __pyx_string_tab[491]
#define __pyx_n_u_STRETCH_STACK_GAP_BELOW_MIN __pyx_string_tab[492]
#define __pyx_n_u_STRETCH_STACK_TOP_SHIFT_UP __pyx_string_tab[493]
#define __pyx_n_u_STRIKEOUT_OFFSET __pyx_string_tab[494]
#define __pyx_n_u_STRIKEOUT_SIZE __pyx_string_tab[495]
#define __pyx_n_u_SUBSCRIPT_BASELINE_DROP_MIN __pyx_string_tab[496]
#define __pyx_n_u_SUBSCRIPT_EM_X_OFFSET __pyx_string_tab[497]
#define __pyx_n_u_SUBSCRIPT_EM_X_SIZE __pyx_string_tab[498]
#define __pyx_n_u_SUBSCRIPT_EM_Y_OFFSET __pyx_string_tab[499]
#define __pyx_n_u_SUBSCRIPT_EM_Y_SIZE __pyx_string_tab[500]
#define __pyx_n_u_SUBSCRIPT_SHIFT_DOWN __pyx_string_tab[501]
#define __pyx_n_u_SUBSCRIPT_TOP_MAX __pyx_string_tab[502]
#define __pyx_n_u_SUB_SUPERSCRIPT_GAP_MIN __pyx_string_tab[503]
#define __pyx_n_u_SUPERSCRIPT_BASELINE_DROP_MAX __pyx_string_tab[504]
#define __pyx_n_u_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBS __pyx_string_tab[505]
#define __pyx_n_u_SUPERSCRIPT_BOTTOM_MIN __pyx_string_tab[506]
#define __pyx_n_u_SUPERSCRIPT_EM_X_OFFSET __pyx_string_tab[507]
#define __pyx_n_u_SUPERSCRIPT_EM_X_SIZE __pyx_string_tab[508]
#define __pyx_n_u_SUPERSCRIPT_EM_Y_OFFSET __pyx_string_tab[509]
#define __pyx_n_u_SUPERSCRIPT_EM_Y_SIZE __pyx_string_tab[510]
#define __pyx_n_u_SUPERSCRIPT_SHIFT_UP __pyx_string_tab[511]
#define __pyx_n_u_SUPERSCRIPT_SHIFT_UP_CRAMPED __pyx_string_tab[512]
#define __pyx_n_u_Sequence __pyx_string_tab[513]
#define __pyx_n_u_SerializerError __pyx_string_tab[514]
#define __pyx_n_u_SetIter __pyx_string_tab[515]
#define __pyx_n_u_SetIter___reduce_cython __pyx_string_tab[516]
#define __pyx_n_u_SetIter___setstate_cython __pyx_string_tab[517]
#define __pyx_n_u_Set_2 __pyx_string_tab[518]
#define __pyx_n_u_Set___copy __pyx_string_tab[519]
#define __pyx_n_u_Set___reduce_cython __pyx_string_tab[520]
#define __pyx_n_u_Set___setstate_cython __pyx_string_tab[521]
#define __pyx_n_u_Set__is_equal __pyx_string_tab[522]
#define __pyx_n_u_Set__set __pyx_string_tab[523]
#define __pyx_n_u_Set__update __pyx_string_tab[524]
#define __pyx_n_u_Set_add __pyx_string_tab[525]
#define __pyx_n_u_Set_add_range __pyx_string_tab[526]
#define __pyx_n_u_Set_clear __pyx_string_tab[527]
#define __pyx_n_u_Set_copy __pyx_string_tab[528]
#define __pyx_n_u_Set_del_range __pyx_string_tab[529]
#define __pyx_n_u_Set_difference_update __pyx_string_tab[530]
#define __pyx_n_u_Set_discard __pyx_string_tab[531]
#define __pyx_n_u_Set_intersection_update __pyx_string_tab[532]
#define __pyx_n_u_Set_invert __pyx_string_tab[533]
#define __pyx_n_u_Set_is_inverted __pyx_string_tab[534]
#define __pyx_n_u_Set_issubset __pyx_string_tab[535]
#define __pyx_n_u_Set_issuperset __pyx_string_tab[536]
#define __pyx_n_u_Set_remove __pyx_string_tab[537]
#define __pyx_n_u_Set_set __pyx_string_tab[538]
#define __pyx_n_u_Set_symmetric_difference_update __pyx_string_tab[539]
#define __pyx_n_u_Set_update __pyx_string_tab[540]
#define __pyx_n_u_StyleTag __pyx_string_tab[541]
#define __pyx_n_u_SubsetFlags __pyx_string_tab[542]
#define __pyx_n_u_SubsetInput __pyx_string_tab[543]
#define __pyx_n_u_SubsetInputSets __pyx_string_tab[544]
#define __pyx_n_u_SubsetInput___reduce_cython __pyx_string_tab[545]
#define __pyx_n_u_SubsetInput___setstate_cython __pyx_string_tab[546]
#define __pyx_n_u_SubsetInput_get_axis_range __pyx_string_tab[547]
#define __pyx_n_u_SubsetInput_keep_everything __pyx_string_tab[548]
#define __pyx_n_u_SubsetInput_pin_all_axes_to_defa __pyx_string_tab[549]
#define __pyx_n_u_SubsetInput_pin_axis_location __pyx_string_tab[550]
#define __pyx_n_u_SubsetInput_pin_axis_to_default __pyx_string_tab[551]
#define __pyx_n_u_SubsetInput_set_axis_range __pyx_string_tab[552]
#define __pyx_n_u_SubsetInput_sets __pyx_string_tab[553]
#define __pyx_n_u_SubsetInput_subset __pyx_string_tab[554]
#define __pyx_n_u_SubsetPlan __pyx_string_tab[555]
#define __pyx_n_u_SubsetPlan___reduce_cython __pyx_string_tab[556]
#define __pyx_n_u_SubsetPlan___setstate_cython __pyx_string_tab[557]
#define __pyx_n_u_SubsetPlan_execute __pyx_string_tab[558]
#define __pyx_n_u_TEXT __pyx_string_tab[559]
#define __pyx_n_u_TOP_LEFT __pyx_string_tab[560]
#define __pyx_n_u_TOP_RIGHT __pyx_string_tab[561]
#define __pyx_n_u_TRADEMARK __pyx_string_tab[562]
#define __pyx_n_u_TYPOGRAPHIC_FAMILY __pyx_string_tab[563]
#define __pyx_n_u_TYPOGRAPHIC_SUBFAMILY __pyx_string_tab[564]
#define __pyx_n_u_Tuple __pyx_string_tab[565]
#define __pyx_n_u_UNCLASSIFIED __pyx_string_tab[566]
#define __pyx_n_u_UNDERBAR_EXTRA_DESCENDER __pyx_string_tab[567]
#define __pyx_n_u_UNDERBAR_RULE_THICKNESS __pyx_string_tab[568]
#define __pyx_n_u_UNDERBAR_VERTICAL_GAP __pyx_string_tab[569]
#define __pyx_n_u_UNDERLINE_OFFSET __pyx_string_tab[570]
#define __pyx_n_u_UNDERLINE_SIZE __pyx_string_tab[571]
#define __pyx_n_u_UNICODE __pyx_string_tab[572]
#define __pyx_n_u_UNIQUE_ID __pyx_string_tab[573]
#define __pyx_n_u_UNSAFE_TO_BREAK __pyx_string_tab[574]
#define __pyx_n_u_UNSAFE_TO_CONCAT __pyx_string_tab[575]
#define __pyx_n_u_UPPER_LIMIT_BASELINE_RISE_MIN __pyx_string_tab[576]
#define __pyx_n_u_UPPER_LIMIT_GAP_MIN __pyx_string_tab[577]
#define __pyx_n_u_USABLE_WITH_DARK_BACKGROUND __pyx_string_tab[578]
#define __pyx_n_u_USABLE_WITH_LIGHT_BACKGROUND __pyx_string_tab[579]
#define __pyx_n_u_Union __pyx_string_tab[580]
#define __pyx_n_u_VARIATIONS_PS_PREFIX __pyx_string_tab[581]
#define __pyx_n_u_VENDOR_URL __pyx_string_tab[582]
#define __pyx_n_u_VERIFY __pyx_string_tab[583]
#define __pyx_n_u_VERSION_STRING __pyx_string_tab[584]
#define __pyx_n_u_VERTICAL_ASCENDER __pyx_string_tab[585]
#define __pyx_n_u_VERTICAL_CARET_OFFSET __pyx_string_tab[586]
#define __pyx_n_u_VERTICAL_CARET_RISE __pyx_string_tab[587]
#define __pyx_n_u_VERTICAL_CARET_RUN __pyx_string_tab[588]
#define __pyx_n_u_VERTICAL_DESCENDER __pyx_string_tab[589]
#define __pyx_n_u_VERTICAL_LINE_GAP __pyx_string_tab[590]
#define __pyx_n_u_WARNED __pyx_string_tab[591]
#define __pyx_n_u_WEIGHT __pyx_string_tab[592]
#define __pyx_n_u_WIDTH __pyx_string_tab[593]
#define __pyx_n_u_WWS_FAMILY __pyx_string_tab[594]
#define __pyx_n_u_WWS_SUBFAMILY __pyx_string_tab[595]
#define __pyx_n_u_XOR __pyx_string_tab[596]
#define __pyx_n_u_X_HEIGHT __pyx_string_tab[597]
#define __pyx_n_u_a __pyx_string_tab[598]
#define __pyx_n_u_add __pyx_string_tab[599]
#define __pyx_n_u_add_codepoints __pyx_string_tab[600]
#define __pyx_n_u_add_range __pyx_string_tab[601]
#define __pyx_n_u_add_str __pyx_string_tab[602]
#define __pyx_n_u_add_utf8 __pyx_string_tab[603]
#define __pyx_n_u_advance __pyx_string_tab[604]
#define __pyx_n_u_alpha __pyx_string_tab[605]
#define __pyx_n_u_alternate_count __pyx_string_tab[606]
#define __pyx_n_u_alternates __pyx_string_tab[607]
#define __pyx_n_u_annotations __pyx_string_tab[608]
#define __pyx_n_u_args __pyx_string_tab[609]
#define __pyx_n_u_ascender __pyx_string_tab[610]
#define __pyx_n_u_assembly __pyx_string_tab[611]
#define __pyx_n_u_assembly_array __pyx_string_tab[612]
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[613]
#define __pyx_n_u_axis_def_value __pyx_string_tab[614]
#define __pyx_n_u_axis_index __pyx_string_tab[615]
#define __pyx_n_u_axis_max_value __pyx_string_tab[616]
#define __pyx_n_u_axis_min_value __pyx_string_tab[617]
#define __pyx_n_u_b __pyx_string_tab[618]
#define __pyx_n_u_baseline_tag __pyx_string_tab[619]
#define __pyx_n_u_blob __pyx_string_tab[620]
#define __pyx_n_u_blob_data __pyx_string_tab[621]
#define __pyx_n_u_blob_length __pyx_string_tab[622]
#define __pyx_n_u_blue __pyx_string_tab[623]
#define __pyx_n_u_bool __pyx_string_tab[624]
#define __pyx_n_u_buffer __pyx_string_tab[625]
#define __pyx_n_u_bytes __pyx_string_tab[626]
#define __pyx_n_u_c __pyx_string_tab[627]
#define __pyx_n_u_c_alternates __pyx_string_tab[628]
#define __pyx_n_u_c_colors __pyx_string_tab[629]
#define __pyx_n_u_c_coords __pyx_string_tab[630]
#define __pyx_n_u_c_extents __pyx_string_tab[631]
#define __pyx_n_u_c_extents_ptr __pyx_string_tab[632]
#define __pyx_n_u_c_foreground __pyx_string_tab[633]
#define __pyx_n_u_c_shapers __pyx_string_tab[634]
#define __pyx_n_u_c_tags __pyx_string_tab[635]
#define __pyx_n_u_callback __pyx_string_tab[636]
#define __pyx_n_u_clear __pyx_string_tab[637]
#define __pyx_n_u_clear_contents __pyx_string_tab[638]
#define __pyx_n_u_clear_custom_palette_colors __pyx_string_tab[639]
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[640]
#define __pyx_n_u_close __pyx_string_tab[641]
#define __pyx_n_u_closePath __pyx_string_tab[642]
#define __pyx_n_u_cls __pyx_string_tab[643]
#define __pyx_n_u_codepoints __pyx_string_tab[644]
#define __pyx_n_u_color __pyx_string_tab[645]
#define __pyx_n_u_color_count __pyx_string_tab[646]
#define __pyx_n_u_color_index __pyx_string_tab[647]
#define __pyx_n_u_color_palette_color_get_name_id __pyx_string_tab[648]
#define __pyx_n_u_colors __pyx_string_tab[649]
#define __pyx_n_u_configure __pyx_string_tab[650]
#define __pyx_n_u_constant __pyx_string_tab[651]
#define __pyx_n_u_consumed __pyx_string_tab[652]
#define __pyx_n_u_coords __pyx_string_tab[653]
#define __pyx_n_u_coords_2dot14 __pyx_string_tab[654]
#define __pyx_n_u_copy __pyx_string_tab[655]
#define __pyx_n_u_copy_2 __pyx_string_tab[656]
#define __pyx_n_u_correction_height __pyx_string_tab[657]
#define __pyx_n_u_count __pyx_string_tab[658]
#define __pyx_n_u_create __pyx_string_tab[659]
#define __pyx_n_u_create_for_tables __pyx_string_tab[660]
#define __pyx_n_u_cstr __pyx_string_tab[661]
#define __pyx_n_u_curveTo __pyx_string_tab[662]
#define __pyx_n_u_data __pyx_string_tab[663]
#define __pyx_n_u_decorator __pyx_string_tab[664]
#define __pyx_n_u_def_value __pyx_string_tab[665]
#define __pyx_n_u_default_value __pyx_string_tab[666]
#define __pyx_n_u_del_range __pyx_string_tab[667]
#define __pyx_n_u_deprecated __pyx_string_tab[668]
#define __pyx_n_u_deprecated_locals_decorator __pyx_string_tab[669]
#define __pyx_n_u_deprecated_locals_decorator_loca __pyx_string_tab[670]
#define __pyx_n_u_descender __pyx_string_tab[671]
#define __pyx_n_u_design_coords __pyx_string_tab[672]
#define __pyx_n_u_dict __pyx_string_tab[673]
#define __pyx_n_u_difference_update __pyx_string_tab[674]
#define __pyx_n_u_direction __pyx_string_tab[675]
#define __pyx_n_u_discard __pyx_string_tab[676]
#define __pyx_n_u_doc __pyx_string_tab[677]
#define __pyx_n_u_draw_data __pyx_string_tab[678]
#define __pyx_n_u_draw_funcs __pyx_string_tab[679]
#define __pyx_n_u_draw_glyph __pyx_string_tab[680]
#define __pyx_n_u_draw_glyph_or_fail __pyx_string_tab[681]
#define __pyx_n_u_draw_glyph_with_pen __pyx_string_tab[682]
#define __pyx_n_u_draw_state __pyx_string_tab[683]
#define __pyx_n_u_draw_state_p __pyx_string_tab[684]
#define __pyx_n_u_encode __pyx_string_tab[685]
#define __pyx_n_u_end __pyx_string_tab[686]
#define __pyx_n_u_end_connector_length __pyx_string_tab[687]
#define __pyx_n_u_entries __pyx_string_tab[688]
#define __pyx_n_u_enum __pyx_string_tab[689]
#define __pyx_n_u_enumerate __pyx_string_tab[690]
#define __pyx_n_u_execute __pyx_string_tab[691]
#define __pyx_n_u_extents __pyx_string_tab[692]
#define __pyx_n_u_face __pyx_string_tab[693]
#define __pyx_n_u_face_or_font __pyx_string_tab[694]
#define __pyx_n_u_feat __pyx_string_tab[695]
#define __pyx_n_u_feature_count __pyx_string_tab[696]
#define __pyx_n_u_features __pyx_string_tab[697]
#define __pyx_n_u_filename __pyx_string_tab[698]
#define __pyx_n_u_first __pyx_string_tab[699]
#define __pyx_n_u_flags __pyx_string_tab[700]
#define __pyx_n_u_float __pyx_string_tab[701]
#define __pyx_n_u_font __pyx_string_tab[702]
#define __pyx_n_u_foreground __pyx_string_tab[703]
#define __pyx_n_u_format __pyx_string_tab[704]
#define __pyx_n_u_from_file_path __pyx_string_tab[705]
#define __pyx_n_u_from_int __pyx_string_tab[706]
#define __pyx_n_u_fsencode __pyx_string_tab[707]
#define __pyx_n_u_full_advance __pyx_string_tab[708]
#define __pyx_n_u_func __pyx_string_tab[709]
#define __pyx_n_u_func_2 __pyx_string_tab[710]
#define __pyx_n_u_func_p __pyx_string_tab[711]
#define __pyx_n_u_funcs __pyx_string_tab[712]
#define __pyx_n_u_functools __pyx_string_tab[713]
#define __pyx_n_u_g __pyx_string_tab[714]
#define __pyx_n_u_genexpr __pyx_string_tab[715]
#define __pyx_n_u_get __pyx_string_tab[716]
#define __pyx_n_u_get_axis_range __pyx_string_tab[717]
#define __pyx_n_u_get_color_palette __pyx_string_tab[718]
#define __pyx_n_u_get_font_extents __pyx_string_tab[719]
#define __pyx_n_u_get_glyph_color_layers __pyx_string_tab[720]
#define __pyx_n_u_get_glyph_color_png __pyx_string_tab[721]
#define __pyx_n_u_get_glyph_color_svg __pyx_string_tab[722]
#define __pyx_n_u_get_glyph_extents __pyx_string_tab[723]
#define __pyx_n_u_get_glyph_from_name __pyx_string_tab[724]
#define __pyx_n_u_get_glyph_h_advance __pyx_string_tab[725]
#define __pyx_n_u_get_glyph_h_origin __pyx_string_tab[726]
#define __pyx_n_u_get_glyph_name __pyx_string_tab[727]
#define __pyx_n_u_get_glyph_shape __pyx_string_tab[728]
#define __pyx_n_u_get_glyph_v_advance __pyx_string_tab[729]
#define __pyx_n_u_get_glyph_v_origin __pyx_string_tab[730]
#define __pyx_n_u_get_language_feature_tags __pyx_string_tab[731]
#define __pyx_n_u_get_layout_baseline __pyx_string_tab[732]
#define __pyx_n_u_get_layout_glyph_class __pyx_string_tab[733]
#define __pyx_n_u_get_lookup_glyph_alternates __pyx_string_tab[734]
#define __pyx_n_u_get_math_constant __pyx_string_tab[735]
#define __pyx_n_u_get_math_glyph_assembly __pyx_string_tab[736]
#define __pyx_n_u_get_math_glyph_italics_correctio __pyx_string_tab[737]
#define __pyx_n_u_get_math_glyph_kerning __pyx_string_tab[738]
#define __pyx_n_u_get_math_glyph_kernings __pyx_string_tab[739]
#define __pyx_n_u_get_math_glyph_top_accent_attach __pyx_string_tab[740]
#define __pyx_n_u_get_math_glyph_variants __pyx_string_tab[741]
#define __pyx_n_u_get_math_min_connector_overlap __pyx_string_tab[742]
#define __pyx_n_u_get_metric_position __pyx_string_tab[743]
#define __pyx_n_u_get_metric_position_with_fallbac __pyx_string_tab[744]
#define __pyx_n_u_get_metric_variation __pyx_string_tab[745]
#define __pyx_n_u_get_metric_x_variation __pyx_string_tab[746]
#define __pyx_n_u_get_metric_y_variation __pyx_string_tab[747]
#define __pyx_n_u_get_name __pyx_string_tab[748]
#define __pyx_n_u_get_nominal_glyph __pyx_string_tab[749]
#define __pyx_n_u_get_script_language_tags __pyx_string_tab[750]
#define __pyx_n_u_get_style_value __pyx_string_tab[751]
#define __pyx_n_u_get_table_script_tags __pyx_string_tab[752]
#define __pyx_n_u_get_var_coords_design __pyx_string_tab[753]
#define __pyx_n_u_get_var_coords_normalized __pyx_string_tab[754]
#define __pyx_n_u_get_variation_glyph __pyx_string_tab[755]
#define __pyx_n_u_getstate __pyx_string_tab[756]
#define __pyx_n_u_gid __pyx_string_tab[757]
#define __pyx_n_u_glyph __pyx_string_tab[758]
#define __pyx_n_u_glyph_from_string __pyx_string_tab[759]
#define __pyx_n_u_glyph_has_color_paint __pyx_string_tab[760]
#define __pyx_n_u_glyph_to_string __pyx_string_tab[761]
#define __pyx_n_u_graphnodes __pyx_string_tab[762]
#define __pyx_n_u_green __pyx_string_tab[763]
#define __pyx_n_u_guess_segment_properties __pyx_string_tab[764]
#define __pyx_n_u_hang __pyx_string_tab[765]
#define __pyx_n_u_has_color_layers __pyx_string_tab[766]
#define __pyx_n_u_has_color_paint __pyx_string_tab[767]
#define __pyx_n_u_has_color_palettes __pyx_string_tab[768]
#define __pyx_n_u_has_color_png __pyx_string_tab[769]
#define __pyx_n_u_has_color_svg __pyx_string_tab[770]
#define __pyx_n_u_has_layout_glyph_classes __pyx_string_tab[771]
#define __pyx_n_u_has_layout_positioning __pyx_string_tab[772]
#define __pyx_n_u_has_layout_substitution __pyx_string_tab[773]
#define __pyx_n_u_has_math_data __pyx_string_tab[774]
#define __pyx_n_u_hb_baseline_tag __pyx_string_tab[775]
#define __pyx_n_u_hb_codepoint_t __pyx_string_tab[776]
#define __pyx_n_u_hb_codepoints __pyx_string_tab[777]
#define __pyx_n_u_hb_direction __pyx_string_tab[778]
#define __pyx_n_u_hb_features __pyx_string_tab[779]
#define __pyx_n_u_hb_language __pyx_string_tab[780]
#define __pyx_n_u_hb_language_tag __pyx_string_tab[781]
#define __pyx_n_u_hb_position __pyx_string_tab[782]
#define __pyx_n_u_hb_script __pyx_string_tab[783]
#define __pyx_n_u_hb_script_tag __pyx_string_tab[784]
#define __pyx_n_u_hb_tag __pyx_string_tab[785]
#define __pyx_n_u_hb_variations __pyx_string_tab[786]
#define __pyx_n_u_head __pyx_string_tab[787]
#define __pyx_n_u_height __pyx_string_tab[788]
#define __pyx_n_u_i __pyx_string_tab[789]
#define __pyx_n_u_icfb __pyx_string_tab[790]
#define __pyx_n_u_icft __pyx_string_tab[791]
#define __pyx_n_u_ideo __pyx_string_tab[792]
#define __pyx_n_u_idtp __pyx_string_tab[793]
#define __pyx_n_u_img __pyx_string_tab[794]
#define __pyx_n_u_index __pyx_string_tab[795]
#define __pyx_n_u_init __pyx_string_tab[796]
#define __pyx_n_u_input __pyx_string_tab[797]
#define __pyx_n_u_inst __pyx_string_tab[798]
#define __pyx_n_u_int __pyx_string_tab[799]
#define __pyx_n_u_intersection_update __pyx_string_tab[800]
#define __pyx_n_u_invert __pyx_string_tab[801]
#define __pyx_n_u_is_coroutine __pyx_string_tab[802]
#define __pyx_n_u_is_equal __pyx_string_tab[803]
#define __pyx_n_u_is_foreground __pyx_string_tab[804]
#define __pyx_n_u_is_glyph_extended_math_shape __pyx_string_tab[805]
#define __pyx_n_u_is_inverted __pyx_string_tab[806]
#define __pyx_n_u_issubset __pyx_string_tab[807]
#define __pyx_n_u_issuperset __pyx_string_tab[808]
#define __pyx_n_u_italics_correction __pyx_string_tab[809]
#define __pyx_n_u_item_length __pyx_string_tab[810]
#define __pyx_n_u_item_offset __pyx_string_tab[811]
#define __pyx_n_u_items __pyx_string_tab[812]
#define __pyx_n_u_join __pyx_string_tab[813]
#define __pyx_n_u_k __pyx_string_tab[814]
#define __pyx_n_u_keep_everything __pyx_string_tab[815]
#define __pyx_n_u_kern __pyx_string_tab[816]
#define __pyx_n_u_kern_value __pyx_string_tab[817]
#define __pyx_n_u_kerns __pyx_string_tab[818]
#define __pyx_n_u_kerns_array __pyx_string_tab[819]
#define __pyx_n_u_keys __pyx_string_tab[820]
#define __pyx_n_u_keys_locals_genexpr __pyx_string_tab[821]
#define __pyx_n_u_kwargs __pyx_string_tab[822]
#define __pyx_n_u_lang __pyx_string_tab[823]
#define __pyx_n_u_language __pyx_string_tab[824]
#define __pyx_n_u_language_count __pyx_string_tab[825]
#define __pyx_n_u_language_index __pyx_string_tab[826]
#define __pyx_n_u_language_tag __pyx_string_tab[827]
#define __pyx_n_u_larger_set __pyx_string_tab[828]
#define __pyx_n_u_last __pyx_string_tab[829]
#define __pyx_n_u_layer_count __pyx_string_tab[830]
#define __pyx_n_u_layers __pyx_string_tab[831]
#define __pyx_n_u_length __pyx_string_tab[832]
#define __pyx_n_u_lineTo __pyx_string_tab[833]
#define __pyx_n_u_line_gap __pyx_string_tab[834]
#define __pyx_n_u_list_names __pyx_string_tab[835]
#define __pyx_n_u_lookup_index __pyx_string_tab[836]
#define __pyx_n_u_m __pyx_string_tab[837]
#define __pyx_n_u_main __pyx_string_tab[838]
#define __pyx_n_u_math __pyx_string_tab[839]
#define __pyx_n_u_max_correction_height __pyx_string_tab[840]
#define __pyx_n_u_max_value __pyx_string_tab[841]
#define __pyx_n_u_message __pyx_string_tab[842]
#define __pyx_n_u_metaclass __pyx_string_tab[843]
#define __pyx_n_u_methods __pyx_string_tab[844]
#define __pyx_n_u_min_value __pyx_string_tab[845]
#define __pyx_n_u_module __pyx_string_tab[846]
#define __pyx_n_u_moveTo __pyx_string_tab[847]
#define __pyx_n_u_mro_entries __pyx_string_tab[848]
#define __pyx_n_u_name __pyx_string_tab[849]
#define __pyx_n_u_name_2 __pyx_string_tab[850]
#define __pyx_n_u_name_id __pyx_string_tab[851]
#define __pyx_n_u_new_face __pyx_string_tab[852]
#define __pyx_n_u_next __pyx_string_tab[853]
#define __pyx_n_u_node __pyx_string_tab[854]
#define __pyx_n_u_num_entries __pyx_string_tab[855]
#define __pyx_n_u_num_glyphs __pyx_string_tab[856]
#define __pyx_n_u_num_nodes __pyx_string_tab[857]
#define __pyx_n_u_obj_list __pyx_string_tab[858]
#define __pyx_n_u_object __pyx_string_tab[859]
#define __pyx_n_u_offset __pyx_string_tab[860]
#define __pyx_n_u_os __pyx_string_tab[861]
#define __pyx_n_u_ot_color_glyph_get_layers __pyx_string_tab[862]
#define __pyx_n_u_ot_color_glyph_get_png __pyx_string_tab[863]
#define __pyx_n_u_ot_color_glyph_get_svg __pyx_string_tab[864]
#define __pyx_n_u_ot_color_glyph_has_paint __pyx_string_tab[865]
#define __pyx_n_u_ot_color_has_layers __pyx_string_tab[866]
#define __pyx_n_u_ot_color_has_paint __pyx_string_tab[867]
#define __pyx_n_u_ot_color_has_palettes __pyx_string_tab[868]
#define __pyx_n_u_ot_color_has_png __pyx_string_tab[869]
#define __pyx_n_u_ot_color_has_svg __pyx_string_tab[870]
#define __pyx_n_u_ot_color_palette_color_get_name __pyx_string_tab[871]
#define __pyx_n_u_ot_color_palette_get_colors __pyx_string_tab[872]
#define __pyx_n_u_ot_color_palette_get_count __pyx_string_tab[873]
#define __pyx_n_u_ot_color_palette_get_flags __pyx_string_tab[874]
#define __pyx_n_u_ot_color_palette_get_name_id __pyx_string_tab[875]
#define __pyx_n_u_ot_font_set_funcs __pyx_string_tab[876]
#define __pyx_n_u_ot_layout_get_baseline __pyx_string_tab[877]
#define __pyx_n_u_ot_layout_get_glyph_class __pyx_string_tab[878]
#define __pyx_n_u_ot_layout_has_glyph_classes __pyx_string_tab[879]
#define __pyx_n_u_ot_layout_has_positioning __pyx_string_tab[880]
#define __pyx_n_u_ot_layout_has_substitution __pyx_string_tab[881]
#define __pyx_n_u_ot_layout_language_get_feature_t __pyx_string_tab[882]
#define __pyx_n_u_ot_layout_lookup_get_glyph_alter __pyx_string_tab[883]
#define __pyx_n_u_ot_layout_script_get_language_ta __pyx_string_tab[884]
#define __pyx_n_u_ot_layout_table_get_script_tags __pyx_string_tab[885]
#define __pyx_n_u_ot_math_get_constant __pyx_string_tab[886]
#define __pyx_n_u_ot_math_get_glyph_assembly __pyx_string_tab[887]
#define __pyx_n_u_ot_math_get_glyph_italics_correc __pyx_string_tab[888]
#define __pyx_n_u_ot_math_get_glyph_kerning __pyx_string_tab[889]
#define __pyx_n_u_ot_math_get_glyph_kernings __pyx_string_tab[890]
#define __pyx_n_u_ot_math_get_glyph_top_accent_att __pyx_string_tab[891]
#define __pyx_n_u_ot_math_get_glyph_variants __pyx_string_tab[892]
#define __pyx_n_u_ot_math_get_min_connector_overla __pyx_string_tab[893]
#define __pyx_n_u_ot_math_has_data __pyx_string_tab[894]
#define __pyx_n_u_ot_math_is_glyph_extended_shape __pyx_string_tab[895]
#define __pyx_n_u_ot_tag_to_language __pyx_string_tab[896]
#define __pyx_n_u_ot_tag_to_script __pyx_string_tab[897]
#define __pyx_n_u_other __pyx_string_tab[898]
#define __pyx_n_u_p __pyx_string_tab[899]
#define __pyx_n_u_packed __pyx_string_tab[900]
#define __pyx_n_u_packed_blob __pyx_string_tab[901]
#define __pyx_n_u_paint_funcs __pyx_string_tab[902]
#define __pyx_n_u_paint_glyph __pyx_string_tab[903]
#define __pyx_n_u_paint_glyph_or_fail __pyx_string_tab[904]
#define __pyx_n_u_paint_state __pyx_string_tab[905]
#define __pyx_n_u_paint_state_p __pyx_string_tab[906]
#define __pyx_n_u_palette_index __pyx_string_tab[907]
#define __pyx_n_u_pathlib __pyx_string_tab[908]
#define __pyx_n_u_pen __pyx_string_tab[909]
#define __pyx_n_u_pin_all_axes_to_default __pyx_string_tab[910]
#define __pyx_n_u_pin_axis_location __pyx_string_tab[911]
#define __pyx_n_u_pin_axis_to_default __pyx_string_tab[912]
#define __pyx_n_u_pop __pyx_string_tab[913]
#define __pyx_n_u_position __pyx_string_tab[914]
#define __pyx_n_u_postscript_name_id __pyx_string_tab[915]
#define __pyx_n_u_prepare __pyx_string_tab[916]
#define __pyx_n_u_pyx_state __pyx_string_tab[917]
#define __pyx_n_u_pyx_vtable __pyx_string_tab[918]
#define __pyx_n_u_qCurveTo __pyx_string_tab[919]
#define __pyx_n_u_qualname __pyx_string_tab[920]
#define __pyx_n_u_r __pyx_string_tab[921]
#define __pyx_n_u_red __pyx_string_tab[922]
#define __pyx_n_u_reduce __pyx_string_tab[923]
#define __pyx_n_u_reduce_cython __pyx_string_tab[924]
#define __pyx_n_u_reduce_ex __pyx_string_tab[925]
#define __pyx_n_u_reference_table __pyx_string_tab[926]
#define __pyx_n_u_remove __pyx_string_tab[927]
#define __pyx_n_u_render __pyx_string_tab[928]
#define __pyx_n_u_repack __pyx_string_tab[929]
#define __pyx_n_u_repack_with_tag __pyx_string_tab[930]
#define __pyx_n_u_replacement __pyx_string_tab[931]
#define __pyx_n_u_repr___locals_genexpr __pyx_string_tab[932]
#define __pyx_n_u_reset __pyx_string_tab[933]
#define __pyx_n_u_result __pyx_string_tab[934]
#define __pyx_n_u_ret __pyx_string_tab[935]
#define __pyx_n_u_return __pyx_string_tab[936]
#define __pyx_n_u_romn __pyx_string_tab[937]
#define __pyx_n_u_round __pyx_string_tab[938]
#define __pyx_n_u_s __pyx_string_tab[939]
#define __pyx_n_u_script_count __pyx_string_tab[940]
#define __pyx_n_u_script_index __pyx_string_tab[941]
#define __pyx_n_u_script_tag __pyx_string_tab[942]
#define __pyx_n_u_self __pyx_string_tab[943]
#define __pyx_n_u_send __pyx_string_tab[944]
#define __pyx_n_u_serialize __pyx_string_tab[945]
#define __pyx_n_u_serialize_with_tag __pyx_string_tab[946]
#define __pyx_n_u_set __pyx_string_tab[947]
#define __pyx_n_u_set_2 __pyx_string_tab[948]
#define __pyx_n_u_set_axis_range __pyx_string_tab[949]
#define __pyx_n_u_set_close_path_func __pyx_string_tab[950]
#define __pyx_n_u_set_color_func __pyx_string_tab[951]
#define __pyx_n_u_set_color_glyph_func __pyx_string_tab[952]
#define __pyx_n_u_set_cubic_to_func __pyx_string_tab[953]
#define __pyx_n_u_set_custom_palette_color __pyx_string_tab[954]
#define __pyx_n_u_set_custom_palette_color_func __pyx_string_tab[955]
#define __pyx_n_u_set_font_h_extents_func __pyx_string_tab[956]
#define __pyx_n_u_set_font_v_extents_func __pyx_string_tab[957]
#define __pyx_n_u_set_glyph_extents __pyx_string_tab[958]
#define __pyx_n_u_set_glyph_h_advance_func __pyx_string_tab[959]
#define __pyx_n_u_set_glyph_name_func __pyx_string_tab[960]
#define __pyx_n_u_set_glyph_v_advance_func __pyx_string_tab[961]
#define __pyx_n_u_set_glyph_v_origin_func __pyx_string_tab[962]
#define __pyx_n_u_set_image_func __pyx_string_tab[963]
#define __pyx_n_u_set_language_from_ot_tag __pyx_string_tab[964]
#define __pyx_n_u_set_line_to_func __pyx_string_tab[965]
#define __pyx_n_u_set_linear_gradient_func __pyx_string_tab[966]
#define __pyx_n_u_set_message_func __pyx_string_tab[967]
#define __pyx_n_u_set_move_to_func __pyx_string_tab[968]
#define __pyx_n_u_set_name __pyx_string_tab[969]
#define __pyx_n_u_set_nominal_glyph_func __pyx_string_tab[970]
#define __pyx_n_u_set_pop_clip_func __pyx_string_tab[971]
#define __pyx_n_u_set_pop_group_func __pyx_string_tab[972]
#define __pyx_n_u_set_pop_transform_func __pyx_string_tab[973]
#define __pyx_n_u_set_push_clip_glyph_func __pyx_string_tab[974]
#define __pyx_n_u_set_push_clip_rectangle_func __pyx_string_tab[975]
#define __pyx_n_u_set_push_group_func __pyx_string_tab[976]
#define __pyx_n_u_set_push_transform_func __pyx_string_tab[977]
#define __pyx_n_u_set_quadratic_to_func __pyx_string_tab[978]
#define __pyx_n_u_set_radial_gradient_func __pyx_string_tab[979]
#define __pyx_n_u_set_script_from_ot_tag __pyx_string_tab[980]
#define __pyx_n_u_set_sweep_gradient_func __pyx_string_tab[981]
#define __pyx_n_u_set_type __pyx_string_tab[982]
#define __pyx_n_u_set_var_coords_design __pyx_string_tab[983]
#define __pyx_n_u_set_var_coords_normalized __pyx_string_tab[984]
#define __pyx_n_u_set_variation __pyx_string_tab[985]
#define __pyx_n_u_set_variation_glyph_func __pyx_string_tab[986]
#define __pyx_n_u_set_variations __pyx_string_tab[987]
#define __pyx_n_u_setdefault __pyx_string_tab[988]
#define __pyx_n_u_sets __pyx_string_tab[989]
#define __pyx_n_u_setstate __pyx_string_tab[990]
#define __pyx_n_u_setstate_cython __pyx_string_tab[991]
#define __pyx_n_u_shape __pyx_string_tab[992]
#define __pyx_n_u_shaper __pyx_string_tab[993]
#define __pyx_n_u_shapers __pyx_string_tab[994]
#define __pyx_n_u_size __pyx_string_tab[995]
#define __pyx_n_u_smaller_set __pyx_string_tab[996]
#define __pyx_n_u_source __pyx_string_tab[997]
#define __pyx_n_u_start __pyx_string_tab[998]
#define __pyx_n_u_start_connector_length __pyx_string_tab[999]
#define __pyx_n_u_start_offset __pyx_string_tab[1000]
#define __pyx_n_u_staticmethod __pyx_string_tab[1001]
#define __pyx_n_u_str __pyx_string_tab[1002]
#define __pyx_n_u_stride __pyx_string_tab[1003]
#define __pyx_n_u_string __pyx_string_tab[1004]
#define __pyx_n_u_subfamily_name_id __pyx_string_tab[1005]
#define __pyx_n_u_subset __pyx_string_tab[1006]
#define __pyx_n_u_subset_preprocess __pyx_string_tab[1007]
#define __pyx_n_u_subtables __pyx_string_tab[1008]
#define __pyx_n_u_success __pyx_string_tab[1009]
#define __pyx_n_u_symmetric_difference_update __pyx_string_tab[1010]
#define __pyx_n_u_table_bytes __pyx_string_tab[1011]
#define __pyx_n_u_table_data __pyx_string_tab[1012]
#define __pyx_n_u_tag __pyx_string_tab[1013]
#define __pyx_n_u_tag_packed __pyx_string_tab[1014]
#define __pyx_n_u_tags __pyx_string_tab[1015]
#define __pyx_n_u_tail __pyx_string_tab[1016]
#define __pyx_n_u_test __pyx_string_tab[1017]
#define __pyx_n_u_text __pyx_string_tab[1018]
#define __pyx_n_u_text_length __pyx_string_tab[1019]
#define __pyx_n_u_throw __pyx_string_tab[1020]
#define __pyx_n_u_to_int __pyx_string_tab[1021]
#define __pyx_n_u_typing __pyx_string_tab[1022]
#define __pyx_n_u_ucs4_buffer __pyx_string_tab[1023]
#define __pyx_n_u_uharfbuzz__harfbuzz __pyx_string_tab[1024]
#define __pyx_n_u_unicode __pyx_string_tab[1025]
#define __pyx_n_u_update __pyx_string_tab[1026]
#define __pyx_n_u_update_2 __pyx_string_tab[1027]
#define __pyx_n_u_user_data __pyx_string_tab[1028]
#define __pyx_n_u_user_data_p __pyx_string_tab[1029]
#define __pyx_n_u_v __pyx_string_tab[1030]
#define __pyx_n_u_value __pyx_string_tab[1031]
#define __pyx_n_u_values __pyx_string_tab[1032]
#define __pyx_n_u_values_locals_genexpr __pyx_string_tab[1033]
#define __pyx_n_u_variants __pyx_string_tab[1034]
#define __pyx_n_u_variants_array __pyx_string_tab[1035]
#define __pyx_n_u_variation __pyx_string_tab[1036]
#define __pyx_n_u_variation_selector __pyx_string_tab[1037]
#define __pyx_n_u_variation_unicodes __pyx_string_tab[1038]
#define __pyx_n_u_variations __pyx_string_tab[1039]
#define __pyx_n_u_version_string __pyx_string_tab[1040]
#define __pyx_n_u_warn __pyx_string_tab[1041]
#define __pyx_n_u_warnings __pyx_string_tab[1042]
#define __pyx_n_u_width __pyx_string_tab[1043]
#define __pyx_n_u_wrapper __pyx_string_tab[1044]
#define __pyx_n_u_wraps __pyx_string_tab[1045]
#define __pyx_n_u_x __pyx_string_tab[1046]
#define __pyx_n_u_x_bearing __pyx_string_tab[1047]
#define __pyx_n_u_x_origin __pyx_string_tab[1048]
#define __pyx_n_u_y __pyx_string_tab[1049]
#define __pyx_n_u_y_bearing __pyx_string_tab[1050]
#define __pyx_n_u_y_origin __pyx_string_tab[1051]
#define __pyx_kp_b__5 __pyx_string_tab[1052]
#define __pyx_kp_b_iso88591_0C1 __pyx_string_tab[1053]
#define __pyx_kp_b_iso88591_0_4_Qa __pyx_string_tab[1054]
#define __pyx_kp_b_iso88591_0_AQ_vQgRq_A_U_1_Qe5_q_2Q_Qd__A __pyx_string_tab[1055]
#define __pyx_kp_b_iso88591_1D_4s_1_1A __pyx_string_tab[1056]
#define __pyx_kp_b_iso88591_1D_9AQ_wm1 __pyx_string_tab[1057]
#define __pyx_kp_b_iso88591_1_1D_q_4_1D __pyx_string_tab[1058]
#define __pyx_kp_b_iso88591_1_2_4_1_q_as_G4uE __pyx_string_tab[1059]
#define __pyx_kp_b_iso88591_1_4_1N __pyx_string_tab[1060]
#define __pyx_kp_b_iso88591_1_4_aq __pyx_string_tab[1061]
#define __pyx_kp_b_iso88591_1_AT_A __pyx_string_tab[1062]
#define __pyx_kp_b_iso88591_1_WA_l_Q_aq_Q_1_Q_1_Q_1_k_q __pyx_string_tab[1063]
#define __pyx_kp_b_iso88591_1_a_9Cq_aq_9AQ __pyx_string_tab[1064]
#define __pyx_kp_b_iso88591_22B_4_q_q __pyx_string_tab[1065]
#define __pyx_kp_b_iso88591_2_1_2_87_YgQ_Zwa_Zwa_AQ __pyx_string_tab[1066]
#define __pyx_kp_b_iso88591_2_1_Q_A_lRS __pyx_string_tab[1067]
#define __pyx_kp_b_iso88591_2_1_k __pyx_string_tab[1068]
#define __pyx_kp_b_iso88591_2_4_q_q __pyx_string_tab[1069]
#define __pyx_kp_b_iso88591_2_xq_4_4AQ __pyx_string_tab[1070]
#define __pyx_kp_b_iso88591_4A_4_q_q __pyx_string_tab[1071]
#define __pyx_kp_b_iso88591_4L_7q_WA __pyx_string_tab[1072]
#define __pyx_kp_b_iso88591_4_M_RS __pyx_string_tab[1073]
#define __pyx_kp_b_iso88591_4_q __pyx_string_tab[1074]
#define __pyx_kp_b_iso88591_4q __pyx_string_tab[1075]
#define __pyx_kp_b_iso88591_4z_4_1D __pyx_string_tab[1076]
#define __pyx_kp_b_iso88591_4z_a __pyx_string_tab[1077]
#define __pyx_kp_b_iso88591_55Fa_0_Qa_q __pyx_string_tab[1078]
#define __pyx_kp_b_iso88591_5XQ_4_Qa __pyx_string_tab[1079]
#define __pyx_kp_b_iso88591_5XQ_Cq_4_Naq_q __pyx_string_tab[1080]
#define __pyx_kp_b_iso88591_7_QgYa_4AQ_A_a_Q_6 __pyx_string_tab[1081]
#define __pyx_kp_b_iso88591_7xq_4_AQ __pyx_string_tab[1082]
#define __pyx_kp_b_iso88591_7xq_6at_a __pyx_string_tab[1083]
#define __pyx_kp_b_iso88591_81_1Cwa_2_D_1 __pyx_string_tab[1084]
#define __pyx_kp_b_iso88591_81_4 __pyx_string_tab[1085]
#define __pyx_kp_b_iso88591_81_8_83a_1_q __pyx_string_tab[1086]
#define __pyx_kp_b_iso88591_81_A_Q_A_c_at_o_STTaab_E_aq_wau __pyx_string_tab[1087]
#define __pyx_kp_b_iso88591_81_Cwa_1_6at_a_5_1_9AQ __pyx_string_tab[1088]
#define __pyx_kp_b_iso88591_81_q_Jj __pyx_string_tab[1089]
#define __pyx_kp_b_iso88591_81_q_KuF_vWA __pyx_string_tab[1090]
#define __pyx_kp_b_iso88591_89_4_awfA __pyx_string_tab[1091]
#define __pyx_kp_b_iso88591_8_HA_q_A_c_4AT_NRYYZ_U_1_aq_A_q __pyx_string_tab[1092]
#define __pyx_kp_b_iso88591_8_IWA_C1G1_31D_1 __pyx_string_tab[1093]
#define __pyx_kp_b_iso88591_8_Qd_U_1_1_q __pyx_string_tab[1094]
#define __pyx_kp_b_iso88591_9A __pyx_string_tab[1095]
#define __pyx_kp_b_iso88591_9_4 __pyx_string_tab[1096]
#define __pyx_kp_b_iso88591_9_k __pyx_string_tab[1097]
#define __pyx_kp_b_iso88591_A __pyx_string_tab[1098]
#define __pyx_kp_b_iso88591_AQ_4q_q_1_E_aq_z__F_q_AQ_4_at1 __pyx_string_tab[1099]
#define __pyx_kp_b_iso88591_AT_4s_1_1A __pyx_string_tab[1100]
#define __pyx_kp_b_iso88591_A_06a28_1_Cwa_1_nCq_2_A_U_1_q_A __pyx_string_tab[1101]
#define __pyx_kp_b_iso88591_A_0N_s_c_AQ_j_Qc_MQcQRRS_AQ_CuA __pyx_string_tab[1102]
#define __pyx_kp_b_iso88591_A_1_1_1_1_WA_G_S_G_S_G_S_Q_D_8_k __pyx_string_tab[1103]
#define __pyx_kp_b_iso88591_A_1_1_a_Q_a_Q_a_Q_a_Q_a_Q_a_Q_a __pyx_string_tab[1104]
#define __pyx_kp_b_iso88591_A_1_AQ_L_1_7_Q_Qd_Qc_fA_Q_q __pyx_string_tab[1105]
#define __pyx_kp_b_iso88591_A_1_AQ_q __pyx_string_tab[1106]
#define __pyx_kp_b_iso88591_A_1_AV1_A_00DAV1_A_g_9_Q_gQ_A_Q __pyx_string_tab[1107]
#define __pyx_kp_b_iso88591_A_1_Biq_q_q_5_1_q_2_1_AQ_L_q __pyx_string_tab[1108]
#define __pyx_kp_b_iso88591_A_1_Kq_V1 __pyx_string_tab[1109]
#define __pyx_kp_b_iso88591_A_1_Q_G6 __pyx_string_tab[1110]
#define __pyx_kp_b_iso88591_A_1_q __pyx_string_tab[1111]
#define __pyx_kp_b_iso88591_A_1_wk __pyx_string_tab[1112]
#define __pyx_kp_b_iso88591_A_22Gq_00DMQR_1D_A_fBa_A_A_y_1_d __pyx_string_tab[1113]
#define __pyx_kp_b_iso88591_A_31D __pyx_string_tab[1114]
#define __pyx_kp_b_iso88591_A_31_B_q __pyx_string_tab[1115]
#define __pyx_kp_b_iso88591_A_37_1_s_Qa_4q_j_q_A_1_t_2_4q_a __pyx_string_tab[1116]
#define __pyx_kp_b_iso88591_A_3_AV1_a_22FavQ_A_g_9_Q_gQ_a_Q __pyx_string_tab[1117]
#define __pyx_kp_b_iso88591_A_3a_q __pyx_string_tab[1118]
#define __pyx_kp_b_iso88591_A_41_A_2_A_1 __pyx_string_tab[1119]
#define __pyx_kp_b_iso88591_A_41_a_4G_a_Q __pyx_string_tab[1120]
#define __pyx_kp_b_iso88591_A_4A_C7_PQ __pyx_string_tab[1121]
#define __pyx_kp_b_iso88591_A_4q __pyx_string_tab[1122]
#define __pyx_kp_b_iso88591_A_4q_2 __pyx_string_tab[1123]
#define __pyx_kp_b_iso88591_A_4q_s_Q_4z_4_1D __pyx_string_tab[1124]
#define __pyx_kp_b_iso88591_A_4q_s_Qa_Q_4z_4_1D __pyx_string_tab[1125]
#define __pyx_kp_b_iso88591_A_4q_s_uF_4z_A_4_1D __pyx_string_tab[1126]
#define __pyx_kp_b_iso88591_A_5A_Q_37_Q_A __pyx_string_tab[1127]
#define __pyx_kp_b_iso88591_A_5A_Q_37_Q_A_2 __pyx_string_tab[1128]
#define __pyx_kp_b_iso88591_A_6Q_a_4G_a_Q __pyx_string_tab[1129]
#define __pyx_kp_b_iso88591_A_9_a __pyx_string_tab[1130]
#define __pyx_kp_b_iso88591_A_AQ_9Cq_U_1_fAQ_k_1 __pyx_string_tab[1131]
#define __pyx_kp_b_iso88591_A_AQ_aq_Qa_aq_uAS_3a __pyx_string_tab[1132]
#define __pyx_kp_b_iso88591_A_AT __pyx_string_tab[1133]
#define __pyx_kp_b_iso88591_A_AT_2 __pyx_string_tab[1134]
#define __pyx_kp_b_iso88591_A_AT_34 __pyx_string_tab[1135]
#define __pyx_kp_b_iso88591_A_A_a_WF __pyx_string_tab[1136]
#define __pyx_kp_b_iso88591_A_A_a_WF_2 __pyx_string_tab[1137]
#define __pyx_kp_b_iso88591_A_E_A_0_1C1G1 __pyx_string_tab[1138]
#define __pyx_kp_b_iso88591_A_O1_Q_4G6 __pyx_string_tab[1139]
#define __pyx_kp_b_iso88591_A_O1_Q_4G6_2 __pyx_string_tab[1140]
#define __pyx_kp_b_iso88591_A_Q __pyx_string_tab[1141]
#define __pyx_kp_b_iso88591_A_Q_2 __pyx_string_tab[1142]
#define __pyx_kp_b_iso88591_A_Q_3 __pyx_string_tab[1143]
#define __pyx_kp_b_iso88591_A_Q_AV1_A_A_g_9_Q_gQ_Q_S_a_a_Q __pyx_string_tab[1144]
#define __pyx_kp_b_iso88591_A_Q_q_gV1 __pyx_string_tab[1145]
#define __pyx_kp_b_iso88591_A_Q_q_gV1_2 __pyx_string_tab[1146]
#define __pyx_kp_b_iso88591_A_Qd __pyx_string_tab[1147]
#define __pyx_kp_b_iso88591_A_Qd_2 __pyx_string_tab[1148]
#define __pyx_kp_b_iso88591_A_a_7wfA __pyx_string_tab[1149]
#define __pyx_kp_b_iso88591_A_a_AV1_B_6_A_g_9_Q_gQ_Q_S_a_q_Q __pyx_string_tab[1150]
#define __pyx_kp_b_iso88591_A_aq_q __pyx_string_tab[1151]
#define __pyx_kp_b_iso88591_A_at_aq_q_as_e5 __pyx_string_tab[1152]
#define __pyx_kp_b_iso88591_A_c_q __pyx_string_tab[1153]
#define __pyx_kp_b_iso88591_A_fA_AV1_q __pyx_string_tab[1154]
#define __pyx_kp_b_iso88591_A_q_8_vQ __pyx_string_tab[1155]
#define __pyx_kp_b_iso88591_A_q_A __pyx_string_tab[1156]
#define __pyx_kp_b_iso88591_A_q_Kq_E_aq_1_uCq_1_6_war_T_AWA __pyx_string_tab[1157]
#define __pyx_kp_b_iso88591_A_q_Kq_Q __pyx_string_tab[1158]
#define __pyx_kp_b_iso88591_A_waq __pyx_string_tab[1159]
#define __pyx_kp_b_iso88591_B_4 __pyx_string_tab[1160]
#define __pyx_kp_b_iso88591_Cwa_1_m3a_a_A_U_1_q_A_AU_G1F_A __pyx_string_tab[1161]
#define __pyx_kp_b_iso88591_DHA_Qd_YFZZ_wm1 __pyx_string_tab[1162]
#define __pyx_kp_b_iso88591_DMQZZ_9Cq_XWA_7_1_AT_IV6_1_a_7 __pyx_string_tab[1163]
#define __pyx_kp_b_iso88591_Fiq_A_8_7q_A_4_z9I __pyx_string_tab[1164]
#define __pyx_kp_b_iso88591_HA_1D0B_kQR __pyx_string_tab[1165]
#define __pyx_kp_b_iso88591_HA_4_1 __pyx_string_tab[1166]
#define __pyx_kp_b_iso88591_HA_7_QgYa_1_1_uCq_q_Q_6 __pyx_string_tab[1167]
#define __pyx_kp_b_iso88591_HA_Qd_Q_xs_q_1 __pyx_string_tab[1168]
#define __pyx_kp_b_iso88591_HA_at_a __pyx_string_tab[1169]
#define __pyx_kp_b_iso88591_HA_l_Q_Qm_U_1_7_q_ar_q_A_q __pyx_string_tab[1170]
#define __pyx_kp_b_iso88591_IQ_1D_y __pyx_string_tab[1171]
#define __pyx_kp_b_iso88591_IQ_6at_t1 __pyx_string_tab[1172]
#define __pyx_kp_b_iso88591_K7VV___5_3aq_AQ_1D_7 __pyx_string_tab[1173]
#define __pyx_kp_b_iso88591_Q __pyx_string_tab[1174]
#define __pyx_kp_b_iso88591_Q_2Rr_Bc_Q_1_Jat_Q_2S_A_q __pyx_string_tab[1175]
#define __pyx_kp_b_iso88591_Q_4G1_V3awm1_4_at1 __pyx_string_tab[1176]
#define __pyx_kp_b_iso88591_Q_4q __pyx_string_tab[1177]
#define __pyx_kp_b_iso88591_Q_4z_4_1D __pyx_string_tab[1178]
#define __pyx_kp_b_iso88591_Q_6 __pyx_string_tab[1179]
#define __pyx_kp_b_iso88591_Q_9Cs_1_AQ_at_a __pyx_string_tab[1180]
#define __pyx_kp_b_iso88591_Q_AT_5 __pyx_string_tab[1181]
#define __pyx_kp_b_iso88591_Q_Qd_5T_A __pyx_string_tab[1182]
#define __pyx_kp_b_iso88591_Q_a __pyx_string_tab[1183]
#define __pyx_kp_b_iso88591_Qd_Q __pyx_string_tab[1184]
#define __pyx_kp_b_iso88591_Qe_a __pyx_string_tab[1185]
#define __pyx_kp_b_iso88591_V1_1_Q_6_1 __pyx_string_tab[1186]
#define __pyx_kp_b_iso88591_WA_Qd_WHCqPYYZZ_wm1 __pyx_string_tab[1187]
#define __pyx_kp_b_iso88591_XQ_1D_5_1_q_q_q_q_q_1 __pyx_string_tab[1188]
#define __pyx_kp_b_iso88591_XQ_4_aq __pyx_string_tab[1189]
#define __pyx_kp_b_iso88591_XQ_AT1DD_ST __pyx_string_tab[1190]
#define __pyx_kp_b_iso88591_XQ_IWA_C1G1_Q_0_fCq_a_Q_U_1_q_1 __pyx_string_tab[1191]
#define __pyx_kp_b_iso88591_XQ_IWA_C1G1_Q_fCq_k_a_U_1_q_2_H __pyx_string_tab[1192]
#define __pyx_kp_b_iso88591_Ya_vQha __pyx_string_tab[1193]
#define __pyx_kp_b_iso88591_ZuA_4_1D __pyx_string_tab[1194]
#define __pyx_kp_b_iso88591_Zwa_4_1D __pyx_string_tab[1195]
#define __pyx_kp_b_iso88591__12 __pyx_string_tab[1196]
#define __pyx_kp_b_iso88591__13 __pyx_string_tab[1197]
#define __pyx_kp_b_iso88591_a_1_1_QgQ_A_Cq_q_Rq_ixvQ_r_6_WA __pyx_string_tab[1198]
#define __pyx_kp_b_iso88591_a_4q __pyx_string_tab[1199]
#define __pyx_kp_b_iso88591_a_4q_2 __pyx_string_tab[1200]
#define __pyx_kp_b_iso88591_a_AT_A __pyx_string_tab[1201]
#define __pyx_kp_b_iso88591_a_Cq_Kq_A_q __pyx_string_tab[1202]
#define __pyx_kp_b_iso88591_a_E_a_2_3EQgQ __pyx_string_tab[1203]
#define __pyx_kp_b_iso88591_a_Q __pyx_string_tab[1204]
#define __pyx_kp_b_iso88591_a_Q_y_1_l_1_y __pyx_string_tab[1205]
#define __pyx_kp_b_iso88591_a_Qd_E __pyx_string_tab[1206]
#define __pyx_kp_b_iso88591_a_WA_ay_Qd_U __pyx_string_tab[1207]
#define __pyx_kp_b_iso88591_at_a_9AQ __pyx_string_tab[1208]
#define __pyx_kp_b_iso88591_b_Q_q_81A_xwa_Qiq_d_1_4r __pyx_string_tab[1209]
#define __pyx_kp_b_iso88591_gQ_gQ_7_0_5H __pyx_string_tab[1210]
#define __pyx_kp_b_iso88591_gQ_gQ_7_q_4Faq __pyx_string_tab[1211]
#define __pyx_kp_b_iso88591_ha_4_1A __pyx_string_tab[1212]
#define __pyx_kp_b_iso88591_ha_AT_E_Qa_q_6_a __pyx_string_tab[1213]
#define __pyx_kp_b_iso88591_ha_q_T __pyx_string_tab[1214]
#define __pyx_kp_b_iso88591_k_2 __pyx_string_tab[1215]
#define __pyx_kp_b_iso88591_k_Zq_1Cwa_0_D_81 __pyx_string_tab[1216]
#define __pyx_kp_b_iso88591_nA_4_Q __pyx_string_tab[1217]
#define __pyx_kp_b_iso88591_nL_4_a __pyx_string_tab[1218]
#define __pyx_kp_b_iso88591_q __pyx_string_tab[1219]
#define __pyx_kp_b_iso88591_q_1 __pyx_string_tab[1220]
#define __pyx_kp_b_iso88591_q_4q __pyx_string_tab[1221]
#define __pyx_kp_b_iso88591_q_4q_2 __pyx_string_tab[1222]
#define __pyx_kp_b_iso88591_q_5_3aq_AQ_fCq_k_a_U_1_WA_A_SS __pyx_string_tab[1223]
#define __pyx_kp_b_iso88591_q_S_A_6I_q_6I_q_1K7K6QR_q_SSYYZ __pyx_string_tab[1224]
#define __pyx_kp_b_iso88591_q_q_81_q_gQ_WA_1D_q __pyx_string_tab[1225]
#define __pyx_kp_b_iso88591_q_q_Je1_4_1D __pyx_string_tab[1226]
#define __pyx_kp_b_iso88591_q_y_1_1_1 __pyx_string_tab[1227]
#define __pyx_kp_b_iso88591_r_A_A_4z_4_1D __pyx_string_tab[1228]
#define __pyx_kp_b_iso88591_s_1_q_Rq_4q_F_IQj_a_WA_2_9A_Qe1 __pyx_string_tab[1229]
#define __pyx_kp_b_iso88591_t5 __pyx_string_tab[1230]
#define __pyx_kp_b_iso88591_vV1_Cwa_1_1_oS_1_A_U_1_q_A_AU_G __pyx_string_tab[1231]
#define __pyx_kp_b_iso88591_wa_1D_7_QiWXXY_wm1 __pyx_string_tab[1232]
#define __pyx_kp_b_iso88591_xq_4 __pyx_string_tab[1233]
#define __pyx_kp_b_iso88591_xq_G4xt6_Q __pyx_string_tab[1234]
#define __pyx_kp_b_iso88591_xq_at_U __pyx_string_tab[1235]
#define __pyx_kp_b_iso88591_xq_t1_1_l_Q_6_a_U_1_gQe9AXQa_Q __pyx_string_tab[1236]
#define __pyx_int_0 __pyx_number_tab[0]
#define __pyx_int_neg_1 __pyx_number_tab[1]
#define __pyx_int_1 __pyx_number_tab[2]
#define __pyx_int_16384 __pyx_number_tab[3]
#define __pyx_int_65535 __pyx_number_tab[4]
/* #### Code section: module_state_clear ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_clear(PyObject *m) {
  __pyx_mstatetype *clear_module_state = __Pyx_PyModule_GetState(m);
  if (!clear_module_state) return 0;
  Py_CLEAR(clear_module_state->__pyx_d);
  Py_CLEAR(clear_module_state->__pyx_b);
  Py_CLEAR(clear_module_state->__pyx_cython_runtime);
  Py_CLEAR(clear_module_state->__pyx_empty_tuple);
  Py_CLEAR(clear_module_state->__pyx_empty_bytes);
  Py_CLEAR(clear_module_state->__pyx_empty_unicode);
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __Pyx_State_RemoveModule(NULL);
  #endif
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Set);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SetIter);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Map);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_MapIter);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Blob);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Buffer);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Face);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Font);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_HBObject);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr);
  Py_CLEAR(clear_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr);
  Py_CLEAR(clear_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr);
  Py_CLEAR(clear_module_state->__pyx_k_);
  Py_CLEAR(clear_module_state->__pyx_k__3);
  Py_CLEAR(clear_module_state->__pyx_k__6);
  Py_CLEAR(clear_module_state->__pyx_k__7);
  for (int i=0; i<7; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
  for (int i=0; i<245; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<1237; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<5; ++i) { Py_CLEAR(clear_module_state->__pyx_number_tab[i]); }
/* #### Code section: module_state_clear_contents ### */
/* CommonTypesMetaclass.module_state_clear */
Py_CLEAR(clear_module_state->__pyx_CommonTypesMetaclassType);

/* CythonFunctionShared.module_state_clear */
Py_CLEAR(clear_module_state->__pyx_CyFunctionType);

/* Generator.module_state_clear */
Py_CLEAR(clear_module_state->__pyx_GeneratorType);

/* #### Code section: module_state_clear_end ### */
return 0;
}
#endif
/* #### Code section: module_state_traverse ### */
#if CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
  __pyx_mstatetype *traverse_module_state = __Pyx_PyModule_GetState(m);
  if (!traverse_module_state) return 0;
  Py_VISIT(traverse_module_state->__pyx_d);
  Py_VISIT(traverse_module_state->__pyx_b);
  Py_VISIT(traverse_module_state->__pyx_cython_runtime);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_tuple);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_bytes);
  __Pyx_VISIT_CONST(traverse_module_state->__pyx_empty_unicode);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Set);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SetIter);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Map);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_MapIter);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Blob);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Buffer);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Face);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_Font);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_HBObject);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr);
  Py_VISIT(traverse_module_state->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr);
  Py_VISIT(traverse_module_state->__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr);
  Py_VISIT(traverse_module_state->__pyx_k_);
  Py_VISIT(traverse_module_state->__pyx_k__3);
  Py_VISIT(traverse_module_state->__pyx_k__6);
  Py_VISIT(traverse_module_state->__pyx_k__7);
  for (int i=0; i<7; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
  for (int i=0; i<245; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<1237; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<5; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_number_tab[i]); }
/* #### Code section: module_state_traverse_contents ### */
/* CommonTypesMetaclass.module_state_traverse */
Py_VISIT(traverse_module_state->__pyx_CommonTypesMetaclassType);

/* CythonFunctionShared.module_state_traverse */
Py_VISIT(traverse_module_state->__pyx_CyFunctionType);

/* Generator.module_state_traverse */
Py_VISIT(traverse_module_state->__pyx_GeneratorType);

/* #### Code section: module_state_traverse_end ### */
return 0;
}
#endif
/* #### Code section: module_code ### */

/* "uharfbuzz/_harfbuzz.pyx":25
 * 
 * 
 * cdef int msgcallback(hb_buffer_t *buffer, hb_font_t *font, const char* message, void* userdata) noexcept:             # <<<<<<<<<<<<<<
 *     ret = (<object>userdata)(message.decode('utf-8'))
 *     if ret is None:
*/

static int __pyx_f_9uharfbuzz_9_harfbuzz_msgcallback(CYTHON_UNUSED hb_buffer_t *__pyx_v_buffer, CYTHON_UNUSED hb_font_t *__pyx_v_font, char const *__pyx_v_message, void *__pyx_v_userdata) {
  PyObject *__pyx_v_ret = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  Py_ssize_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("msgcallback", 0);

  /* "uharfbuzz/_harfbuzz.pyx":26
 * 
 * cdef int msgcallback(hb_buffer_t *buffer, hb_font_t *font, const char* message, void* userdata) noexcept:
 *     ret = (<object>userdata)(message.decode('utf-8'))             # <<<<<<<<<<<<<<
 *     if ret is None:
 *         return 1
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)__pyx_v_userdata));
  __pyx_t_3 = ((PyObject *)__pyx_v_userdata); 
  __pyx_t_4 = __Pyx_ssize_strlen(__pyx_v_message); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 26, __pyx_L1_error)
  __pyx_t_5 = __Pyx_decode_c_string(__pyx_v_message, 0, __pyx_t_4, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 26, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_ret = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":27
 * cdef int msgcallback(hb_buffer_t *buffer, hb_font_t *font, const char* message, void* userdata) noexcept:
 *     ret = (<object>userdata)(message.decode('utf-8'))
 *     if ret is None:             # <<<<<<<<<<<<<<
 *         return 1
 *     return ret
*/
  __pyx_t_7 = (__pyx_v_ret == Py_None);
  if (__pyx_t_7) {

    /* "uharfbuzz/_harfbuzz.pyx":28
 *     ret = (<object>userdata)(message.decode('utf-8'))
 *     if ret is None:
 *         return 1             # <<<<<<<<<<<<<<
 *     return ret
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "uharfbuzz/_harfbuzz.pyx":27
 * cdef int msgcallback(hb_buffer_t *buffer, hb_font_t *font, const char* message, void* userdata) noexcept:
 *     ret = (<object>userdata)(message.decode('utf-8'))
 *     if ret is None:             # <<<<<<<<<<<<<<
 *         return 1
 *     return ret
*/
  }

  /* "uharfbuzz/_harfbuzz.pyx":29
 *     if ret is None:
 *         return 1
 *     return ret             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_v_ret); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 29, __pyx_L1_error)
  __pyx_r = __pyx_t_8;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":25
 * 
 * 
 * cdef int msgcallback(hb_buffer_t *buffer, hb_font_t *font, const char* message, void* userdata) noexcept:             # <<<<<<<<<<<<<<
 *     ret = (<object>userdata)(message.decode('utf-8'))
 *     if ret is None:
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz.msgcallback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":32
 * 
 * 
 * def version_string() -> str:             # <<<<<<<<<<<<<<
 *     cdef const char* cstr = hb_version_string()
 *     cdef bytes packed = cstr
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_1version_string(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_1version_string = {"version_string", (PyCFunction)__pyx_pw_9uharfbuzz_9_harfbuzz_1version_string, METH_NOARGS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_1version_string(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("version_string (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_version_string(__pyx_self);

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_version_string(CYTHON_UNUSED PyObject *__pyx_self) {
  char const *__pyx_v_cstr;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("version_string", 0);

  /* "uharfbuzz/_harfbuzz.pyx":33
 * 
 * def version_string() -> str:
 *     cdef const char* cstr = hb_version_string()             # <<<<<<<<<<<<<<
 *     cdef bytes packed = cstr
 *     return packed.decode()
*/
  __pyx_v_cstr = hb_version_string();

  /* "uharfbuzz/_harfbuzz.pyx":34
 * def version_string() -> str:
 *     cdef const char* cstr = hb_version_string()
 *     cdef bytes packed = cstr             # <<<<<<<<<<<<<<
 *     return packed.decode()
 * 
*/
  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":35
 *     cdef const char* cstr = hb_version_string()
 *     cdef bytes packed = cstr
 *     return packed.decode()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":32
 * 
 * 
 * def version_string() -> str:             # <<<<<<<<<<<<<<
 *     cdef const char* cstr = hb_version_string()
 *     cdef bytes packed = cstr
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.version_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3deprecated(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_9uharfbuzz_9_harfbuzz_2deprecated, "Decorator to raise a warning when a deprecated function is called.");
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3deprecated = {"deprecated", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3deprecated, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9uharfbuzz_9_harfbuzz_2deprecated};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3deprecated(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_replacement = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("deprecated (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_replacement,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 41, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 41, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "deprecated", 0) < (0)) __PYX_ERR(0, 41, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 41, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_replacement = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("deprecated", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 41, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.deprecated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_2deprecated(__pyx_self, __pyx_v_replacement);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":44
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
 *     def decorator(func):             # <<<<<<<<<<<<<<
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_1decorator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10deprecated_1decorator = {"decorator", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_1decorator, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_1decorator(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("decorator (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 44, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 44, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "decorator", 0) < (0)) __PYX_ERR(0, 44, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("decorator", 1, 1, 1, i); __PYX_ERR(0, 44, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 44, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("decorator", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 44, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.deprecated.decorator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_decorator(__pyx_self, __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":45
 * 
 *     def decorator(func):
 *         @wraps(func)             # <<<<<<<<<<<<<<
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_1wrapper = {"wrapper", (PyCFunction)(void(*)(void))(PyCFunctionWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_1wrapper, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_1wrapper(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_args = 0;
  PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("wrapper (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (__pyx_kwds_len > 0) {
    if (unlikely(__Pyx_CheckKeywordStrings("wrapper", __pyx_kwds) == -1)) return NULL;
    __pyx_v_kwargs = __Pyx_KwargsAsDict_VARARGS(__pyx_kwds, __pyx_kwvalues);
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  } else {
    __pyx_v_kwargs = PyDict_New();
    if (unlikely(!__pyx_v_kwargs)) return NULL;
    __Pyx_GOTREF(__pyx_v_kwargs);
  }
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_wrapper(__pyx_self, __pyx_v_args, __pyx_v_kwargs);

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_wrapper(PyObject *__pyx_self, PyObject *__pyx_v_args, PyObject *__pyx_v_kwargs) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *__pyx_cur_scope;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *__pyx_outer_scope;
  PyObject *__pyx_v_message = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4[3];
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("wrapper", 0);
  __pyx_outer_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __pyx_cur_scope = __pyx_outer_scope;

  /* "uharfbuzz/_harfbuzz.pyx":47
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"             # <<<<<<<<<<<<<<
 *             if replacement:
 *                 message += f", use {replacement} instead"
*/
  if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); __PYX_ERR(0, 47, __pyx_L1_error) }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_func, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_t_1), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_is_deprecated); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_message = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":48
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"
 *             if replacement:             # <<<<<<<<<<<<<<
 *                 message += f", use {replacement} instead"
 *             if message not in WARNED:
*/
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_replacement)) { __Pyx_RaiseClosureNameError("replacement"); __PYX_ERR(0, 48, __pyx_L1_error) }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_replacement); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 48, __pyx_L1_error)
  if (__pyx_t_3) {

    /* "uharfbuzz/_harfbuzz.pyx":49
 *             message = f"{func.__name__!r} is deprecated"
 *             if replacement:
 *                 message += f", use {replacement} instead"             # <<<<<<<<<<<<<<
 *             if message not in WARNED:
 *                 warnings.warn(message, DeprecationWarning)
*/
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_replacement)) { __Pyx_RaiseClosureNameError("replacement"); __PYX_ERR(0, 49, __pyx_L1_error) }
    __pyx_t_1 = __Pyx_PyObject_FormatSimple(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_replacement, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_use;
    __pyx_t_4[1] = __pyx_t_1;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_instead;
    __pyx_t_2 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 6 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 8, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlace(__pyx_v_message, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_message, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "uharfbuzz/_harfbuzz.pyx":48
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"
 *             if replacement:             # <<<<<<<<<<<<<<
 *                 message += f", use {replacement} instead"
 *             if message not in WARNED:
*/
  }

  /* "uharfbuzz/_harfbuzz.pyx":50
 *             if replacement:
 *                 message += f", use {replacement} instead"
 *             if message not in WARNED:             # <<<<<<<<<<<<<<
 *                 warnings.warn(message, DeprecationWarning)
 *                 WARNED.add(message)
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_WARNED); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_message, __pyx_t_1, Py_NE)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "uharfbuzz/_harfbuzz.pyx":51
 *                 message += f", use {replacement} instead"
 *             if message not in WARNED:
 *                 warnings.warn(message, DeprecationWarning)             # <<<<<<<<<<<<<<
 *                 WARNED.add(message)
 *             return func(*args, **kwargs)
*/
    __pyx_t_2 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_warnings); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_warn); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 51, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_6))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_6);
      assert(__pyx_t_2);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_message, ((PyObject *)(((PyTypeObject*)PyExc_DeprecationWarning)))};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (3-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "uharfbuzz/_harfbuzz.pyx":52
 *             if message not in WARNED:
 *                 warnings.warn(message, DeprecationWarning)
 *                 WARNED.add(message)             # <<<<<<<<<<<<<<
 *             return func(*args, **kwargs)
 * 
*/
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WARNED); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_add); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 52, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_7 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_message};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 52, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "uharfbuzz/_harfbuzz.pyx":50
 *             if replacement:
 *                 message += f", use {replacement} instead"
 *             if message not in WARNED:             # <<<<<<<<<<<<<<
 *                 warnings.warn(message, DeprecationWarning)
 *                 WARNED.add(message)
*/
  }

  /* "uharfbuzz/_harfbuzz.pyx":53
 *                 warnings.warn(message, DeprecationWarning)
 *                 WARNED.add(message)
 *             return func(*args, **kwargs)             # <<<<<<<<<<<<<<
 * 
 *         return wrapper
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_v_func)) { __Pyx_RaiseClosureNameError("func"); __PYX_ERR(0, 53, __pyx_L1_error) }
  __pyx_t_1 = PyDict_Copy(__pyx_v_kwargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_func, __pyx_v_args, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":45
 * 
 *     def decorator(func):
 *         @wraps(func)             # <<<<<<<<<<<<<<
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.deprecated.decorator.wrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_message);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":44
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
 *     def decorator(func):             # <<<<<<<<<<<<<<
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10deprecated_decorator(PyObject *__pyx_self, PyObject *__pyx_v_func) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *__pyx_cur_scope;
  PyObject *__pyx_v_wrapper = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("decorator", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 44, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *) __Pyx_CyFunction_GetClosure(__pyx_self);
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_outer_scope);
  __pyx_cur_scope->__pyx_v_func = __pyx_v_func;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_func);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_func);

  /* "uharfbuzz/_harfbuzz.pyx":45
 * 
 *     def decorator(func):
 *         @wraps(func)             # <<<<<<<<<<<<<<
 *         def wrapper(*args, **kwargs):
 *             message = f"{func.__name__!r} is deprecated"
*/
  __pyx_t_2 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_wraps); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_cur_scope->__pyx_v_func};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10deprecated_9decorator_1wrapper, 0, __pyx_mstate_global->__pyx_n_u_deprecated_locals_decorator_loca, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_wrapper = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":55
 *             return func(*args, **kwargs)
 * 
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     return decorator
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":44
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
 *     def decorator(func):             # <<<<<<<<<<<<<<
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.deprecated.decorator", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_wrapper);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_2deprecated(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_replacement) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *__pyx_cur_scope;
  PyObject *__pyx_v_decorator = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("deprecated", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 41, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_replacement = __pyx_v_replacement;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_replacement);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_replacement);

  /* "uharfbuzz/_harfbuzz.pyx":44
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
 *     def decorator(func):             # <<<<<<<<<<<<<<
 *         @wraps(func)
 *         def wrapper(*args, **kwargs):
*/
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10deprecated_1decorator, 0, __pyx_mstate_global->__pyx_n_u_deprecated_locals_decorator, ((PyObject*)__pyx_cur_scope), __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_decorator = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":57
 *         return wrapper
 * 
 *     return decorator             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_decorator);
  __pyx_r = __pyx_v_decorator;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.deprecated", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_decorator);
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":6
 *     INVALID_VALUE = HB_SET_VALUE_INVALID
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self._hb_set = NULL
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (__pyx_kwds_len > 0) {
    if (unlikely(__Pyx_CheckKeywordStrings("__cinit__", __pyx_kwds) == -1)) return -1;
  }
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  int __pyx_r;

  /* "src/uharfbuzz/_set.pxi":7
 * 
 *     def __cinit__(self, *args, **kwargs):
 *         self._hb_set = NULL             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, init = set()):
*/
  __pyx_v_self->_hb_set = NULL;

  /* "src/uharfbuzz/_set.pxi":6
 *     INVALID_VALUE = HB_SET_VALUE_INVALID
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self._hb_set = NULL
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":9
 *         self._hb_set = NULL
 * 
 *     def __init__(self, init = set()):             # <<<<<<<<<<<<<<
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_init = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_init,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 9, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 9, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(2, 9, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k_);
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 9, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k_);
    }
    __pyx_v_init = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, __pyx_nargs); __PYX_ERR(2, 9, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_2__init__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_init);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_init) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "src/uharfbuzz/_set.pxi":10
 * 
 *     def __init__(self, init = set()):
 *         self._hb_set = hb_set_create()             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_set = hb_set_create();

  /* "src/uharfbuzz/_set.pxi":11
 *     def __init__(self, init = set()):
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":12
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *         self.set(init)
*/
    PyErr_NoMemory(); __PYX_ERR(2, 12, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":11
 *     def __init__(self, init = set()):
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":14
 *             raise MemoryError()
 * 
 *         self.set(init)             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_init};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":9
 *         self._hb_set = NULL
 * 
 *     def __init__(self, init = set()):             # <<<<<<<<<<<<<<
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":16
 *         self.set(init)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_set_destroy(self._hb_set)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_5__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_4__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {

  /* "src/uharfbuzz/_set.pxi":17
 * 
 *     def __dealloc__(self):
 *         hb_set_destroy(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  hb_set_destroy(__pyx_v_self->_hb_set);

  /* "src/uharfbuzz/_set.pxi":16
 *         self.set(init)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_set_destroy(self._hb_set)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_set.pxi":19
 *         hb_set_destroy(self._hb_set)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Set from_ptr(hb_set_t* hb_set):
 *         """Create Set from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr(hb_set_t *__pyx_v_hb_set) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_set.pxi":23
 *         """Create Set from a pointer, taking ownership of it."""
 * 
 *         cdef Set wrapper = Set.__new__(Set)             # <<<<<<<<<<<<<<
 *         wrapper._hb_set = hb_set
 *         return wrapper
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Set(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 23, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":24
 * 
 *         cdef Set wrapper = Set.__new__(Set)
 *         wrapper._hb_set = hb_set             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_hb_set = __pyx_v_hb_set;

  /* "src/uharfbuzz/_set.pxi":25
 *         cdef Set wrapper = Set.__new__(Set)
 *         wrapper._hb_set = hb_set
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def copy(self) -> Set:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":19
 *         hb_set_destroy(self._hb_set)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Set from_ptr(hb_set_t* hb_set):
 *         """Create Set from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Set:             # <<<<<<<<<<<<<<
 *         c = Set()
 *         c._hb_set = hb_set_copy(self._hb_set)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_7copy = {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("copy", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_6copy(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_6copy(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_c = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("copy", 0);

  /* "src/uharfbuzz/_set.pxi":28
 * 
 *     def copy(self) -> Set:
 *         c = Set()             # <<<<<<<<<<<<<<
 *         c._hb_set = hb_set_copy(self._hb_set)
 *         return c
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 28, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_c = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":29
 *     def copy(self) -> Set:
 *         c = Set()
 *         c._hb_set = hb_set_copy(self._hb_set)             # <<<<<<<<<<<<<<
 *         return c
 * 
*/
  __pyx_v_c->_hb_set = hb_set_copy(__pyx_v_self->_hb_set);

  /* "src/uharfbuzz/_set.pxi":30
 *         c = Set()
 *         c._hb_set = hb_set_copy(self._hb_set)
 *         return c             # <<<<<<<<<<<<<<
 * 
 *     def __copy__(self) -> Set:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_c);
  __pyx_r = __pyx_v_c;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Set:             # <<<<<<<<<<<<<<
 *         c = Set()
 *         c._hb_set = hb_set_copy(self._hb_set)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_c);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Set:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_9__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_9__copy__ = {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_9__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_9__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__copy__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__copy__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__copy__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__copy__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__copy__", 0);

  /* "src/uharfbuzz/_set.pxi":33
 * 
 *     def __copy__(self) -> Set:
 *         return self.copy()             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set))))) __PYX_ERR(2, 33, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Set:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":35
 *         return self.copy()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_set_clear(self._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_11clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_11clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_11clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_11clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_10clear(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_10clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "src/uharfbuzz/_set.pxi":36
 * 
 *     def clear(self):
 *         hb_set_clear(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self) -> bool:
*/
  hb_set_clear(__pyx_v_self->_hb_set);

  /* "src/uharfbuzz/_set.pxi":35
 *         return self.copy()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_set_clear(self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":38
 *         hb_set_clear(self._hb_set)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return not hb_set_is_empty(self._hb_set)
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_13__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_13__bool__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_12__bool__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_12__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_set.pxi":39
 * 
 *     def __bool__(self) -> bool:
 *         return not hb_set_is_empty(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def invert(self):
*/
  __pyx_r = (!(hb_set_is_empty(__pyx_v_self->_hb_set) != 0));
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":38
 *         hb_set_clear(self._hb_set)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return not hb_set_is_empty(self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":41
 *         return not hb_set_is_empty(self._hb_set)
 * 
 *     def invert(self):             # <<<<<<<<<<<<<<
 *         hb_set_invert(self._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_15invert(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_15invert = {"invert", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_15invert, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_15invert(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("invert (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("invert", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("invert", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_14invert(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_14invert(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("invert", 0);

  /* "src/uharfbuzz/_set.pxi":42
 * 
 *     def invert(self):
 *         hb_set_invert(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def is_inverted(self) -> bool:
*/
  hb_set_invert(__pyx_v_self->_hb_set);

  /* "src/uharfbuzz/_set.pxi":41
 *         return not hb_set_is_empty(self._hb_set)
 * 
 *     def invert(self):             # <<<<<<<<<<<<<<
 *         hb_set_invert(self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":44
 *         hb_set_invert(self._hb_set)
 * 
 *     def is_inverted(self) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_inverted(self._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_17is_inverted(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_17is_inverted = {"is_inverted", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_17is_inverted, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_17is_inverted(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_inverted (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("is_inverted", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("is_inverted", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_16is_inverted(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_16is_inverted(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_inverted", 0);

  /* "src/uharfbuzz/_set.pxi":45
 * 
 *     def is_inverted(self) -> bool:
 *         return hb_set_is_inverted(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def __contains__(self, c) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_set_is_inverted(__pyx_v_self->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":44
 *         hb_set_invert(self._hb_set)
 * 
 *     def is_inverted(self) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_inverted(self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.is_inverted", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":47
 *         return hb_set_is_inverted(self._hb_set)
 * 
 *     def __contains__(self, c) -> bool:             # <<<<<<<<<<<<<<
 *         if type(c) != int:
 *             return False
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_19__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_19__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_18__contains__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((PyObject *)__pyx_v_c));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_18__contains__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  hb_codepoint_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__contains__", 0);

  /* "src/uharfbuzz/_set.pxi":48
 * 
 *     def __contains__(self, c) -> bool:
 *         if type(c) != int:             # <<<<<<<<<<<<<<
 *             return False
 *         if c < 0 or c >= self.INVALID_VALUE:
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_c)), ((PyObject *)(&PyLong_Type)), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 48, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_set.pxi":49
 *     def __contains__(self, c) -> bool:
 *         if type(c) != int:
 *             return False             # <<<<<<<<<<<<<<
 *         if c < 0 or c >= self.INVALID_VALUE:
 *             return False
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_set.pxi":48
 * 
 *     def __contains__(self, c) -> bool:
 *         if type(c) != int:             # <<<<<<<<<<<<<<
 *             return False
 *         if c < 0 or c >= self.INVALID_VALUE:
*/
  }

  /* "src/uharfbuzz/_set.pxi":50
 *         if type(c) != int:
 *             return False
 *         if c < 0 or c >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return False
 *         return hb_set_has(self._hb_set, c)
*/
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_c, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 50, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_INVALID_VALUE); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_c, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(2, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_set.pxi":51
 *             return False
 *         if c < 0 or c >= self.INVALID_VALUE:
 *             return False             # <<<<<<<<<<<<<<
 *         return hb_set_has(self._hb_set, c)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_set.pxi":50
 *         if type(c) != int:
 *             return False
 *         if c < 0 or c >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return False
 *         return hb_set_has(self._hb_set, c)
*/
  }

  /* "src/uharfbuzz/_set.pxi":52
 *         if c < 0 or c >= self.INVALID_VALUE:
 *             return False
 *         return hb_set_has(self._hb_set, c)             # <<<<<<<<<<<<<<
 * 
 *     def add(self, c: int):
*/
  __pyx_t_5 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_5 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 52, __pyx_L1_error)
  __pyx_r = hb_set_has(__pyx_v_self->_hb_set, __pyx_t_5);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":47
 *         return hb_set_is_inverted(self._hb_set)
 * 
 *     def __contains__(self, c) -> bool:             # <<<<<<<<<<<<<<
 *         if type(c) != int:
 *             return False
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":54
 *         return hb_set_has(self._hb_set, c)
 * 
 *     def add(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_21add(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_21add = {"add", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_21add, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_21add(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_c = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_c,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 54, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 54, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "add", 0) < (0)) __PYX_ERR(2, 54, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add", 1, 1, 1, i); __PYX_ERR(2, 54, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 54, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "c", 0) < (0)) __PYX_ERR(2, 54, __pyx_L3_error)
    __pyx_v_c = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 54, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), (&PyLong_Type), 0, "c", 2))) __PYX_ERR(2, 54, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_20add(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_c);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_20add(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add", 0);

  /* "src/uharfbuzz/_set.pxi":55
 * 
 *     def add(self, c: int):
 *         hb_set_add(self._hb_set, c)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 55, __pyx_L1_error)
  hb_set_add(__pyx_v_self->_hb_set, __pyx_t_1);

  /* "src/uharfbuzz/_set.pxi":56
 *     def add(self, c: int):
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_set.pxi":57
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def add_range(self, first: int, last: int):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 57, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":56
 *     def add(self, c: int):
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":54
 *         return hb_set_has(self._hb_set, c)
 * 
 *     def add(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":59
 *             raise MemoryError()
 * 
 *     def add_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_23add_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_23add_range = {"add_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_23add_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_23add_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_first = 0;
  PyObject *__pyx_v_last = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_range (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_first,&__pyx_mstate_global->__pyx_n_u_last,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 59, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 59, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 59, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "add_range", 0) < (0)) __PYX_ERR(2, 59, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_range", 1, 2, 2, i); __PYX_ERR(2, 59, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 59, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 59, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "first", 0) < (0)) __PYX_ERR(2, 59, __pyx_L3_error)
    __pyx_v_first = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "last", 0) < (0)) __PYX_ERR(2, 59, __pyx_L3_error)
    __pyx_v_last = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_range", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 59, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.add_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_first), (&PyLong_Type), 0, "first", 2))) __PYX_ERR(2, 59, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_last), (&PyLong_Type), 0, "last", 2))) __PYX_ERR(2, 59, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_22add_range(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_first, __pyx_v_last);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_22add_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_last) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_range", 0);

  /* "src/uharfbuzz/_set.pxi":60
 * 
 *     def add_range(self, first: int, last: int):
 *         hb_set_add_range(self._hb_set, first, last)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_first); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 60, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_last); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 60, __pyx_L1_error)
  hb_set_add_range(__pyx_v_self->_hb_set, __pyx_t_1, __pyx_t_2);

  /* "src/uharfbuzz/_set.pxi":61
 *     def add_range(self, first: int, last: int):
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_3 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_set.pxi":62
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def remove(self, c: int):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 62, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":61
 *     def add_range(self, first: int, last: int):
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":59
 *             raise MemoryError()
 * 
 *     def add_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.add_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":64
 *             raise MemoryError()
 * 
 *     def remove(self, c: int):             # <<<<<<<<<<<<<<
 *         if not c in self:
 *             raise KeyError, c
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_25remove(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_25remove = {"remove", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_25remove, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_25remove(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_c = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("remove (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_c,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 64, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 64, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "remove", 0) < (0)) __PYX_ERR(2, 64, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove", 1, 1, 1, i); __PYX_ERR(2, 64, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 64, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "c", 0) < (0)) __PYX_ERR(2, 64, __pyx_L3_error)
    __pyx_v_c = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 64, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), (&PyLong_Type), 0, "c", 2))) __PYX_ERR(2, 64, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_24remove(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_c);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_24remove(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove", 0);

  /* "src/uharfbuzz/_set.pxi":65
 * 
 *     def remove(self, c: int):
 *         if not c in self:             # <<<<<<<<<<<<<<
 *             raise KeyError, c
 *         hb_set_del(self._hb_set, c)
*/
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_c, ((PyObject *)__pyx_v_self), Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(2, 65, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":66
 *     def remove(self, c: int):
 *         if not c in self:
 *             raise KeyError, c             # <<<<<<<<<<<<<<
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
    __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), __pyx_v_c, 0, 0);
    __PYX_ERR(2, 66, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":65
 * 
 *     def remove(self, c: int):
 *         if not c in self:             # <<<<<<<<<<<<<<
 *             raise KeyError, c
 *         hb_set_del(self._hb_set, c)
*/
  }

  /* "src/uharfbuzz/_set.pxi":67
 *         if not c in self:
 *             raise KeyError, c
 *         hb_set_del(self._hb_set, c)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 67, __pyx_L1_error)
  hb_set_del(__pyx_v_self->_hb_set, __pyx_t_2);

  /* "src/uharfbuzz/_set.pxi":68
 *             raise KeyError, c
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":69
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def discard(self, c: int):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 69, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":68
 *             raise KeyError, c
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":64
 *             raise MemoryError()
 * 
 *     def remove(self, c: int):             # <<<<<<<<<<<<<<
 *         if not c in self:
 *             raise KeyError, c
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.remove", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":71
 *             raise MemoryError()
 * 
 *     def discard(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_27discard(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_27discard = {"discard", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_27discard, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_27discard(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_c = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("discard (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_c,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 71, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 71, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "discard", 0) < (0)) __PYX_ERR(2, 71, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("discard", 1, 1, 1, i); __PYX_ERR(2, 71, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 71, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "c", 0) < (0)) __PYX_ERR(2, 71, __pyx_L3_error)
    __pyx_v_c = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("discard", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 71, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.discard", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), (&PyLong_Type), 0, "c", 2))) __PYX_ERR(2, 71, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_26discard(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_c);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_26discard(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_c) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("discard", 0);

  /* "src/uharfbuzz/_set.pxi":72
 * 
 *     def discard(self, c: int):
 *         hb_set_del(self._hb_set, c)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 72, __pyx_L1_error)
  hb_set_del(__pyx_v_self->_hb_set, __pyx_t_1);

  /* "src/uharfbuzz/_set.pxi":73
 *     def discard(self, c: int):
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_set.pxi":74
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def del_range(self, first: int, last: int):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 74, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":73
 *     def discard(self, c: int):
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":71
 *             raise MemoryError()
 * 
 *     def discard(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.discard", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":76
 *             raise MemoryError()
 * 
 *     def del_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_29del_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_29del_range = {"del_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_29del_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_29del_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_first = 0;
  PyObject *__pyx_v_last = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("del_range (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_first,&__pyx_mstate_global->__pyx_n_u_last,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 76, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "del_range", 0) < (0)) __PYX_ERR(2, 76, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("del_range", 1, 2, 2, i); __PYX_ERR(2, 76, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 76, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(2, 76, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "first", 0) < (0)) __PYX_ERR(2, 76, __pyx_L3_error)
    __pyx_v_first = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "last", 0) < (0)) __PYX_ERR(2, 76, __pyx_L3_error)
    __pyx_v_last = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("del_range", 1, 2, 2, __pyx_nargs); __PYX_ERR(2, 76, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.del_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_first), (&PyLong_Type), 0, "first", 2))) __PYX_ERR(2, 76, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_last), (&PyLong_Type), 0, "last", 2))) __PYX_ERR(2, 76, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_28del_range(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_first, __pyx_v_last);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_28del_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_first, PyObject *__pyx_v_last) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("del_range", 0);

  /* "src/uharfbuzz/_set.pxi":77
 * 
 *     def del_range(self, first: int, last: int):
 *         hb_set_del_range(self._hb_set, first, last)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_first); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 77, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_last); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 77, __pyx_L1_error)
  hb_set_del_range(__pyx_v_self->_hb_set, __pyx_t_1, __pyx_t_2);

  /* "src/uharfbuzz/_set.pxi":78
 *     def del_range(self, first: int, last: int):
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_3 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_set.pxi":79
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def _is_equal(self, other: Set) -> bool:
*/
    PyErr_NoMemory(); __PYX_ERR(2, 79, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":78
 *     def del_range(self, first: int, last: int):
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":76
 *             raise MemoryError()
 * 
 *     def del_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.del_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":81
 *             raise MemoryError()
 * 
 *     def _is_equal(self, other: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_equal(self._hb_set, other._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_31_is_equal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_31_is_equal = {"_is_equal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_31_is_equal, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_31_is_equal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_is_equal (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 81, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 81, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_is_equal", 0) < (0)) __PYX_ERR(2, 81, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_is_equal", 1, 1, 1, i); __PYX_ERR(2, 81, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 81, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_is_equal", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 81, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set._is_equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 81, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_30_is_equal(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_30_is_equal(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_is_equal", 0);

  /* "src/uharfbuzz/_set.pxi":82
 * 
 *     def _is_equal(self, other: Set) -> bool:
 *         return hb_set_is_equal(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_set_is_equal(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":81
 *             raise MemoryError()
 * 
 *     def _is_equal(self, other: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_equal(self._hb_set, other._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set._is_equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":84
 *         return hb_set_is_equal(self._hb_set, other._hb_set)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) != Set:
 *             return NotImplemented
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_33__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_33__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_32__eq__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_32__eq__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "src/uharfbuzz/_set.pxi":85
 * 
 *     def __eq__(self, other):
 *         if type(other) != Set:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 *         return self._is_equal(other)
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_other)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 85, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_set.pxi":86
 *     def __eq__(self, other):
 *         if type(other) != Set:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 *         return self._is_equal(other)
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;

    /* "src/uharfbuzz/_set.pxi":85
 * 
 *     def __eq__(self, other):
 *         if type(other) != Set:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 *         return self._is_equal(other)
*/
  }

  /* "src/uharfbuzz/_set.pxi":87
 *         if type(other) != Set:
 *             return NotImplemented
 *         return self._is_equal(other)             # <<<<<<<<<<<<<<
 * 
 *     def issubset(self, larger_set: Set) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_equal, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 87, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":84
 *         return hb_set_is_equal(self._hb_set, other._hb_set)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) != Set:
 *             return NotImplemented
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":89
 *         return self._is_equal(other)
 * 
 *     def issubset(self, larger_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_35issubset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_35issubset = {"issubset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_35issubset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_35issubset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_larger_set = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("issubset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_larger_set,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 89, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 89, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "issubset", 0) < (0)) __PYX_ERR(2, 89, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("issubset", 1, 1, 1, i); __PYX_ERR(2, 89, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 89, __pyx_L3_error)
    }
    __pyx_v_larger_set = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("issubset", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 89, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.issubset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_larger_set), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "larger_set", 0))) __PYX_ERR(2, 89, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_34issubset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_larger_set);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_34issubset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_larger_set) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("issubset", 0);

  /* "src/uharfbuzz/_set.pxi":90
 * 
 *     def issubset(self, larger_set: Set) -> bool:
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def issuperset(self, smaller_set: Set) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_set_is_subset(__pyx_v_self->_hb_set, __pyx_v_larger_set->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":89
 *         return self._is_equal(other)
 * 
 *     def issubset(self, larger_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.issubset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":92
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
 *     def issuperset(self, smaller_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_37issuperset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_37issuperset = {"issuperset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_37issuperset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_37issuperset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_smaller_set = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("issuperset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_smaller_set,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 92, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 92, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "issuperset", 0) < (0)) __PYX_ERR(2, 92, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("issuperset", 1, 1, 1, i); __PYX_ERR(2, 92, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 92, __pyx_L3_error)
    }
    __pyx_v_smaller_set = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("issuperset", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 92, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.issuperset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_smaller_set), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "smaller_set", 0))) __PYX_ERR(2, 92, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_36issuperset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_smaller_set);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_36issuperset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_smaller_set) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("issuperset", 0);

  /* "src/uharfbuzz/_set.pxi":93
 * 
 *     def issuperset(self, smaller_set: Set) -> bool:
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def _set(self, other: Set):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_set_is_subset(__pyx_v_smaller_set->_hb_set, __pyx_v_self->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":92
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
 *     def issuperset(self, smaller_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.issuperset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":95
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
 *     def _set(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_39_set(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_39_set = {"_set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_39_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_39_set(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_set (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 95, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 95, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_set", 0) < (0)) __PYX_ERR(2, 95, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_set", 1, 1, 1, i); __PYX_ERR(2, 95, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 95, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_set", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 95, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set._set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 95, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_38_set(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_38_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_set", 0);

  /* "src/uharfbuzz/_set.pxi":96
 * 
 *     def _set(self, other: Set):
 *         hb_set_set(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def set(self, other):
*/
  hb_set_set(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set);

  /* "src/uharfbuzz/_set.pxi":95
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
 *     def _set(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":98
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
 *     def set(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._set(other)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_41set(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_41set = {"set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_41set, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_41set(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 98, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 98, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set", 0) < (0)) __PYX_ERR(2, 98, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set", 1, 1, 1, i); __PYX_ERR(2, 98, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 98, __pyx_L3_error)
    }
    __pyx_v_other = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 98, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_40set(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_40set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  hb_codepoint_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set", 0);

  /* "src/uharfbuzz/_set.pxi":99
 * 
 *     def set(self, other):
 *         if type(other) == Set:             # <<<<<<<<<<<<<<
 *             self._set(other)
 *         else:
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_other)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 99, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_set.pxi":100
 *     def set(self, other):
 *         if type(other) == Set:
 *             self._set(other)             # <<<<<<<<<<<<<<
 *         else:
 *             for c in other:
*/
    __pyx_t_3 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_other};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_set_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 100, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/uharfbuzz/_set.pxi":99
 * 
 *     def set(self, other):
 *         if type(other) == Set:             # <<<<<<<<<<<<<<
 *             self._set(other)
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_set.pxi":102
 *             self._set(other)
 *         else:
 *             for c in other:             # <<<<<<<<<<<<<<
 *                 hb_set_add(self._hb_set, c)
 * 
*/
  /*else*/ {
    if (likely(PyList_CheckExact(__pyx_v_other)) || PyTuple_CheckExact(__pyx_v_other)) {
      __pyx_t_1 = __pyx_v_other; __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 102, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 102, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 102, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_5;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 102, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5));
          #else
          __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5);
          #endif
          ++__pyx_t_5;
        }
        if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 102, __pyx_L1_error)
      } else {
        __pyx_t_3 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 102, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "src/uharfbuzz/_set.pxi":103
 *         else:
 *             for c in other:
 *                 hb_set_add(self._hb_set, c)             # <<<<<<<<<<<<<<
 * 
 *         if not hb_set_allocation_successful(self._hb_set):
*/
      __pyx_t_7 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_7 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 103, __pyx_L1_error)
      hb_set_add(__pyx_v_self->_hb_set, __pyx_t_7);

      /* "src/uharfbuzz/_set.pxi":102
 *             self._set(other)
 *         else:
 *             for c in other:             # <<<<<<<<<<<<<<
 *                 hb_set_add(self._hb_set, c)
 * 
*/
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_set.pxi":105
 *                 hb_set_add(self._hb_set, c)
 * 
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_set.pxi":106
 * 
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def _update(self, other: Set):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 106, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":105
 *                 hb_set_add(self._hb_set, c)
 * 
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":98
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
 *     def set(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._set(other)
*/

  /* 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_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":108
 *             raise MemoryError()
 * 
 *     def _update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_43_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_43_update = {"_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_43_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_43_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 108, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 108, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_update", 0) < (0)) __PYX_ERR(2, 108, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_update", 1, 1, 1, i); __PYX_ERR(2, 108, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 108, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_update", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 108, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set._update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 108, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_42_update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_42_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_update", 0);

  /* "src/uharfbuzz/_set.pxi":109
 * 
 *     def _update(self, other: Set):
 *         hb_set_union(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def update(self, other):
*/
  hb_set_union(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set);

  /* "src/uharfbuzz/_set.pxi":108
 *             raise MemoryError()
 * 
 *     def _update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":111
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._update(other)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_45update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_45update = {"update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_45update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_45update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 111, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 111, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "update", 0) < (0)) __PYX_ERR(2, 111, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("update", 1, 1, 1, i); __PYX_ERR(2, 111, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 111, __pyx_L3_error)
    }
    __pyx_v_other = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 111, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_44update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_44update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  hb_codepoint_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("update", 0);

  /* "src/uharfbuzz/_set.pxi":112
 * 
 *     def update(self, other):
 *         if type(other) == Set:             # <<<<<<<<<<<<<<
 *             self._update(other)
 *         else:
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_other)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 112, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(2, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_set.pxi":113
 *     def update(self, other):
 *         if type(other) == Set:
 *             self._update(other)             # <<<<<<<<<<<<<<
 *         else:
 *             for c in other:
*/
    __pyx_t_3 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_other};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 113, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/uharfbuzz/_set.pxi":112
 * 
 *     def update(self, other):
 *         if type(other) == Set:             # <<<<<<<<<<<<<<
 *             self._update(other)
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_set.pxi":115
 *             self._update(other)
 *         else:
 *             for c in other:             # <<<<<<<<<<<<<<
 *                 hb_set_add(self._hb_set, c)
 * 
*/
  /*else*/ {
    if (likely(PyList_CheckExact(__pyx_v_other)) || PyTuple_CheckExact(__pyx_v_other)) {
      __pyx_t_1 = __pyx_v_other; __Pyx_INCREF(__pyx_t_1);
      __pyx_t_5 = 0;
      __pyx_t_6 = NULL;
    } else {
      __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 115, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_6 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 115, __pyx_L1_error)
    }
    for (;;) {
      if (likely(!__pyx_t_6)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 115, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_5, __Pyx_ReferenceSharing_OwnStrongReference);
          ++__pyx_t_5;
        } else {
          {
            Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 115, __pyx_L1_error)
            #endif
            if (__pyx_t_5 >= __pyx_temp) break;
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_3 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5));
          #else
          __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_5);
          #endif
          ++__pyx_t_5;
        }
        if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 115, __pyx_L1_error)
      } else {
        __pyx_t_3 = __pyx_t_6(__pyx_t_1);
        if (unlikely(!__pyx_t_3)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 115, __pyx_L1_error)
            PyErr_Clear();
          }
          break;
        }
      }
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_3);
      __pyx_t_3 = 0;

      /* "src/uharfbuzz/_set.pxi":116
 *         else:
 *             for c in other:
 *                 hb_set_add(self._hb_set, c)             # <<<<<<<<<<<<<<
 * 
 *         if not hb_set_allocation_successful(self._hb_set):
*/
      __pyx_t_7 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_7 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 116, __pyx_L1_error)
      hb_set_add(__pyx_v_self->_hb_set, __pyx_t_7);

      /* "src/uharfbuzz/_set.pxi":115
 *             self._update(other)
 *         else:
 *             for c in other:             # <<<<<<<<<<<<<<
 *                 hb_set_add(self._hb_set, c)
 * 
*/
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_set.pxi":118
 *                 hb_set_add(self._hb_set, c)
 * 
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_set.pxi":119
 * 
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __ior__(self, other):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 119, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":118
 *                 hb_set_add(self._hb_set, c)
 * 
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":111
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._update(other)
*/

  /* 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_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":121
 *             raise MemoryError()
 * 
 *     def __ior__(self, other):             # <<<<<<<<<<<<<<
 *         self.update(other)
 *         return self
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_47__ior__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_47__ior__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__ior__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_46__ior__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_46__ior__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__ior__", 0);

  /* "src/uharfbuzz/_set.pxi":122
 * 
 *     def __ior__(self, other):
 *         self.update(other)             # <<<<<<<<<<<<<<
 *         return self
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update_2, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":123
 *     def __ior__(self, other):
 *         self.update(other)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def intersection_update(self, other: Set):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":121
 *             raise MemoryError()
 * 
 *     def __ior__(self, other):             # <<<<<<<<<<<<<<
 *         self.update(other)
 *         return self
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__ior__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":125
 *         return self
 * 
 *     def intersection_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_49intersection_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_49intersection_update = {"intersection_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_49intersection_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_49intersection_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("intersection_update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 125, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 125, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "intersection_update", 0) < (0)) __PYX_ERR(2, 125, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("intersection_update", 1, 1, 1, i); __PYX_ERR(2, 125, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 125, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("intersection_update", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 125, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.intersection_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 125, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_48intersection_update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_48intersection_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("intersection_update", 0);

  /* "src/uharfbuzz/_set.pxi":126
 * 
 *     def intersection_update(self, other: Set):
 *         hb_set_intersect(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  hb_set_intersect(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set);

  /* "src/uharfbuzz/_set.pxi":127
 *     def intersection_update(self, other: Set):
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":128
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __iand__(self, other: Set):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 128, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":127
 *     def intersection_update(self, other: Set):
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":125
 *         return self
 * 
 *     def intersection_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.intersection_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":130
 *             raise MemoryError()
 * 
 *     def __iand__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.intersection_update(other)
 *         return self
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_51__iand__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_51__iand__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iand__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 130, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_50__iand__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_50__iand__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iand__", 0);

  /* "src/uharfbuzz/_set.pxi":131
 * 
 *     def __iand__(self, other: Set):
 *         self.intersection_update(other)             # <<<<<<<<<<<<<<
 *         return self
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_other)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_intersection_update, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 131, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":132
 *     def __iand__(self, other: Set):
 *         self.intersection_update(other)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def difference_update(self, other: Set):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":130
 *             raise MemoryError()
 * 
 *     def __iand__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.intersection_update(other)
 *         return self
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__iand__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":134
 *         return self
 * 
 *     def difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_53difference_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_53difference_update = {"difference_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_53difference_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_53difference_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("difference_update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 134, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 134, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "difference_update", 0) < (0)) __PYX_ERR(2, 134, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("difference_update", 1, 1, 1, i); __PYX_ERR(2, 134, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 134, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("difference_update", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 134, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.difference_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 134, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_52difference_update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_52difference_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("difference_update", 0);

  /* "src/uharfbuzz/_set.pxi":135
 * 
 *     def difference_update(self, other: Set):
 *         hb_set_subtract(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  hb_set_subtract(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set);

  /* "src/uharfbuzz/_set.pxi":136
 *     def difference_update(self, other: Set):
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":137
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __isub__(self, other: Set):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 137, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":136
 *     def difference_update(self, other: Set):
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":134
 *         return self
 * 
 *     def difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.difference_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":139
 *             raise MemoryError()
 * 
 *     def __isub__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.difference_update(other)
 *         return self
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_55__isub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_55__isub__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__isub__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 139, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_54__isub__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_54__isub__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__isub__", 0);

  /* "src/uharfbuzz/_set.pxi":140
 * 
 *     def __isub__(self, other: Set):
 *         self.difference_update(other)             # <<<<<<<<<<<<<<
 *         return self
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_other)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_difference_update, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 140, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":141
 *     def __isub__(self, other: Set):
 *         self.difference_update(other)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def symmetric_difference_update(self, other: Set):
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":139
 *             raise MemoryError()
 * 
 *     def __isub__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.difference_update(other)
 *         return self
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__isub__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":143
 *         return self
 * 
 *     def symmetric_difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update = {"symmetric_difference_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("symmetric_difference_update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 143, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 143, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "symmetric_difference_update", 0) < (0)) __PYX_ERR(2, 143, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("symmetric_difference_update", 1, 1, 1, i); __PYX_ERR(2, 143, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 143, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("symmetric_difference_update", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 143, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.symmetric_difference_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 143, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_56symmetric_difference_update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_56symmetric_difference_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("symmetric_difference_update", 0);

  /* "src/uharfbuzz/_set.pxi":144
 * 
 *     def symmetric_difference_update(self, other: Set):
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)             # <<<<<<<<<<<<<<
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()
*/
  hb_set_symmetric_difference(__pyx_v_self->_hb_set, __pyx_v_other->_hb_set);

  /* "src/uharfbuzz/_set.pxi":145
 *     def symmetric_difference_update(self, other: Set):
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_set_allocation_successful(__pyx_v_self->_hb_set) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":146
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __ixor__(self, other: Set):
*/
    PyErr_NoMemory(); __PYX_ERR(2, 146, __pyx_L1_error)

    /* "src/uharfbuzz/_set.pxi":145
 *     def symmetric_difference_update(self, other: Set):
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_set.pxi":143
 *         return self
 * 
 *     def symmetric_difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.symmetric_difference_update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":148
 *             raise MemoryError()
 * 
 *     def __ixor__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.symmetric_difference_update(other)
 *         return self
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_59__ixor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_59__ixor__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__ixor__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "other", 0))) __PYX_ERR(2, 148, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_58__ixor__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_other));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_58__ixor__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__ixor__", 0);

  /* "src/uharfbuzz/_set.pxi":149
 * 
 *     def __ixor__(self, other: Set):
 *         self.symmetric_difference_update(other)             # <<<<<<<<<<<<<<
 *         return self
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_other)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_symmetric_difference_update, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":150
 *     def __ixor__(self, other: Set):
 *         self.symmetric_difference_update(other)
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":148
 *             raise MemoryError()
 * 
 *     def __ixor__(self, other: Set):             # <<<<<<<<<<<<<<
 *         self.symmetric_difference_update(other)
 *         return self
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__ixor__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":152
 *         return self
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_set_get_population(self._hb_set)
 * 
*/

/* Python wrapper */
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_60__len__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_60__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  Py_ssize_t __pyx_r;

  /* "src/uharfbuzz/_set.pxi":153
 * 
 *     def __len__(self) -> int:
 *         return hb_set_get_population(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_r = hb_set_get_population(__pyx_v_self->_hb_set);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":152
 *         return self
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_set_get_population(self._hb_set)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":155
 *         return hb_set_get_population(self._hb_set)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def min(self) -> int:
 *         return hb_set_get_min(self._hb_set)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3min_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3min_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3min___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3min___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_set.pxi":157
 *     @property
 *     def min(self) -> int:
 *         return hb_set_get_min(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(hb_set_get_min(__pyx_v_self->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":155
 *         return hb_set_get_population(self._hb_set)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def min(self) -> int:
 *         return hb_set_get_min(self._hb_set)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.min.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":159
 *         return hb_set_get_min(self._hb_set)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max(self) -> int:
 *         return hb_set_get_max(self._hb_set)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3max_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3max_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3max___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_3max___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_set.pxi":161
 *     @property
 *     def max(self) -> int:
 *         return hb_set_get_max(self._hb_set)             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(hb_set_get_max(__pyx_v_self->_hb_set)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 161, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":159
 *         return hb_set_get_min(self._hb_set)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def max(self) -> int:
 *         return hb_set_get_max(self._hb_set)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.max.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":163
 *         return hb_set_get_max(self._hb_set)
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return SetIter(self)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_63__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_63__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_62__iter__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_62__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "src/uharfbuzz/_set.pxi":164
 * 
 *     def __iter__(self):
 *         return SetIter(self)             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 164, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":163
 *         return hb_set_get_max(self._hb_set)
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return SetIter(self)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":166
 *         return SetIter(self)
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         if self.is_inverted():
 *             return "Set({...})"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_65__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_65__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_64__repr__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Set_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "src/uharfbuzz/_set.pxi":169
 *         if self.is_inverted():
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)             # <<<<<<<<<<<<<<
 *         return ("Set({%s})" % s)
 * 
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__repr___genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(2, 169, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9uharfbuzz_9_harfbuzz_3Set_8__repr___2generator, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_repr___locals_genexpr, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz); if (unlikely(!gen)) __PYX_ERR(2, 169, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Set_8__repr___2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *(*__pyx_t_3)(PyObject *);
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(2, 169, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(2, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(2, 169, __pyx_L1_error) }
  if (likely(PyList_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0))) || PyTuple_CheckExact(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0))) {
    __pyx_t_1 = ((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0); __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = 0;
    __pyx_t_3 = NULL;
  } else {
    __pyx_t_2 = -1; __pyx_t_1 = PyObject_GetIter(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 169, __pyx_L1_error)
  }
  for (;;) {
    if (likely(!__pyx_t_3)) {
      if (likely(PyList_CheckExact(__pyx_t_1))) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 169, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_2, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_2;
      } else {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_1);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(2, 169, __pyx_L1_error)
          #endif
          if (__pyx_t_2 >= __pyx_temp) break;
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2));
        #else
        __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_2);
        #endif
        ++__pyx_t_2;
      }
      if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 169, __pyx_L1_error)
    } else {
      __pyx_t_4 = __pyx_t_3(__pyx_t_1);
      if (unlikely(!__pyx_t_4)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(2, 169, __pyx_L1_error)
          PyErr_Clear();
        }
        break;
      }
    }
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __pyx_t_4 = PyObject_Repr(__pyx_cur_scope->__pyx_v_v); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_4))) __PYX_ERR(2, 169, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":166
 *         return SetIter(self)
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         if self.is_inverted():
 *             return "Set({...})"
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_64__repr__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Set_8__repr___2generator = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "src/uharfbuzz/_set.pxi":167
 * 
 *     def __repr__(self):
 *         if self.is_inverted():             # <<<<<<<<<<<<<<
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_inverted, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 167, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(2, 167, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {

    /* "src/uharfbuzz/_set.pxi":168
 *     def __repr__(self):
 *         if self.is_inverted():
 *             return "Set({...})"             # <<<<<<<<<<<<<<
 *         s = ', '.join(repr(v) for v in self)
 *         return ("Set({%s})" % s)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Set);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_Set;
    goto __pyx_L0;

    /* "src/uharfbuzz/_set.pxi":167
 * 
 *     def __repr__(self):
 *         if self.is_inverted():             # <<<<<<<<<<<<<<
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)
*/
  }

  /* "src/uharfbuzz/_set.pxi":169
 *         if self.is_inverted():
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)             # <<<<<<<<<<<<<<
 *         return ("Set({%s})" % s)
 * 
*/
  __pyx_t_1 = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_8__repr___genexpr(NULL, __pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_Generator_GetInlinedResult(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__2, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 169, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_s = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_set.pxi":170
 *             return "Set({...})"
 *         s = ', '.join(repr(v) for v in self)
 *         return ("Set({%s})" % s)             # <<<<<<<<<<<<<<
 * 
 * cdef class SetIter:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Set_s, __pyx_v_s); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":166
 *         return SetIter(self)
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         if self.is_inverted():
 *             return "Set({...})"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_gb_9uharfbuzz_9_harfbuzz_3Set_8__repr___2generator);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_66__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_66__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Set_68__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Set_68__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Set.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":177
 *     cdef hb_codepoint_t _c
 * 
 *     def __cinit__(self, s: Set):             # <<<<<<<<<<<<<<
 *         self.s = s
 *         self._hb_set = s._hb_set
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_s,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(2, 177, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 177, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(2, 177, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(2, 177, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(2, 177, __pyx_L3_error)
    }
    __pyx_v_s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(2, 177, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_s), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, 0, "s", 0))) __PYX_ERR(2, 177, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)__pyx_v_self), __pyx_v_s);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  hb_set_t *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  hb_codepoint_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "src/uharfbuzz/_set.pxi":178
 * 
 *     def __cinit__(self, s: Set):
 *         self.s = s             # <<<<<<<<<<<<<<
 *         self._hb_set = s._hb_set
 *         self._c = s.INVALID_VALUE
*/
  __Pyx_INCREF((PyObject *)__pyx_v_s);
  __Pyx_GIVEREF((PyObject *)__pyx_v_s);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->s);
  __Pyx_DECREF((PyObject *)__pyx_v_self->s);
  __pyx_v_self->s = __pyx_v_s;

  /* "src/uharfbuzz/_set.pxi":179
 *     def __cinit__(self, s: Set):
 *         self.s = s
 *         self._hb_set = s._hb_set             # <<<<<<<<<<<<<<
 *         self._c = s.INVALID_VALUE
 * 
*/
  __pyx_t_1 = __pyx_v_s->_hb_set;
  __pyx_v_self->_hb_set = __pyx_t_1;

  /* "src/uharfbuzz/_set.pxi":180
 *         self.s = s
 *         self._hb_set = s._hb_set
 *         self._c = s.INVALID_VALUE             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_s), __pyx_mstate_global->__pyx_n_u_INVALID_VALUE); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_t_2); if (unlikely((__pyx_t_3 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(2, 180, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_self->_c = __pyx_t_3;

  /* "src/uharfbuzz/_set.pxi":177
 *     cdef hb_codepoint_t _c
 * 
 *     def __cinit__(self, s: Set):             # <<<<<<<<<<<<<<
 *         self.s = s
 *         self._hb_set = s._hb_set
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_set.pxi":182
 *         self._c = s.INVALID_VALUE
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_3__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_2__iter__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_2__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "src/uharfbuzz/_set.pxi":183
 * 
 *     def __iter__(self):
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __next__(self) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":182
 *         self._c = s.INVALID_VALUE
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

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

/* "src/uharfbuzz/_set.pxi":185
 *         return self
 * 
 *     def __next__(self) -> int:             # <<<<<<<<<<<<<<
 *         ret = hb_set_next(self._hb_set, &self._c)
 *         if not ret:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_4__next__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_4__next__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self) {
  hb_bool_t __pyx_v_ret;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_error_without_exception = 0; /* StopIteration */
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__next__", 0);

  /* "src/uharfbuzz/_set.pxi":186
 * 
 *     def __next__(self) -> int:
 *         ret = hb_set_next(self._hb_set, &self._c)             # <<<<<<<<<<<<<<
 *         if not ret:
 *             raise StopIteration
*/
  __pyx_v_ret = hb_set_next(__pyx_v_self->_hb_set, (&__pyx_v_self->_c));

  /* "src/uharfbuzz/_set.pxi":187
 *     def __next__(self) -> int:
 *         ret = hb_set_next(self._hb_set, &self._c)
 *         if not ret:             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return self._c
*/
  __pyx_t_1 = (!(__pyx_v_ret != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_set.pxi":188
 *         ret = hb_set_next(self._hb_set, &self._c)
 *         if not ret:
 *             raise StopIteration             # <<<<<<<<<<<<<<
 *         return self._c
*/
    __pyx_error_without_exception = 1;
    goto __pyx_L1_error;;

    /* "src/uharfbuzz/_set.pxi":187
 *     def __next__(self) -> int:
 *         ret = hb_set_next(self._hb_set, &self._c)
 *         if not ret:             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return self._c
*/
  }

  /* "src/uharfbuzz/_set.pxi":189
 *         if not ret:
 *             raise StopIteration
 *         return self._c             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_self->_c); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_set.pxi":185
 *         return self
 * 
 *     def __next__(self) -> int:             # <<<<<<<<<<<<<<
 *         ret = hb_set_next(self._hb_set, &self._c)
 *         if not ret:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  if (!__pyx_error_without_exception) {
    __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_6__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_8__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7SetIter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SetIter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":6
 *     INVALID_VALUE = HB_MAP_VALUE_INVALID
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self._hb_map = NULL
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED PyObject *__pyx_v_args = 0;
  CYTHON_UNUSED PyObject *__pyx_v_kwargs = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (__pyx_kwds_len > 0) {
    if (unlikely(__Pyx_CheckKeywordStrings("__cinit__", __pyx_kwds) == -1)) return -1;
  }
  __Pyx_INCREF(__pyx_args);
  __pyx_v_args = __pyx_args;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_args, __pyx_v_kwargs);

  /* function exit code */
  __Pyx_DECREF(__pyx_v_args);
  __Pyx_XDECREF(__pyx_v_kwargs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_args, CYTHON_UNUSED PyObject *__pyx_v_kwargs) {
  int __pyx_r;

  /* "src/uharfbuzz/_map.pxi":7
 * 
 *     def __cinit__(self, *args, **kwargs):
 *         self._hb_map = NULL             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, init = dict()):
*/
  __pyx_v_self->_hb_map = NULL;

  /* "src/uharfbuzz/_map.pxi":6
 *     INVALID_VALUE = HB_MAP_VALUE_INVALID
 * 
 *     def __cinit__(self, *args, **kwargs):             # <<<<<<<<<<<<<<
 *         self._hb_map = NULL
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":9
 *         self._hb_map = NULL
 * 
 *     def __init__(self, init = dict()):             # <<<<<<<<<<<<<<
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_init = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_init,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 9, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 9, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__init__", 0) < (0)) __PYX_ERR(5, 9, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__3);
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 9, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__3);
    }
    __pyx_v_init = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, __pyx_nargs); __PYX_ERR(5, 9, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_2__init__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_init);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_init) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "src/uharfbuzz/_map.pxi":10
 * 
 *     def __init__(self, init = dict()):
 *         self._hb_map = hb_map_create()             # <<<<<<<<<<<<<<
 *         if not hb_map_allocation_successful(self._hb_map):
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_map = hb_map_create();

  /* "src/uharfbuzz/_map.pxi":11
 *     def __init__(self, init = dict()):
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (!(hb_map_allocation_successful(__pyx_v_self->_hb_map) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_map.pxi":12
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *         self.update(init)
*/
    PyErr_NoMemory(); __PYX_ERR(5, 12, __pyx_L1_error)

    /* "src/uharfbuzz/_map.pxi":11
 *     def __init__(self, init = dict()):
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_map.pxi":14
 *             raise MemoryError()
 * 
 *         self.update(init)             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_init};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update_2, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":9
 *         self._hb_map = NULL
 * 
 *     def __init__(self, init = dict()):             # <<<<<<<<<<<<<<
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":16
 *         self.update(init)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_map_destroy(self._hb_map)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_5__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {

  /* "src/uharfbuzz/_map.pxi":17
 * 
 *     def __dealloc__(self):
 *         hb_map_destroy(self._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  hb_map_destroy(__pyx_v_self->_hb_map);

  /* "src/uharfbuzz/_map.pxi":16
 *         self.update(init)
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_map_destroy(self._hb_map)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_map.pxi":19
 *         hb_map_destroy(self._hb_map)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Map from_ptr(hb_map_t* hb_map):
 *         """Create Map from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr(hb_map_t *__pyx_v_hb_map) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_map.pxi":23
 *         """Create Map from a pointer, taking ownership of it."""
 * 
 *         cdef Map wrapper = Map.__new__(Map)             # <<<<<<<<<<<<<<
 *         wrapper._hb_map = hb_map
 *         return wrapper
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Map(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 23, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_map.pxi":24
 * 
 *         cdef Map wrapper = Map.__new__(Map)
 *         wrapper._hb_map = hb_map             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_hb_map = __pyx_v_hb_map;

  /* "src/uharfbuzz/_map.pxi":25
 *         cdef Map wrapper = Map.__new__(Map)
 *         wrapper._hb_map = hb_map
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def copy(self) -> Map:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":19
 *         hb_map_destroy(self._hb_map)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Map from_ptr(hb_map_t* hb_map):
 *         """Create Map from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Map:             # <<<<<<<<<<<<<<
 *         c = Map()
 *         c._hb_map = hb_map_copy(self._hb_map)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_7copy = {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_7copy(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("copy (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("copy", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6copy(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6copy(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_c = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("copy", 0);

  /* "src/uharfbuzz/_map.pxi":28
 * 
 *     def copy(self) -> Map:
 *         c = Map()             # <<<<<<<<<<<<<<
 *         c._hb_map = hb_map_copy(self._hb_map)
 *         return c
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 28, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_c = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_map.pxi":29
 *     def copy(self) -> Map:
 *         c = Map()
 *         c._hb_map = hb_map_copy(self._hb_map)             # <<<<<<<<<<<<<<
 *         return c
 * 
*/
  __pyx_v_c->_hb_map = hb_map_copy(__pyx_v_self->_hb_map);

  /* "src/uharfbuzz/_map.pxi":30
 *         c = Map()
 *         c._hb_map = hb_map_copy(self._hb_map)
 *         return c             # <<<<<<<<<<<<<<
 * 
 *     def __copy__(self) -> Map:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_c);
  __pyx_r = __pyx_v_c;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Map:             # <<<<<<<<<<<<<<
 *         c = Map()
 *         c._hb_map = hb_map_copy(self._hb_map)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_c);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Map:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_9__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_9__copy__ = {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_9__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_9__copy__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__copy__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__copy__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__copy__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__copy__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__copy__", 0);

  /* "src/uharfbuzz/_map.pxi":33
 * 
 *     def __copy__(self) -> Map:
 *         return self.copy()             # <<<<<<<<<<<<<<
 * 
 *     def _update(self, other : Map):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_copy, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 33, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map))))) __PYX_ERR(5, 33, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Map:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":35
 *         return self.copy()
 * 
 *     def _update(self, other : Map):             # <<<<<<<<<<<<<<
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_11_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_11_update = {"_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_11_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_11_update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 35, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 35, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_update", 0) < (0)) __PYX_ERR(5, 35, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_update", 1, 1, 1, i); __PYX_ERR(5, 35, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 35, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_update", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 35, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map._update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, 0, "other", 0))) __PYX_ERR(5, 35, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_10_update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_10_update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_update", 0);

  /* "src/uharfbuzz/_map.pxi":36
 * 
 *     def _update(self, other : Map):
 *         hb_map_update(self._hb_map, other._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     def update(self, other):
*/
  hb_map_update(__pyx_v_self->_hb_map, __pyx_v_other->_hb_map);

  /* "src/uharfbuzz/_map.pxi":35
 *         return self.copy()
 * 
 *     def _update(self, other : Map):             # <<<<<<<<<<<<<<
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":38
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Map:
 *             self._update(other)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_13update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_13update = {"update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_13update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_13update(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 38, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 38, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "update", 0) < (0)) __PYX_ERR(5, 38, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("update", 1, 1, 1, i); __PYX_ERR(5, 38, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 38, __pyx_L3_error)
    }
    __pyx_v_other = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 38, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_12update(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_12update(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  hb_codepoint_t __pyx_t_10;
  hb_codepoint_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("update", 0);

  /* "src/uharfbuzz/_map.pxi":39
 * 
 *     def update(self, other):
 *         if type(other) == Map:             # <<<<<<<<<<<<<<
 *             self._update(other)
 *         else:
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_other)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map), Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 39, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(5, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_map.pxi":40
 *     def update(self, other):
 *         if type(other) == Map:
 *             self._update(other)             # <<<<<<<<<<<<<<
 *         else:
 *             for k,v in other.items():
*/
    __pyx_t_3 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_other};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_update, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 40, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/uharfbuzz/_map.pxi":39
 * 
 *     def update(self, other):
 *         if type(other) == Map:             # <<<<<<<<<<<<<<
 *             self._update(other)
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_map.pxi":42
 *             self._update(other)
 *         else:
 *             for k,v in other.items():             # <<<<<<<<<<<<<<
 *                 hb_map_set(self._hb_map, k, v)
 * 
*/
  /*else*/ {
    __pyx_t_5 = 0;
    if (unlikely(__pyx_v_other == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(5, 42, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_dict_iterator(__pyx_v_other, 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_6), (&__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_1);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_6, &__pyx_t_5, &__pyx_t_3, &__pyx_t_8, NULL, __pyx_t_7);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(5, 42, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "src/uharfbuzz/_map.pxi":43
 *         else:
 *             for k,v in other.items():
 *                 hb_map_set(self._hb_map, k, v)             # <<<<<<<<<<<<<<
 * 
 *         if not hb_map_allocation_successful(self._hb_map):
*/
      __pyx_t_10 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_k); if (unlikely((__pyx_t_10 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 43, __pyx_L1_error)
      __pyx_t_11 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_v); if (unlikely((__pyx_t_11 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 43, __pyx_L1_error)
      hb_map_set(__pyx_v_self->_hb_map, __pyx_t_10, __pyx_t_11);
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_map.pxi":45
 *                 hb_map_set(self._hb_map, k, v)
 * 
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_map_allocation_successful(__pyx_v_self->_hb_map) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_map.pxi":46
 * 
 *         if not hb_map_allocation_successful(self._hb_map):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
*/
    PyErr_NoMemory(); __PYX_ERR(5, 46, __pyx_L1_error)

    /* "src/uharfbuzz/_map.pxi":45
 *                 hb_map_set(self._hb_map, k, v)
 * 
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_map.pxi":38
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Map:
 *             self._update(other)
*/

  /* 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_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":48
 *             raise MemoryError()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_map_clear(self._hb_map)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_15clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_15clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_15clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_15clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_14clear(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_14clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "src/uharfbuzz/_map.pxi":49
 * 
 *     def clear(self):
 *         hb_map_clear(self._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self) -> bool:
*/
  hb_map_clear(__pyx_v_self->_hb_map);

  /* "src/uharfbuzz/_map.pxi":48
 *             raise MemoryError()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_map_clear(self._hb_map)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":51
 *         hb_map_clear(self._hb_map)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return not hb_map_is_empty(self._hb_map)
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_17__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_17__bool__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_16__bool__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_16__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_map.pxi":52
 * 
 *     def __bool__(self) -> bool:
 *         return not hb_map_is_empty(self._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self) -> int:
*/
  __pyx_r = (!(hb_map_is_empty(__pyx_v_self->_hb_map) != 0));
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":51
 *         hb_map_clear(self._hb_map)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return not hb_map_is_empty(self._hb_map)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":54
 *         return not hb_map_is_empty(self._hb_map)
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_map_get_population(self._hb_map)
 * 
*/

/* Python wrapper */
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_18__len__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_18__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  Py_ssize_t __pyx_r;

  /* "src/uharfbuzz/_map.pxi":55
 * 
 *     def __len__(self) -> int:
 *         return hb_map_get_population(self._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     def _is_equal(self, other: Map) -> bool:
*/
  __pyx_r = hb_map_get_population(__pyx_v_self->_hb_map);
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":54
 *         return not hb_map_is_empty(self._hb_map)
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_map_get_population(self._hb_map)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":57
 *         return hb_map_get_population(self._hb_map)
 * 
 *     def _is_equal(self, other: Map) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_map_is_equal(self._hb_map, other._hb_map)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_21_is_equal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_21_is_equal = {"_is_equal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_21_is_equal, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_21_is_equal(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_is_equal (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_other,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 57, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 57, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "_is_equal", 0) < (0)) __PYX_ERR(5, 57, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("_is_equal", 1, 1, 1, i); __PYX_ERR(5, 57, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 57, __pyx_L3_error)
    }
    __pyx_v_other = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("_is_equal", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 57, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map._is_equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_other), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, 0, "other", 0))) __PYX_ERR(5, 57, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_20_is_equal(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_other);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_20_is_equal(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_is_equal", 0);

  /* "src/uharfbuzz/_map.pxi":58
 * 
 *     def _is_equal(self, other: Map) -> bool:
 *         return hb_map_is_equal(self._hb_map, other._hb_map)             # <<<<<<<<<<<<<<
 * 
 *     def __eq__(self, other):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_map_is_equal(__pyx_v_self->_hb_map, __pyx_v_other->_hb_map)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":57
 *         return hb_map_get_population(self._hb_map)
 * 
 *     def _is_equal(self, other: Map) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_map_is_equal(self._hb_map, other._hb_map)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map._is_equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":60
 *         return hb_map_is_equal(self._hb_map, other._hb_map)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) != Map:
 *             return NotImplemented
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_23__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_23__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_22__eq__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), ((PyObject *)__pyx_v_other));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_22__eq__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__eq__", 0);

  /* "src/uharfbuzz/_map.pxi":61
 * 
 *     def __eq__(self, other):
 *         if type(other) != Map:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 *         return self._is_equal(other)
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_other)), ((PyObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 61, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(5, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_map.pxi":62
 *     def __eq__(self, other):
 *         if type(other) != Map:
 *             return NotImplemented             # <<<<<<<<<<<<<<
 *         return self._is_equal(other)
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_builtin_NotImplemented);
    __pyx_r = __pyx_builtin_NotImplemented;
    goto __pyx_L0;

    /* "src/uharfbuzz/_map.pxi":61
 * 
 *     def __eq__(self, other):
 *         if type(other) != Map:             # <<<<<<<<<<<<<<
 *             return NotImplemented
 *         return self._is_equal(other)
*/
  }

  /* "src/uharfbuzz/_map.pxi":63
 *         if type(other) != Map:
 *             return NotImplemented
 *         return self._is_equal(other)             # <<<<<<<<<<<<<<
 * 
 *     def __setitem__(self, k: int, v: int):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_other};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_equal, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 63, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":60
 *         return hb_map_is_equal(self._hb_map, other._hb_map)
 * 
 *     def __eq__(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) != Map:
 *             return NotImplemented
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":65
 *         return self._is_equal(other)
 * 
 *     def __setitem__(self, k: int, v: int):             # <<<<<<<<<<<<<<
 *         hb_map_set(self._hb_map, k, v)
 *         if not hb_map_allocation_successful(self._hb_map):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_25__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_k, PyObject *__pyx_v_v); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_25__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_k, PyObject *__pyx_v_v) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_k), (&PyLong_Type), 0, "k", 2))) __PYX_ERR(5, 65, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), (&PyLong_Type), 0, "v", 2))) __PYX_ERR(5, 65, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_24__setitem__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), ((PyObject*)__pyx_v_k), ((PyObject*)__pyx_v_v));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_24__setitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k, PyObject *__pyx_v_v) {
  int __pyx_r;
  hb_codepoint_t __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_map.pxi":66
 * 
 *     def __setitem__(self, k: int, v: int):
 *         hb_map_set(self._hb_map, k, v)             # <<<<<<<<<<<<<<
 *         if not hb_map_allocation_successful(self._hb_map):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_k); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 66, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_v); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 66, __pyx_L1_error)
  hb_map_set(__pyx_v_self->_hb_map, __pyx_t_1, __pyx_t_2);

  /* "src/uharfbuzz/_map.pxi":67
 *     def __setitem__(self, k: int, v: int):
 *         hb_map_set(self._hb_map, k, v)
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_3 = (!(hb_map_allocation_successful(__pyx_v_self->_hb_map) != 0));
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_map.pxi":68
 *         hb_map_set(self._hb_map, k, v)
 *         if not hb_map_allocation_successful(self._hb_map):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def get(self, k: int):
*/
    PyErr_NoMemory(); __PYX_ERR(5, 68, __pyx_L1_error)

    /* "src/uharfbuzz/_map.pxi":67
 *     def __setitem__(self, k: int, v: int):
 *         hb_map_set(self._hb_map, k, v)
 *         if not hb_map_allocation_successful(self._hb_map):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_map.pxi":65
 *         return self._is_equal(other)
 * 
 *     def __setitem__(self, k: int, v: int):             # <<<<<<<<<<<<<<
 *         hb_map_set(self._hb_map, k, v)
 *         if not hb_map_allocation_successful(self._hb_map):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":70
 *             raise MemoryError()
 * 
 *     def get(self, k: int):             # <<<<<<<<<<<<<<
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return None
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_27get(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_27get = {"get", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_27get, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_27get(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_k = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_k,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 70, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 70, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get", 0) < (0)) __PYX_ERR(5, 70, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get", 1, 1, 1, i); __PYX_ERR(5, 70, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 70, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "k", 0) < (0)) __PYX_ERR(5, 70, __pyx_L3_error)
    __pyx_v_k = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 70, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_k), (&PyLong_Type), 0, "k", 2))) __PYX_ERR(5, 70, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_26get(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v_k);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_26get(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k) {
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  hb_codepoint_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get", 0);

  /* "src/uharfbuzz/_map.pxi":71
 * 
 *     def get(self, k: int):
 *         if k < 0 or k >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return None
 *         v = hb_map_get(self._hb_map, k)
*/
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_k, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 71, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_INVALID_VALUE); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_k, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_map.pxi":72
 *     def get(self, k: int):
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return None             # <<<<<<<<<<<<<<
 *         v = hb_map_get(self._hb_map, k)
 *         if v == self.INVALID_VALUE:
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_map.pxi":71
 * 
 *     def get(self, k: int):
 *         if k < 0 or k >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return None
 *         v = hb_map_get(self._hb_map, k)
*/
  }

  /* "src/uharfbuzz/_map.pxi":73
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return None
 *         v = hb_map_get(self._hb_map, k)             # <<<<<<<<<<<<<<
 *         if v == self.INVALID_VALUE:
 *             v = None
*/
  __pyx_t_5 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_k); if (unlikely((__pyx_t_5 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 73, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyLong_From_hb_codepoint_t(hb_map_get(__pyx_v_self->_hb_map, __pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_v = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "src/uharfbuzz/_map.pxi":74
 *             return None
 *         v = hb_map_get(self._hb_map, k)
 *         if v == self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             v = None
 *         return v
*/
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_INVALID_VALUE); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_v, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(5, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_map.pxi":75
 *         v = hb_map_get(self._hb_map, k)
 *         if v == self.INVALID_VALUE:
 *             v = None             # <<<<<<<<<<<<<<
 *         return v
 * 
*/
    __Pyx_INCREF(Py_None);
    __Pyx_DECREF_SET(__pyx_v_v, Py_None);

    /* "src/uharfbuzz/_map.pxi":74
 *             return None
 *         v = hb_map_get(self._hb_map, k)
 *         if v == self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             v = None
 *         return v
*/
  }

  /* "src/uharfbuzz/_map.pxi":76
 *         if v == self.INVALID_VALUE:
 *             v = None
 *         return v             # <<<<<<<<<<<<<<
 * 
 *     def __getitem__(self, k: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_v);
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":70
 *             raise MemoryError()
 * 
 *     def get(self, k: int):             # <<<<<<<<<<<<<<
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return None
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":78
 *         return v
 * 
 *     def __getitem__(self, k: int) -> int:             # <<<<<<<<<<<<<<
 *         v = self.get(k)
 *         if v is None:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_29__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_k); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_29__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_k) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_k), (&PyLong_Type), 0, "k", 2))) __PYX_ERR(5, 78, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_28__getitem__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), ((PyObject*)__pyx_v_k));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_28__getitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k) {
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__getitem__", 0);

  /* "src/uharfbuzz/_map.pxi":79
 * 
 *     def __getitem__(self, k: int) -> int:
 *         v = self.get(k)             # <<<<<<<<<<<<<<
 *         if v is None:
 *             raise KeyError, v
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_k};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 79, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_v = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_map.pxi":80
 *     def __getitem__(self, k: int) -> int:
 *         v = self.get(k)
 *         if v is None:             # <<<<<<<<<<<<<<
 *             raise KeyError, v
 *         return v
*/
  __pyx_t_4 = (__pyx_v_v == Py_None);
  if (unlikely(__pyx_t_4)) {

    /* "src/uharfbuzz/_map.pxi":81
 *         v = self.get(k)
 *         if v is None:
 *             raise KeyError, v             # <<<<<<<<<<<<<<
 *         return v
 * 
*/
    __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), __pyx_v_v, 0, 0);
    __PYX_ERR(5, 81, __pyx_L1_error)

    /* "src/uharfbuzz/_map.pxi":80
 *     def __getitem__(self, k: int) -> int:
 *         v = self.get(k)
 *         if v is None:             # <<<<<<<<<<<<<<
 *             raise KeyError, v
 *         return v
*/
  }

  /* "src/uharfbuzz/_map.pxi":82
 *         if v is None:
 *             raise KeyError, v
 *         return v             # <<<<<<<<<<<<<<
 * 
 *     def __contains__(self, k) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_v);
  __pyx_r = __pyx_v_v;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":78
 *         return v
 * 
 *     def __getitem__(self, k: int) -> int:             # <<<<<<<<<<<<<<
 *         v = self.get(k)
 *         if v is None:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":84
 *         return v
 * 
 *     def __contains__(self, k) -> bool:             # <<<<<<<<<<<<<<
 *         if type(k) != int:
 *             return False
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_31__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_k); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_31__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_k) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_30__contains__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), ((PyObject *)__pyx_v_k));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_30__contains__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_k) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  hb_codepoint_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__contains__", 0);

  /* "src/uharfbuzz/_map.pxi":85
 * 
 *     def __contains__(self, k) -> bool:
 *         if type(k) != int:             # <<<<<<<<<<<<<<
 *             return False
 *         if k < 0 or k >= self.INVALID_VALUE:
*/
  __pyx_t_1 = PyObject_RichCompare(((PyObject *)Py_TYPE(__pyx_v_k)), ((PyObject *)(&PyLong_Type)), Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 85, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(5, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_map.pxi":86
 *     def __contains__(self, k) -> bool:
 *         if type(k) != int:
 *             return False             # <<<<<<<<<<<<<<
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return False
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_map.pxi":85
 * 
 *     def __contains__(self, k) -> bool:
 *         if type(k) != int:             # <<<<<<<<<<<<<<
 *             return False
 *         if k < 0 or k >= self.INVALID_VALUE:
*/
  }

  /* "src/uharfbuzz/_map.pxi":87
 *         if type(k) != int:
 *             return False
 *         if k < 0 or k >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return False
 *         return hb_map_has(self._hb_map, k)
*/
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_k, __pyx_mstate_global->__pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 87, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_INVALID_VALUE); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 87, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_k, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_map.pxi":88
 *             return False
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return False             # <<<<<<<<<<<<<<
 *         return hb_map_has(self._hb_map, k)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_map.pxi":87
 *         if type(k) != int:
 *             return False
 *         if k < 0 or k >= self.INVALID_VALUE:             # <<<<<<<<<<<<<<
 *             return False
 *         return hb_map_has(self._hb_map, k)
*/
  }

  /* "src/uharfbuzz/_map.pxi":89
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return False
 *         return hb_map_has(self._hb_map, k)             # <<<<<<<<<<<<<<
 * 
 *     def __delitem__(self, c: int):
*/
  __pyx_t_5 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_k); if (unlikely((__pyx_t_5 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 89, __pyx_L1_error)
  __pyx_r = hb_map_has(__pyx_v_self->_hb_map, __pyx_t_5);
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":84
 *         return v
 * 
 *     def __contains__(self, k) -> bool:             # <<<<<<<<<<<<<<
 *         if type(k) != int:
 *             return False
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":91
 *         return hb_map_has(self._hb_map, k)
 * 
 *     def __delitem__(self, c: int):             # <<<<<<<<<<<<<<
 *         if not c in self:
 *             raise KeyError, c
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_33__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_c); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_33__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_c) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), (&PyLong_Type), 0, "c", 2))) __PYX_ERR(5, 91, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_32__delitem__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), ((PyObject*)__pyx_v_c));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_32__delitem__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, PyObject *__pyx_v_c) {
  int __pyx_r;
  int __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_map.pxi":92
 * 
 *     def __delitem__(self, c: int):
 *         if not c in self:             # <<<<<<<<<<<<<<
 *             raise KeyError, c
 *         hb_map_del(self._hb_map, c)
*/
  __pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_c, ((PyObject *)__pyx_v_self), Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(5, 92, __pyx_L1_error)
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_map.pxi":93
 *     def __delitem__(self, c: int):
 *         if not c in self:
 *             raise KeyError, c             # <<<<<<<<<<<<<<
 *         hb_map_del(self._hb_map, c)
 * 
*/
    __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_KeyError))), __pyx_v_c, 0, 0);
    __PYX_ERR(5, 93, __pyx_L1_error)

    /* "src/uharfbuzz/_map.pxi":92
 * 
 *     def __delitem__(self, c: int):
 *         if not c in self:             # <<<<<<<<<<<<<<
 *             raise KeyError, c
 *         hb_map_del(self._hb_map, c)
*/
  }

  /* "src/uharfbuzz/_map.pxi":94
 *         if not c in self:
 *             raise KeyError, c
 *         hb_map_del(self._hb_map, c)             # <<<<<<<<<<<<<<
 * 
 *     def items(self):
*/
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_c); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(5, 94, __pyx_L1_error)
  hb_map_del(__pyx_v_self->_hb_map, __pyx_t_2);

  /* "src/uharfbuzz/_map.pxi":91
 *         return hb_map_has(self._hb_map, k)
 * 
 *     def __delitem__(self, c: int):             # <<<<<<<<<<<<<<
 *         if not c in self:
 *             raise KeyError, c
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":96
 *         hb_map_del(self._hb_map, c)
 * 
 *     def items(self):             # <<<<<<<<<<<<<<
 *         return MapIter(self)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_35items(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_35items = {"items", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_35items, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_35items(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("items (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("items", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("items", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_34items(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_34items(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("items", 0);

  /* "src/uharfbuzz/_map.pxi":97
 * 
 *     def items(self):
 *         return MapIter(self)             # <<<<<<<<<<<<<<
 * 
 *     def keys(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 97, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_r = ((PyObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":96
 *         hb_map_del(self._hb_map, c)
 * 
 *     def items(self):             # <<<<<<<<<<<<<<
 *         return MapIter(self)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.items", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":99
 *         return MapIter(self)
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         return (k for k,v in self.items())
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_37keys(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_37keys = {"keys", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_37keys, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_37keys(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keys (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("keys", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("keys", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_36keys(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_4keys_2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "src/uharfbuzz/_map.pxi":100
 * 
 *     def keys(self):
 *         return (k for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def values(self):
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4keys_genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(5, 100, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9uharfbuzz_9_harfbuzz_3Map_4keys_2generator1, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_keys_locals_genexpr, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz); if (unlikely(!gen)) __PYX_ERR(5, 100, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.keys.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_4keys_2generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L6_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(5, 100, __pyx_L1_error)
  }
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(5, 100, __pyx_L1_error) }
  if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0) == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(5, 100, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0), 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(5, 100, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_k);
    __pyx_r = __pyx_cur_scope->__pyx_v_k;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(5, 100, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":99
 *         return MapIter(self)
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         return (k for k,v in self.items())
 * 
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_36keys(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_4keys_2generator1 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("keys", 0);

  /* "src/uharfbuzz/_map.pxi":100
 * 
 *     def keys(self):
 *         return (k for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def values(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_4keys_genexpr(NULL, __pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":99
 *         return MapIter(self)
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         return (k for k,v in self.items())
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_4keys_2generator1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":102
 *         return (k for k,v in self.items())
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         return (v for k,v in self.items())
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_39values(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_39values = {"values", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_39values, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_39values(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("values (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("values", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("values", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_38values(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_6values_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "src/uharfbuzz/_map.pxi":103
 * 
 *     def values(self):
 *         return (v for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6values_genexpr(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(5, 103, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9uharfbuzz_9_harfbuzz_3Map_6values_2generator2, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_values_locals_genexpr, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz); if (unlikely(!gen)) __PYX_ERR(5, 103, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.values.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_6values_2generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L6_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(__pyx_sent_value != Py_None)) {
    if (unlikely(__pyx_sent_value)) PyErr_SetString(PyExc_TypeError, "can't send non-None value to a just-started generator");
    __PYX_ERR(5, 103, __pyx_L1_error)
  }
  __pyx_t_2 = 0;
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(5, 103, __pyx_L1_error) }
  if (unlikely(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0) == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(5, 103, __pyx_L1_error)
  }
  __pyx_t_5 = __Pyx_dict_iterator(((PyObject *)__pyx_cur_scope->__pyx_genexpr_arg_0), 0, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_1);
  __pyx_t_1 = __pyx_t_5;
  __pyx_t_5 = 0;
  while (1) {
    __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
    if (unlikely(__pyx_t_7 == 0)) break;
    if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(5, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_6);
    __pyx_t_6 = 0;
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_v);
    __pyx_r = __pyx_cur_scope->__pyx_v_v;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __pyx_cur_scope->__pyx_t_2 = __pyx_t_3;
    __pyx_cur_scope->__pyx_t_3 = __pyx_t_4;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    __pyx_t_3 = __pyx_cur_scope->__pyx_t_2;
    __pyx_t_4 = __pyx_cur_scope->__pyx_t_3;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(5, 103, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":102
 *         return (k for k,v in self.items())
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         return (v for k,v in self.items())
 * 
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_38values(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_6values_2generator2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("values", 0);

  /* "src/uharfbuzz/_map.pxi":103
 * 
 *     def values(self):
 *         return (v for k,v in self.items())             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_6values_genexpr(NULL, __pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":102
 *         return (k for k,v in self.items())
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         return (v for k,v in self.items())
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_6values_2generator2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":105
 *         return (v for k,v in self.items())
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self.keys()
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_41__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_41__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_40__iter__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_40__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "src/uharfbuzz/_map.pxi":106
 * 
 *     def __iter__(self):
 *         return self.keys()             # <<<<<<<<<<<<<<
 * 
 *     def __repr__(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_keys, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 106, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":105
 *         return (v for k,v in self.items())
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self.keys()
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":108
 *         return self.keys()
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))
 *         return ("Map({%s})" % s)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_43__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_43__repr__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_42__repr__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_8__repr___2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "src/uharfbuzz/_map.pxi":109
 * 
 *     def __repr__(self):
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))             # <<<<<<<<<<<<<<
 *         return ("Map({%s})" % s)
 * 
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__repr___genexpr(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_genexpr_arg_0) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, __pyx_mstate_global->__pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(5, 109, __pyx_L1_error)
  } else {
    __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_genexpr_arg_0 = __pyx_genexpr_arg_0;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_genexpr_arg_0);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_9uharfbuzz_9_harfbuzz_3Map_8__repr___2generator3, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5]), (PyObject *) __pyx_cur_scope, __pyx_mstate_global->__pyx_n_u_genexpr, __pyx_mstate_global->__pyx_n_u_repr___locals_genexpr, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz); if (unlikely(!gen)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__repr__.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF((PyObject *)__pyx_cur_scope);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_8__repr___2generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *__pyx_cur_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  PyObject *__pyx_t_8[3];
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(5, 109, __pyx_L1_error)
  __pyx_r = PyList_New(0); if (unlikely(!__pyx_r)) __PYX_ERR(5, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_r);
  if (unlikely(!__pyx_cur_scope->__pyx_genexpr_arg_0)) { __Pyx_RaiseUnboundLocalError(".0"); __PYX_ERR(5, 109, __pyx_L1_error) }
  __pyx_t_1 = PySequence_List(__pyx_cur_scope->__pyx_genexpr_arg_0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely((PyList_Sort(__pyx_t_1) < 0))) __PYX_ERR(5, 109, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(5, 109, __pyx_L1_error)
      #endif
      if (__pyx_t_3 >= __pyx_temp) break;
    }
    __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_2, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
    ++__pyx_t_3;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __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(5, 109, __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_INCREF(__pyx_t_4);
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
        __Pyx_INCREF(__pyx_t_5);
      } else {
        __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 109, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 109, __pyx_L1_error)
        __Pyx_XGOTREF(__pyx_t_5);
      }
      #else
      __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 109, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
      index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_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_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_5);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < (0)) __PYX_ERR(5, 109, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(5, 109, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_k);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_k, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_v);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_v, __pyx_t_5);
    __Pyx_GIVEREF(__pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_1 = PyObject_Repr(__pyx_cur_scope->__pyx_v_k); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = PyObject_Repr(__pyx_cur_scope->__pyx_v_v); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_8[0] = __pyx_t_5;
    __pyx_t_8[1] = __pyx_mstate_global->__pyx_kp_u__4;
    __pyx_t_8[2] = __pyx_t_4;
    __pyx_t_1 = __Pyx_PyUnicode_Join(__pyx_t_8, 3, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(__Pyx_ListComp_Append(__pyx_r, (PyObject*)__pyx_t_1))) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  __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);
  if (__Pyx_PyErr_Occurred()) {
    __Pyx_Generator_Replace_StopIteration(0);
    __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":108
 *         return self.keys()
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))
 *         return ("Map({%s})" % s)
*/

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_42__repr__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_v_s = NULL;
  PyObject *__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_8__repr___2generator3 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "src/uharfbuzz/_map.pxi":109
 * 
 *     def __repr__(self):
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))             # <<<<<<<<<<<<<<
 *         return ("Map({%s})" % s)
 * 
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_items, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_2 = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_8__repr___genexpr(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_Generator_GetInlinedResult(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__2, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_s = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":110
 *     def __repr__(self):
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))
 *         return ("Map({%s})" % s)             # <<<<<<<<<<<<<<
 * 
 * cdef class MapIter:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Map_s, __pyx_v_s); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":108
 *         return self.keys()
 * 
 *     def __repr__(self):             # <<<<<<<<<<<<<<
 *         s = ', '.join("%s: %s" % (repr(k), repr(v)) for k,v in sorted(self.items()))
 *         return ("Map({%s})" % s)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_XDECREF(__pyx_gb_9uharfbuzz_9_harfbuzz_3Map_8__repr___2generator3);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_44__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_44__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_3Map_46__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_3Map_46__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Map.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_map.pxi":117
 *     cdef int _i
 * 
 *     def __cinit__(self, m: Map):             # <<<<<<<<<<<<<<
 *         self.m = m
 *         self._hb_map = m._hb_map
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_m = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_m,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(5, 117, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 117, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(5, 117, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(5, 117, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(5, 117, __pyx_L3_error)
    }
    __pyx_v_m = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 117, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.MapIter.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_m), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, 0, "m", 0))) __PYX_ERR(5, 117, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)__pyx_v_self), __pyx_v_m);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *__pyx_v_m) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  hb_map_t *__pyx_t_1;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "src/uharfbuzz/_map.pxi":118
 * 
 *     def __cinit__(self, m: Map):
 *         self.m = m             # <<<<<<<<<<<<<<
 *         self._hb_map = m._hb_map
 *         self._i = -1
*/
  __Pyx_INCREF((PyObject *)__pyx_v_m);
  __Pyx_GIVEREF((PyObject *)__pyx_v_m);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->m);
  __Pyx_DECREF((PyObject *)__pyx_v_self->m);
  __pyx_v_self->m = __pyx_v_m;

  /* "src/uharfbuzz/_map.pxi":119
 *     def __cinit__(self, m: Map):
 *         self.m = m
 *         self._hb_map = m._hb_map             # <<<<<<<<<<<<<<
 *         self._i = -1
 * 
*/
  __pyx_t_1 = __pyx_v_m->_hb_map;
  __pyx_v_self->_hb_map = __pyx_t_1;

  /* "src/uharfbuzz/_map.pxi":120
 *         self.m = m
 *         self._hb_map = m._hb_map
 *         self._i = -1             # <<<<<<<<<<<<<<
 * 
 *     def __iter__(self):
*/
  __pyx_v_self->_i = -1;

  /* "src/uharfbuzz/_map.pxi":117
 *     cdef int _i
 * 
 *     def __cinit__(self, m: Map):             # <<<<<<<<<<<<<<
 *         self.m = m
 *         self._hb_map = m._hb_map
*/

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

/* "src/uharfbuzz/_map.pxi":122
 *         self._i = -1
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_3__iter__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_3__iter__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_2__iter__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_2__iter__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);

  /* "src/uharfbuzz/_map.pxi":123
 * 
 *     def __iter__(self):
 *         return self             # <<<<<<<<<<<<<<
 * 
 *     def __next__(self) -> Tuple[int, int]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self);
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":122
 *         self._i = -1
 * 
 *     def __iter__(self):             # <<<<<<<<<<<<<<
 *         return self
 * 
*/

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

/* "src/uharfbuzz/_map.pxi":125
 *         return self
 * 
 *     def __next__(self) -> Tuple[int, int]:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t k
 *         cdef hb_codepoint_t v
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__next__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_4__next__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_4__next__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self) {
  hb_codepoint_t __pyx_v_k;
  hb_codepoint_t __pyx_v_v;
  hb_bool_t __pyx_v_ret;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_error_without_exception = 0; /* StopIteration */
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__next__", 0);

  /* "src/uharfbuzz/_map.pxi":128
 *         cdef hb_codepoint_t k
 *         cdef hb_codepoint_t v
 *         ret = hb_map_next(self._hb_map, &self._i, &k, &v)             # <<<<<<<<<<<<<<
 *         if not ret:
 *             raise StopIteration
*/
  __pyx_v_ret = hb_map_next(__pyx_v_self->_hb_map, (&__pyx_v_self->_i), (&__pyx_v_k), (&__pyx_v_v));

  /* "src/uharfbuzz/_map.pxi":129
 *         cdef hb_codepoint_t v
 *         ret = hb_map_next(self._hb_map, &self._i, &k, &v)
 *         if not ret:             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return (k, v)
*/
  __pyx_t_1 = (!(__pyx_v_ret != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_map.pxi":130
 *         ret = hb_map_next(self._hb_map, &self._i, &k, &v)
 *         if not ret:
 *             raise StopIteration             # <<<<<<<<<<<<<<
 *         return (k, v)
*/
    __pyx_error_without_exception = 1;
    goto __pyx_L1_error;;

    /* "src/uharfbuzz/_map.pxi":129
 *         cdef hb_codepoint_t v
 *         ret = hb_map_next(self._hb_map, &self._i, &k, &v)
 *         if not ret:             # <<<<<<<<<<<<<<
 *             raise StopIteration
 *         return (k, v)
*/
  }

  /* "src/uharfbuzz/_map.pxi":131
 *         if not ret:
 *             raise StopIteration
 *         return (k, v)             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_k); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_v); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2) != (0)) __PYX_ERR(5, 131, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3) != (0)) __PYX_ERR(5, 131, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_map.pxi":125
 *         return self
 * 
 *     def __next__(self) -> Tuple[int, int]:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t k
 *         cdef hb_codepoint_t v
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  if (!__pyx_error_without_exception) {
    __Pyx_AddTraceback("uharfbuzz._harfbuzz.MapIter.__next__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  }
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_6__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.MapIter.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.MapIter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_8__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_7MapIter_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.MapIter.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":4
 *     cdef hb_blob_t* _hb_blob
 * 
 *     def __cinit__(self, bytes data = None):             # <<<<<<<<<<<<<<
 *         if data is not None:
 *             self._hb_blob = hb_blob_create(
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(6, 4, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(6, 4, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 4, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject*)Py_None));
    }
    __pyx_v_data = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, __pyx_nargs); __PYX_ERR(6, 4, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyBytes_Type), 1, "data", 1))) __PYX_ERR(6, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self), __pyx_v_data);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self, PyObject *__pyx_v_data) {
  int __pyx_r;
  int __pyx_t_1;
  char const *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_blob.pxi":5
 * 
 *     def __cinit__(self, bytes data = None):
 *         if data is not None:             # <<<<<<<<<<<<<<
 *             self._hb_blob = hb_blob_create(
 *                 data, len(data), HB_MEMORY_MODE_DUPLICATE, NULL, NULL)
*/
  __pyx_t_1 = (__pyx_v_data != ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_blob.pxi":7
 *         if data is not None:
 *             self._hb_blob = hb_blob_create(
 *                 data, len(data), HB_MEMORY_MODE_DUPLICATE, NULL, NULL)             # <<<<<<<<<<<<<<
 *         else:
 *             self._hb_blob = hb_blob_get_empty()
*/
    if (unlikely(__pyx_v_data == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
      __PYX_ERR(6, 7, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_data); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(6, 7, __pyx_L1_error)
    if (unlikely(__pyx_v_data == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
      __PYX_ERR(6, 7, __pyx_L1_error)
    }
    __pyx_t_3 = __Pyx_PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(6, 7, __pyx_L1_error)

    /* "src/uharfbuzz/_blob.pxi":6
 *     def __cinit__(self, bytes data = None):
 *         if data is not None:
 *             self._hb_blob = hb_blob_create(             # <<<<<<<<<<<<<<
 *                 data, len(data), HB_MEMORY_MODE_DUPLICATE, NULL, NULL)
 *         else:
*/
    __pyx_v_self->_hb_blob = hb_blob_create(__pyx_t_2, __pyx_t_3, HB_MEMORY_MODE_DUPLICATE, NULL, NULL);

    /* "src/uharfbuzz/_blob.pxi":5
 * 
 *     def __cinit__(self, bytes data = None):
 *         if data is not None:             # <<<<<<<<<<<<<<
 *             self._hb_blob = hb_blob_create(
 *                 data, len(data), HB_MEMORY_MODE_DUPLICATE, NULL, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_blob.pxi":9
 *                 data, len(data), HB_MEMORY_MODE_DUPLICATE, NULL, NULL)
 *         else:
 *             self._hb_blob = hb_blob_get_empty()             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  /*else*/ {
    __pyx_v_self->_hb_blob = hb_blob_get_empty();
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_blob.pxi":4
 *     cdef hb_blob_t* _hb_blob
 * 
 *     def __cinit__(self, bytes data = None):             # <<<<<<<<<<<<<<
 *         if data is not None:
 *             self._hb_blob = hb_blob_create(
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":11
 *             self._hb_blob = hb_blob_get_empty()
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Blob from_ptr(hb_blob_t* hb_blob):
 *         """Create Blob from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(hb_blob_t *__pyx_v_hb_blob) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_blob.pxi":15
 *         """Create Blob from a pointer, taking ownership of it."""
 * 
 *         cdef Blob wrapper = Blob.__new__(Blob)             # <<<<<<<<<<<<<<
 *         wrapper._hb_blob = hb_blob
 *         return wrapper
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Blob(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 15, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_blob.pxi":16
 * 
 *         cdef Blob wrapper = Blob.__new__(Blob)
 *         wrapper._hb_blob = hb_blob             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_hb_blob = __pyx_v_hb_blob;

  /* "src/uharfbuzz/_blob.pxi":17
 *         cdef Blob wrapper = Blob.__new__(Blob)
 *         wrapper._hb_blob = hb_blob
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_blob.pxi":11
 *             self._hb_blob = hb_blob_get_empty()
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Blob from_ptr(hb_blob_t* hb_blob):
 *         """Create Blob from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":19
 *         return wrapper
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_file_path(cls, filename: Union[str, Path]) -> Blob:
 *         cdef bytes packed = os.fsencode(filename)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path = {"from_file_path", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_filename = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_file_path (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_filename,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(6, 19, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 19, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_file_path", 0) < (0)) __PYX_ERR(6, 19, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_file_path", 1, 1, 1, i); __PYX_ERR(6, 19, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(6, 19, __pyx_L3_error)
    }
    __pyx_v_filename = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_file_path", 1, 1, 1, __pyx_nargs); __PYX_ERR(6, 19, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.from_file_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_2from_file_path(((PyTypeObject*)__pyx_v_cls), __pyx_v_filename);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_2from_file_path(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_filename) {
  PyObject *__pyx_v_packed = 0;
  hb_blob_t *__pyx_v_blob;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  char *__pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_file_path", 0);

  /* "src/uharfbuzz/_blob.pxi":21
 *     @classmethod
 *     def from_file_path(cls, filename: Union[str, Path]) -> Blob:
 *         cdef bytes packed = os.fsencode(filename)             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob = hb_blob_create_from_file_or_fail(<char*>packed)
 *         if blob == NULL:
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_fsencode); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_filename};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 21, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(6, 21, __pyx_L1_error)
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_blob.pxi":22
 *     def from_file_path(cls, filename: Union[str, Path]) -> Blob:
 *         cdef bytes packed = os.fsencode(filename)
 *         cdef hb_blob_t* blob = hb_blob_create_from_file_or_fail(<char*>packed)             # <<<<<<<<<<<<<<
 *         if blob == NULL:
 *             raise HarfBuzzError(f"Failed to open: {filename}")
*/
  if (unlikely(__pyx_v_packed == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
    __PYX_ERR(6, 22, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) __PYX_ERR(6, 22, __pyx_L1_error)
  __pyx_v_blob = hb_blob_create_from_file_or_fail(((char *)__pyx_t_6));

  /* "src/uharfbuzz/_blob.pxi":23
 *         cdef bytes packed = os.fsencode(filename)
 *         cdef hb_blob_t* blob = hb_blob_create_from_file_or_fail(<char*>packed)
 *         if blob == NULL:             # <<<<<<<<<<<<<<
 *             raise HarfBuzzError(f"Failed to open: {filename}")
 *         cdef Blob inst = cls(None)
*/
  __pyx_t_7 = (__pyx_v_blob == NULL);
  if (unlikely(__pyx_t_7)) {

    /* "src/uharfbuzz/_blob.pxi":24
 *         cdef hb_blob_t* blob = hb_blob_create_from_file_or_fail(<char*>packed)
 *         if blob == NULL:
 *             raise HarfBuzzError(f"Failed to open: {filename}")             # <<<<<<<<<<<<<<
 *         cdef Blob inst = cls(None)
 *         inst._hb_blob = blob
*/
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HarfBuzzError); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_v_filename, __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyUnicode_Concat(__pyx_mstate_global->__pyx_kp_u_Failed_to_open, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_2, __pyx__function);
      __pyx_t_5 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 24, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(6, 24, __pyx_L1_error)

    /* "src/uharfbuzz/_blob.pxi":23
 *         cdef bytes packed = os.fsencode(filename)
 *         cdef hb_blob_t* blob = hb_blob_create_from_file_or_fail(<char*>packed)
 *         if blob == NULL:             # <<<<<<<<<<<<<<
 *             raise HarfBuzzError(f"Failed to open: {filename}")
 *         cdef Blob inst = cls(None)
*/
  }

  /* "src/uharfbuzz/_blob.pxi":25
 *         if blob == NULL:
 *             raise HarfBuzzError(f"Failed to open: {filename}")
 *         cdef Blob inst = cls(None)             # <<<<<<<<<<<<<<
 *         inst._hb_blob = blob
 *         return inst
*/
  __pyx_t_2 = NULL;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 25, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob))))) __PYX_ERR(6, 25, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_blob.pxi":26
 *             raise HarfBuzzError(f"Failed to open: {filename}")
 *         cdef Blob inst = cls(None)
 *         inst._hb_blob = blob             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __pyx_v_inst->_hb_blob = __pyx_v_blob;

  /* "src/uharfbuzz/_blob.pxi":27
 *         cdef Blob inst = cls(None)
 *         inst._hb_blob = blob
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_blob.pxi":19
 *         return wrapper
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_file_path(cls, filename: Union[str, Path]) -> Blob:
 *         cdef bytes packed = os.fsencode(filename)
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.Blob.from_file_path", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":29
 *         return inst
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_blob_destroy(self._hb_blob)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_5__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self) {

  /* "src/uharfbuzz/_blob.pxi":30
 * 
 *     def __dealloc__(self):
 *         hb_blob_destroy(self._hb_blob)             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self) -> int:
*/
  hb_blob_destroy(__pyx_v_self->_hb_blob);

  /* "src/uharfbuzz/_blob.pxi":29
 *         return inst
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_blob_destroy(self._hb_blob)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_blob.pxi":32
 *         hb_blob_destroy(self._hb_blob)
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_blob_get_length(self._hb_blob)
 * 
*/

/* Python wrapper */
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_6__len__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_6__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self) {
  Py_ssize_t __pyx_r;

  /* "src/uharfbuzz/_blob.pxi":33
 * 
 *     def __len__(self) -> int:
 *         return hb_blob_get_length(self._hb_blob)             # <<<<<<<<<<<<<<
 * 
 *     def __bool__(self) -> bool:
*/
  __pyx_r = hb_blob_get_length(__pyx_v_self->_hb_blob);
  goto __pyx_L0;

  /* "src/uharfbuzz/_blob.pxi":32
 *         hb_blob_destroy(self._hb_blob)
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_blob_get_length(self._hb_blob)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":35
 *         return hb_blob_get_length(self._hb_blob)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return len(self) > 0
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_9__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_9__bool__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_8__bool__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_8__bool__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self) {
  int __pyx_r;
  Py_ssize_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_blob.pxi":36
 * 
 *     def __bool__(self) -> bool:
 *         return len(self) > 0             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = PyObject_Length(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(6, 36, __pyx_L1_error)
  __pyx_r = (__pyx_t_1 > 0);
  goto __pyx_L0;

  /* "src/uharfbuzz/_blob.pxi":35
 *         return hb_blob_get_length(self._hb_blob)
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return len(self) > 0
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_blob.pxi":38
 *         return len(self) > 0
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def data(self) -> bytes:
 *         """Return the blob's data as bytes."""
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_4data_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_4data_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4data___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_4data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self) {
  unsigned int __pyx_v_blob_length;
  const char *__pyx_v_blob_data;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_blob.pxi":41
 *     def data(self) -> bytes:
 *         """Return the blob's data as bytes."""
 *         if not self:             # <<<<<<<<<<<<<<
 *             return b""
 *         cdef unsigned int blob_length
*/
  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(6, 41, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_blob.pxi":42
 *         """Return the blob's data as bytes."""
 *         if not self:
 *             return b""             # <<<<<<<<<<<<<<
 *         cdef unsigned int blob_length
 *         cdef const_char* blob_data = hb_blob_get_data(self._hb_blob, &blob_length)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__5);
    __pyx_r = __pyx_mstate_global->__pyx_kp_b__5;
    goto __pyx_L0;

    /* "src/uharfbuzz/_blob.pxi":41
 *     def data(self) -> bytes:
 *         """Return the blob's data as bytes."""
 *         if not self:             # <<<<<<<<<<<<<<
 *             return b""
 *         cdef unsigned int blob_length
*/
  }

  /* "src/uharfbuzz/_blob.pxi":44
 *             return b""
 *         cdef unsigned int blob_length
 *         cdef const_char* blob_data = hb_blob_get_data(self._hb_blob, &blob_length)             # <<<<<<<<<<<<<<
 *         return blob_data[:blob_length]
*/
  __pyx_v_blob_data = hb_blob_get_data(__pyx_v_self->_hb_blob, (&__pyx_v_blob_length));

  /* "src/uharfbuzz/_blob.pxi":45
 *         cdef unsigned int blob_length
 *         cdef const_char* blob_data = hb_blob_get_data(self._hb_blob, &blob_length)
 *         return blob_data[:blob_length]             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_blob_data + 0, __pyx_v_blob_length - 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_blob.pxi":38
 *         return len(self) > 0
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def data(self) -> bytes:
 *         """Return the blob's data as bytes."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_10__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_12__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Blob_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Blob.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":11
 *     # could maybe store Buffer to prevent GC
 * 
 *     cdef set(self, hb_glyph_info_t info):             # <<<<<<<<<<<<<<
 *         self._hb_glyph_info = info
 * 
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_9GlyphInfo_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self, hb_glyph_info_t __pyx_v_info) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set", 0);

  /* "src/uharfbuzz/_buffer.pxi":12
 * 
 *     cdef set(self, hb_glyph_info_t info):
 *         self._hb_glyph_info = info             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_v_self->_hb_glyph_info = __pyx_v_info;

  /* "src/uharfbuzz/_buffer.pxi":11
 *     # could maybe store Buffer to prevent GC
 * 
 *     cdef set(self, hb_glyph_info_t info):             # <<<<<<<<<<<<<<
 *         self._hb_glyph_info = info
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":14
 *         self._hb_glyph_info = info
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def codepoint(self) -> int:
 *         return self._hb_glyph_info.codepoint
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":16
 *     @property
 *     def codepoint(self) -> int:
 *         return self._hb_glyph_info.codepoint             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_self->_hb_glyph_info.codepoint); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":14
 *         self._hb_glyph_info = info
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def codepoint(self) -> int:
 *         return self._hb_glyph_info.codepoint
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphInfo.codepoint.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":18
 *         return self._hb_glyph_info.codepoint
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster(self) -> int:
 *         return self._hb_glyph_info.cluster
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":20
 *     @property
 *     def cluster(self) -> int:
 *         return self._hb_glyph_info.cluster             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_long(__pyx_v_self->_hb_glyph_info.cluster); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":18
 *         return self._hb_glyph_info.codepoint
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster(self) -> int:
 *         return self._hb_glyph_info.cluster
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphInfo.cluster.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":22
 *         return self._hb_glyph_info.cluster
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> GlyphFlags:
 *         return GlyphFlags(self._hb_glyph_info.mask & HB_GLYPH_FLAG_DEFINED)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":24
 *     @property
 *     def flags(self) -> GlyphFlags:
 *         return GlyphFlags(self._hb_glyph_info.mask & HB_GLYPH_FLAG_DEFINED)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_GlyphFlags); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_mask_t((__pyx_v_self->_hb_glyph_info.mask & HB_GLYPH_FLAG_DEFINED)); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":22
 *         return self._hb_glyph_info.cluster
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> GlyphFlags:
 *         return GlyphFlags(self._hb_glyph_info.mask & HB_GLYPH_FLAG_DEFINED)
*/

  /* 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("uharfbuzz._harfbuzz.GlyphInfo.flags.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo___reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_Pickling_of_struct_members_such, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphInfo.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_2__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9GlyphInfo_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_Pickling_of_struct_members_such, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphInfo.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":31
 *     # could maybe store Buffer to prevent GC
 * 
 *     cdef set(self, hb_glyph_position_t position):             # <<<<<<<<<<<<<<
 *         self._hb_glyph_position = position
 * 
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_13GlyphPosition_set(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self, hb_glyph_position_t __pyx_v_position) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set", 0);

  /* "src/uharfbuzz/_buffer.pxi":32
 * 
 *     cdef set(self, hb_glyph_position_t position):
 *         self._hb_glyph_position = position             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_v_self->_hb_glyph_position = __pyx_v_position;

  /* "src/uharfbuzz/_buffer.pxi":31
 *     # could maybe store Buffer to prevent GC
 * 
 *     cdef set(self, hb_glyph_position_t position):             # <<<<<<<<<<<<<<
 *         self._hb_glyph_position = position
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":34
 *         self._hb_glyph_position = position
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def position(self) -> Tuple[int, int, int, int]:
 *         return (
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":36
 *     @property
 *     def position(self) -> Tuple[int, int, int, int]:
 *         return (             # <<<<<<<<<<<<<<
 *             self._hb_glyph_position.x_offset,
 *             self._hb_glyph_position.y_offset,
*/
  __Pyx_XDECREF(__pyx_r);

  /* "src/uharfbuzz/_buffer.pxi":37
 *     def position(self) -> Tuple[int, int, int, int]:
 *         return (
 *             self._hb_glyph_position.x_offset,             # <<<<<<<<<<<<<<
 *             self._hb_glyph_position.y_offset,
 *             self._hb_glyph_position.x_advance,
*/
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.x_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "src/uharfbuzz/_buffer.pxi":38
 *         return (
 *             self._hb_glyph_position.x_offset,
 *             self._hb_glyph_position.y_offset,             # <<<<<<<<<<<<<<
 *             self._hb_glyph_position.x_advance,
 *             self._hb_glyph_position.y_advance
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.y_offset); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "src/uharfbuzz/_buffer.pxi":39
 *             self._hb_glyph_position.x_offset,
 *             self._hb_glyph_position.y_offset,
 *             self._hb_glyph_position.x_advance,             # <<<<<<<<<<<<<<
 *             self._hb_glyph_position.y_advance
 *         )
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.x_advance); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "src/uharfbuzz/_buffer.pxi":40
 *             self._hb_glyph_position.y_offset,
 *             self._hb_glyph_position.x_advance,
 *             self._hb_glyph_position.y_advance             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.y_advance); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "src/uharfbuzz/_buffer.pxi":37
 *     def position(self) -> Tuple[int, int, int, int]:
 *         return (
 *             self._hb_glyph_position.x_offset,             # <<<<<<<<<<<<<<
 *             self._hb_glyph_position.y_offset,
 *             self._hb_glyph_position.x_advance,
*/
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1) != (0)) __PYX_ERR(7, 37, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2) != (0)) __PYX_ERR(7, 37, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3) != (0)) __PYX_ERR(7, 37, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4) != (0)) __PYX_ERR(7, 37, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":34
 *         self._hb_glyph_position = position
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def position(self) -> Tuple[int, int, int, int]:
 *         return (
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.position.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":43
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def x_advance(self) -> int:
 *         return self._hb_glyph_position.x_advance
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":45
 *     @property
 *     def x_advance(self) -> int:
 *         return self._hb_glyph_position.x_advance             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.x_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":43
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def x_advance(self) -> int:
 *         return self._hb_glyph_position.x_advance
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.x_advance.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":47
 *         return self._hb_glyph_position.x_advance
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def y_advance(self) -> int:
 *         return self._hb_glyph_position.y_advance
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":49
 *     @property
 *     def y_advance(self) -> int:
 *         return self._hb_glyph_position.y_advance             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.y_advance); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":47
 *         return self._hb_glyph_position.x_advance
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def y_advance(self) -> int:
 *         return self._hb_glyph_position.y_advance
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.y_advance.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":51
 *         return self._hb_glyph_position.y_advance
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def x_offset(self) -> int:
 *         return self._hb_glyph_position.x_offset
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":53
 *     @property
 *     def x_offset(self) -> int:
 *         return self._hb_glyph_position.x_offset             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.x_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":51
 *         return self._hb_glyph_position.y_advance
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def x_offset(self) -> int:
 *         return self._hb_glyph_position.x_offset
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.x_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":55
 *         return self._hb_glyph_position.x_offset
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def y_offset(self) -> int:
 *         return self._hb_glyph_position.y_offset
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":57
 *     @property
 *     def y_offset(self) -> int:
 *         return self._hb_glyph_position.y_offset             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_self->_hb_glyph_position.y_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":55
 *         return self._hb_glyph_position.x_offset
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def y_offset(self) -> int:
 *         return self._hb_glyph_position.y_offset
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.y_offset.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition___reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition___reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_Pickling_of_struct_members_such_2, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_2__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_13GlyphPosition_2__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_Pickling_of_struct_members_such_2, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.GlyphPosition.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":104
 *     DEFAULT_REPLACEMENT_CODEPOINT = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_buffer = hb_buffer_create()
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "src/uharfbuzz/_buffer.pxi":105
 * 
 *     def __cinit__(self):
 *         self._hb_buffer = hb_buffer_create()             # <<<<<<<<<<<<<<
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_buffer = hb_buffer_create();

  /* "src/uharfbuzz/_buffer.pxi":106
 *     def __cinit__(self):
 *         self._hb_buffer = hb_buffer_create()
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         self._message_callback = None
*/
  __pyx_t_1 = (!(hb_buffer_allocation_successful(__pyx_v_self->_hb_buffer) != 0));
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_buffer.pxi":107
 *         self._hb_buffer = hb_buffer_create()
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         self._message_callback = None
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(7, 107, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":106
 *     def __cinit__(self):
 *         self._hb_buffer = hb_buffer_create()
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         self._message_callback = None
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":108
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()
 *         self._message_callback = None             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_message_callback);
  __Pyx_DECREF(__pyx_v_self->_message_callback);
  __pyx_v_self->_message_callback = Py_None;

  /* "src/uharfbuzz/_buffer.pxi":104
 *     DEFAULT_REPLACEMENT_CODEPOINT = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_buffer = hb_buffer_create()
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":110
 *         self._message_callback = None
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_destroy(self._hb_buffer)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {

  /* "src/uharfbuzz/_buffer.pxi":111
 * 
 *     def __dealloc__(self):
 *         hb_buffer_destroy(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     # DEPRECATED: use the normal constructor
*/
  hb_buffer_destroy(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":110
 *         self._message_callback = None
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_destroy(self._hb_buffer)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_buffer.pxi":114
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> Buffer:
 *         cdef Buffer inst = cls()
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_5create = {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("create", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("create", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_4create(((PyTypeObject*)__pyx_v_cls));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_4create(PyTypeObject *__pyx_v_cls) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/uharfbuzz/_buffer.pxi":116
 *     @classmethod
 *     def create(cls) -> Buffer:
 *         cdef Buffer inst = cls()             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer))))) __PYX_ERR(7, 116, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":117
 *     def create(cls) -> Buffer:
 *         cdef Buffer inst = cls()
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     def __len__(self) -> int:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":114
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> Buffer:
 *         cdef Buffer inst = cls()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":119
 *         return inst
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_buffer_get_length(self._hb_buffer)
 * 
*/

/* Python wrapper */
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__(PyObject *__pyx_v_self); /*proto*/
static Py_ssize_t __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6__len__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static Py_ssize_t __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6__len__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  Py_ssize_t __pyx_r;

  /* "src/uharfbuzz/_buffer.pxi":120
 * 
 *     def __len__(self) -> int:
 *         return hb_buffer_get_length(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     def reset(self):
*/
  __pyx_r = hb_buffer_get_length(__pyx_v_self->_hb_buffer);
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":119
 *         return inst
 * 
 *     def __len__(self) -> int:             # <<<<<<<<<<<<<<
 *         return hb_buffer_get_length(self._hb_buffer)
 * 
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":122
 *         return hb_buffer_get_length(self._hb_buffer)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_reset (self._hb_buffer)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_9reset = {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reset", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8reset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset", 0);

  /* "src/uharfbuzz/_buffer.pxi":123
 * 
 *     def reset(self):
 *         hb_buffer_reset (self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     def clear_contents(self):
*/
  hb_buffer_reset(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":122
 *         return hb_buffer_get_length(self._hb_buffer)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_reset (self._hb_buffer)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":125
 *         hb_buffer_reset (self._hb_buffer)
 * 
 *     def clear_contents(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_clear_contents(self._hb_buffer)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents = {"clear_contents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_contents (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear_contents", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear_contents", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_10clear_contents(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_10clear_contents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_contents", 0);

  /* "src/uharfbuzz/_buffer.pxi":126
 * 
 *     def clear_contents(self):
 *         hb_buffer_clear_contents(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_buffer_clear_contents(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":125
 *         hb_buffer_reset (self._hb_buffer)
 * 
 *     def clear_contents(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_clear_contents(self._hb_buffer)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":128
 *         hb_buffer_clear_contents(self._hb_buffer)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def direction(self) -> str:
 *         cdef const_char* cstr = hb_direction_to_string(
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  const char *__pyx_v_cstr;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":130
 *     @property
 *     def direction(self) -> str:
 *         cdef const_char* cstr = hb_direction_to_string(             # <<<<<<<<<<<<<<
 *             hb_buffer_get_direction(self._hb_buffer))
 *         cdef bytes packed = cstr
*/
  __pyx_v_cstr = hb_direction_to_string(hb_buffer_get_direction(__pyx_v_self->_hb_buffer));

  /* "src/uharfbuzz/_buffer.pxi":132
 *         cdef const_char* cstr = hb_direction_to_string(
 *             hb_buffer_get_direction(self._hb_buffer))
 *         cdef bytes packed = cstr             # <<<<<<<<<<<<<<
 *         return packed.decode()
 * 
*/
  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":133
 *             hb_buffer_get_direction(self._hb_buffer))
 *         cdef bytes packed = cstr
 *         return packed.decode()             # <<<<<<<<<<<<<<
 * 
 *     @direction.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":128
 *         hb_buffer_clear_contents(self._hb_buffer)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def direction(self) -> str:
 *         cdef const_char* cstr = hb_direction_to_string(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.direction.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":135
 *         return packed.decode()
 * 
 *     @direction.setter             # <<<<<<<<<<<<<<
 *     def direction(self, value: str):
 *         cdef bytes packed = value.encode()
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 0, "value", 2))) __PYX_ERR(7, 136, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_9direction_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":137
 *     @direction.setter
 *     def direction(self, value: str):
 *         cdef bytes packed = value.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         hb_buffer_set_direction(
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_value, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":138
 *     def direction(self, value: str):
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         hb_buffer_set_direction(
 *             self._hb_buffer, hb_direction_from_string(cstr, -1))
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(7, 138, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_buffer.pxi":139
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
 *         hb_buffer_set_direction(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_direction_from_string(cstr, -1))
 * 
*/
  hb_buffer_set_direction(__pyx_v_self->_hb_buffer, hb_direction_from_string(__pyx_v_cstr, -1));

  /* "src/uharfbuzz/_buffer.pxi":135
 *         return packed.decode()
 * 
 *     @direction.setter             # <<<<<<<<<<<<<<
 *     def direction(self, value: str):
 *         cdef bytes packed = value.encode()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.direction.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":142
 *             self._hb_buffer, hb_direction_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_infos(self) -> List[GlyphInfo]:
 *         cdef unsigned int count
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  unsigned int __pyx_v_count;
  hb_glyph_info_t *__pyx_v_glyph_infos;
  PyObject *__pyx_v_infos = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *__pyx_v_info = 0;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":145
 *     def glyph_infos(self) -> List[GlyphInfo]:
 *         cdef unsigned int count
 *         cdef hb_glyph_info_t* glyph_infos = hb_buffer_get_glyph_infos(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, &count)
 *         cdef list infos = []
*/
  __pyx_v_glyph_infos = hb_buffer_get_glyph_infos(__pyx_v_self->_hb_buffer, (&__pyx_v_count));

  /* "src/uharfbuzz/_buffer.pxi":147
 *         cdef hb_glyph_info_t* glyph_infos = hb_buffer_get_glyph_infos(
 *             self._hb_buffer, &count)
 *         cdef list infos = []             # <<<<<<<<<<<<<<
 *         cdef GlyphInfo info
 *         cdef unsigned int i
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_infos = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":150
 *         cdef GlyphInfo info
 *         cdef unsigned int i
 *         for i in range(count):             # <<<<<<<<<<<<<<
 *             info = GlyphInfo()
 *             info.set(glyph_infos[i])
*/
  __pyx_t_2 = __pyx_v_count;
  __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;

    /* "src/uharfbuzz/_buffer.pxi":151
 *         cdef unsigned int i
 *         for i in range(count):
 *             info = GlyphInfo()             # <<<<<<<<<<<<<<
 *             info.set(glyph_infos[i])
 *             infos.append(info)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 151, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_1);
    }
    __Pyx_XDECREF_SET(__pyx_v_info, ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "src/uharfbuzz/_buffer.pxi":152
 *         for i in range(count):
 *             info = GlyphInfo()
 *             info.set(glyph_infos[i])             # <<<<<<<<<<<<<<
 *             infos.append(info)
 *         return infos
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphInfo *)__pyx_v_info->__pyx_vtab)->set(__pyx_v_info, (__pyx_v_glyph_infos[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "src/uharfbuzz/_buffer.pxi":153
 *             info = GlyphInfo()
 *             info.set(glyph_infos[i])
 *             infos.append(info)             # <<<<<<<<<<<<<<
 *         return infos
 * 
*/
    __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_infos, ((PyObject *)__pyx_v_info)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(7, 153, __pyx_L1_error)
  }

  /* "src/uharfbuzz/_buffer.pxi":154
 *             info.set(glyph_infos[i])
 *             infos.append(info)
 *         return infos             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_infos);
  __pyx_r = __pyx_v_infos;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":142
 *             self._hb_buffer, hb_direction_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_infos(self) -> List[GlyphInfo]:
 *         cdef unsigned int count
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.glyph_infos.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infos);
  __Pyx_XDECREF((PyObject *)__pyx_v_info);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":156
 *         return infos
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_positions(self) -> List[GlyphPosition]:
 *         cdef unsigned int count
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  unsigned int __pyx_v_count;
  hb_glyph_position_t *__pyx_v_glyph_positions;
  PyObject *__pyx_v_positions = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *__pyx_v_position = 0;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":160
 *         cdef unsigned int count
 *         cdef hb_glyph_position_t* glyph_positions = \
 *             hb_buffer_get_glyph_positions(self._hb_buffer, &count)             # <<<<<<<<<<<<<<
 *         if glyph_positions is NULL:
 *             return None
*/
  __pyx_v_glyph_positions = hb_buffer_get_glyph_positions(__pyx_v_self->_hb_buffer, (&__pyx_v_count));

  /* "src/uharfbuzz/_buffer.pxi":161
 *         cdef hb_glyph_position_t* glyph_positions = \
 *             hb_buffer_get_glyph_positions(self._hb_buffer, &count)
 *         if glyph_positions is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         cdef list positions = []
*/
  __pyx_t_1 = (__pyx_v_glyph_positions == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_buffer.pxi":162
 *             hb_buffer_get_glyph_positions(self._hb_buffer, &count)
 *         if glyph_positions is NULL:
 *             return None             # <<<<<<<<<<<<<<
 *         cdef list positions = []
 *         cdef GlyphPosition position
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_buffer.pxi":161
 *         cdef hb_glyph_position_t* glyph_positions = \
 *             hb_buffer_get_glyph_positions(self._hb_buffer, &count)
 *         if glyph_positions is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         cdef list positions = []
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":163
 *         if glyph_positions is NULL:
 *             return None
 *         cdef list positions = []             # <<<<<<<<<<<<<<
 *         cdef GlyphPosition position
 *         cdef unsigned int i
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_positions = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":166
 *         cdef GlyphPosition position
 *         cdef unsigned int i
 *         for i in range(count):             # <<<<<<<<<<<<<<
 *             position = GlyphPosition()
 *             position.set(glyph_positions[i])
*/
  __pyx_t_3 = __pyx_v_count;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "src/uharfbuzz/_buffer.pxi":167
 *         cdef unsigned int i
 *         for i in range(count):
 *             position = GlyphPosition()             # <<<<<<<<<<<<<<
 *             position.set(glyph_positions[i])
 *             positions.append(position)
*/
    __pyx_t_6 = NULL;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 167, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_2);
    }
    __Pyx_XDECREF_SET(__pyx_v_position, ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "src/uharfbuzz/_buffer.pxi":168
 *         for i in range(count):
 *             position = GlyphPosition()
 *             position.set(glyph_positions[i])             # <<<<<<<<<<<<<<
 *             positions.append(position)
 *         return positions
*/
    __pyx_t_2 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphPosition *)__pyx_v_position->__pyx_vtab)->set(__pyx_v_position, (__pyx_v_glyph_positions[__pyx_v_i])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "src/uharfbuzz/_buffer.pxi":169
 *             position = GlyphPosition()
 *             position.set(glyph_positions[i])
 *             positions.append(position)             # <<<<<<<<<<<<<<
 *         return positions
 * 
*/
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_positions, ((PyObject *)__pyx_v_position)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(7, 169, __pyx_L1_error)
  }

  /* "src/uharfbuzz/_buffer.pxi":170
 *             position.set(glyph_positions[i])
 *             positions.append(position)
 *         return positions             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_positions);
  __pyx_r = __pyx_v_positions;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":156
 *         return infos
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_positions(self) -> List[GlyphPosition]:
 *         cdef unsigned int count
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.glyph_positions.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_positions);
  __Pyx_XDECREF((PyObject *)__pyx_v_position);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":172
 *         return positions
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def language(self) -> str:
 *         cdef const_char* cstr = hb_language_to_string(
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  const char *__pyx_v_cstr;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":174
 *     @property
 *     def language(self) -> str:
 *         cdef const_char* cstr = hb_language_to_string(             # <<<<<<<<<<<<<<
 *             hb_buffer_get_language(self._hb_buffer))
 *         if cstr is NULL:
*/
  __pyx_v_cstr = hb_language_to_string(hb_buffer_get_language(__pyx_v_self->_hb_buffer));

  /* "src/uharfbuzz/_buffer.pxi":176
 *         cdef const_char* cstr = hb_language_to_string(
 *             hb_buffer_get_language(self._hb_buffer))
 *         if cstr is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         cdef bytes packed = cstr
*/
  __pyx_t_1 = (__pyx_v_cstr == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_buffer.pxi":177
 *             hb_buffer_get_language(self._hb_buffer))
 *         if cstr is NULL:
 *             return None             # <<<<<<<<<<<<<<
 *         cdef bytes packed = cstr
 *         return packed.decode()
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_buffer.pxi":176
 *         cdef const_char* cstr = hb_language_to_string(
 *             hb_buffer_get_language(self._hb_buffer))
 *         if cstr is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         cdef bytes packed = cstr
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":178
 *         if cstr is NULL:
 *             return None
 *         cdef bytes packed = cstr             # <<<<<<<<<<<<<<
 *         return packed.decode()
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_packed = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":179
 *             return None
 *         cdef bytes packed = cstr
 *         return packed.decode()             # <<<<<<<<<<<<<<
 * 
 *     @language.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 179, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":172
 *         return positions
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def language(self) -> str:
 *         cdef const_char* cstr = hb_language_to_string(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.language.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":181
 *         return packed.decode()
 * 
 *     @language.setter             # <<<<<<<<<<<<<<
 *     def language(self, value: str):
 *         cdef bytes packed = value.encode()
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 0, "value", 2))) __PYX_ERR(7, 182, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_8language_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":183
 *     @language.setter
 *     def language(self, value: str):
 *         cdef bytes packed = value.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         hb_buffer_set_language(
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_value, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":184
 *     def language(self, value: str):
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         hb_buffer_set_language(
 *             self._hb_buffer, hb_language_from_string(cstr, -1))
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(7, 184, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_buffer.pxi":185
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
 *         hb_buffer_set_language(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_language_from_string(cstr, -1))
 * 
*/
  hb_buffer_set_language(__pyx_v_self->_hb_buffer, hb_language_from_string(__pyx_v_cstr, -1));

  /* "src/uharfbuzz/_buffer.pxi":181
 *         return packed.decode()
 * 
 *     @language.setter             # <<<<<<<<<<<<<<
 *     def language(self, value: str):
 *         cdef bytes packed = value.encode()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.language.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":188
 *             self._hb_buffer, hb_language_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def script(self) -> str:
 *         cdef char cstr[5]
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  char __pyx_v_cstr[5];
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":191
 *     def script(self) -> str:
 *         cdef char cstr[5]
 *         hb_tag_to_string(hb_buffer_get_script(self._hb_buffer), cstr)             # <<<<<<<<<<<<<<
 *         cstr[4] = b'\0'
 *         if cstr[0] == b'\0':
*/
  hb_tag_to_string(hb_buffer_get_script(__pyx_v_self->_hb_buffer), __pyx_v_cstr);

  /* "src/uharfbuzz/_buffer.pxi":192
 *         cdef char cstr[5]
 *         hb_tag_to_string(hb_buffer_get_script(self._hb_buffer), cstr)
 *         cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *         if cstr[0] == b'\0':
 *             return None
*/
  (__pyx_v_cstr[4]) = '\x00';

  /* "src/uharfbuzz/_buffer.pxi":193
 *         hb_tag_to_string(hb_buffer_get_script(self._hb_buffer), cstr)
 *         cstr[4] = b'\0'
 *         if cstr[0] == b'\0':             # <<<<<<<<<<<<<<
 *             return None
 *         cdef bytes packed = cstr
*/
  __pyx_t_1 = ((__pyx_v_cstr[0]) == '\x00');
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_buffer.pxi":194
 *         cstr[4] = b'\0'
 *         if cstr[0] == b'\0':
 *             return None             # <<<<<<<<<<<<<<
 *         cdef bytes packed = cstr
 *         return packed.decode()
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_buffer.pxi":193
 *         hb_tag_to_string(hb_buffer_get_script(self._hb_buffer), cstr)
 *         cstr[4] = b'\0'
 *         if cstr[0] == b'\0':             # <<<<<<<<<<<<<<
 *             return None
 *         cdef bytes packed = cstr
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":195
 *         if cstr[0] == b'\0':
 *             return None
 *         cdef bytes packed = cstr             # <<<<<<<<<<<<<<
 *         return packed.decode()
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 195, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_packed = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":196
 *             return None
 *         cdef bytes packed = cstr
 *         return packed.decode()             # <<<<<<<<<<<<<<
 * 
 *     @script.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":188
 *             self._hb_buffer, hb_language_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def script(self) -> str:
 *         cdef char cstr[5]
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.script.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":198
 *         return packed.decode()
 * 
 *     @script.setter             # <<<<<<<<<<<<<<
 *     def script(self, value: str):
 *         cdef bytes packed = value.encode()
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 0, "value", 2))) __PYX_ERR(7, 199, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_6script_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":200
 *     @script.setter
 *     def script(self, value: str):
 *         cdef bytes packed = value.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         # all the *_from_string calls should probably be checked and throw an
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_value, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":201
 *     def script(self, value: str):
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         # all the *_from_string calls should probably be checked and throw an
 *         # exception if invalid
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(7, 201, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_buffer.pxi":204
 *         # all the *_from_string calls should probably be checked and throw an
 *         # exception if invalid
 *         hb_buffer_set_script(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_script_from_string(cstr, -1))
 * 
*/
  hb_buffer_set_script(__pyx_v_self->_hb_buffer, hb_script_from_string(__pyx_v_cstr, -1));

  /* "src/uharfbuzz/_buffer.pxi":198
 *         return packed.decode()
 * 
 *     @script.setter             # <<<<<<<<<<<<<<
 *     def script(self, value: str):
 *         cdef bytes packed = value.encode()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.script.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":207
 *             self._hb_buffer, hb_script_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> BufferFlags:
 *         level = hb_buffer_get_flags(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  hb_buffer_flags_t __pyx_v_level;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":209
 *     @property
 *     def flags(self) -> BufferFlags:
 *         level = hb_buffer_get_flags(self._hb_buffer)             # <<<<<<<<<<<<<<
 *         return BufferFlags(level)
 * 
*/
  __pyx_v_level = hb_buffer_get_flags(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":210
 *     def flags(self) -> BufferFlags:
 *         level = hb_buffer_get_flags(self._hb_buffer)
 *         return BufferFlags(level)             # <<<<<<<<<<<<<<
 * 
 *     @flags.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferFlags); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_flags_t(__pyx_v_level); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 210, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":207
 *             self._hb_buffer, hb_script_from_string(cstr, -1))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> BufferFlags:
 *         level = hb_buffer_get_flags(self._hb_buffer)
*/

  /* 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("uharfbuzz._harfbuzz.Buffer.flags.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":212
 *         return BufferFlags(level)
 * 
 *     @flags.setter             # <<<<<<<<<<<<<<
 *     def flags(self, value: BufferFlags):
 *         level = BufferFlags(value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_5flags_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_level = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  hb_buffer_flags_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":214
 *     @flags.setter
 *     def flags(self, value: BufferFlags):
 *         level = BufferFlags(value)             # <<<<<<<<<<<<<<
 *         hb_buffer_set_flags(self._hb_buffer, level)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferFlags); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_level = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":215
 *     def flags(self, value: BufferFlags):
 *         level = BufferFlags(value)
 *         hb_buffer_set_flags(self._hb_buffer, level)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_5 = ((hb_buffer_flags_t)__Pyx_PyLong_As_hb_buffer_flags_t(__pyx_v_level)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 215, __pyx_L1_error)
  hb_buffer_set_flags(__pyx_v_self->_hb_buffer, __pyx_t_5);

  /* "src/uharfbuzz/_buffer.pxi":212
 *         return BufferFlags(level)
 * 
 *     @flags.setter             # <<<<<<<<<<<<<<
 *     def flags(self, value: BufferFlags):
 *         level = BufferFlags(value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.flags.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_level);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":217
 *         hb_buffer_set_flags(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster_level(self) -> BufferClusterLevel:
 *         level = hb_buffer_get_cluster_level(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  hb_buffer_cluster_level_t __pyx_v_level;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":219
 *     @property
 *     def cluster_level(self) -> BufferClusterLevel:
 *         level = hb_buffer_get_cluster_level(self._hb_buffer)             # <<<<<<<<<<<<<<
 *         return BufferClusterLevel(level)
 * 
*/
  __pyx_v_level = hb_buffer_get_cluster_level(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":220
 *     def cluster_level(self) -> BufferClusterLevel:
 *         level = hb_buffer_get_cluster_level(self._hb_buffer)
 *         return BufferClusterLevel(level)             # <<<<<<<<<<<<<<
 * 
 *     @cluster_level.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(__pyx_v_level); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 220, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":217
 *         hb_buffer_set_flags(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def cluster_level(self) -> BufferClusterLevel:
 *         level = hb_buffer_get_cluster_level(self._hb_buffer)
*/

  /* 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("uharfbuzz._harfbuzz.Buffer.cluster_level.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":222
 *         return BufferClusterLevel(level)
 * 
 *     @cluster_level.setter             # <<<<<<<<<<<<<<
 *     def cluster_level(self, value: BufferClusterLevel):
 *         level = BufferClusterLevel(value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_level = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  hb_buffer_cluster_level_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":224
 *     @cluster_level.setter
 *     def cluster_level(self, value: BufferClusterLevel):
 *         level = BufferClusterLevel(value)             # <<<<<<<<<<<<<<
 *         hb_buffer_set_cluster_level(self._hb_buffer, level)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_level = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":225
 *     def cluster_level(self, value: BufferClusterLevel):
 *         level = BufferClusterLevel(value)
 *         hb_buffer_set_cluster_level(self._hb_buffer, level)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_5 = ((hb_buffer_cluster_level_t)__Pyx_PyLong_As_hb_buffer_cluster_level_t(__pyx_v_level)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 225, __pyx_L1_error)
  hb_buffer_set_cluster_level(__pyx_v_self->_hb_buffer, __pyx_t_5);

  /* "src/uharfbuzz/_buffer.pxi":222
 *         return BufferClusterLevel(level)
 * 
 *     @cluster_level.setter             # <<<<<<<<<<<<<<
 *     def cluster_level(self, value: BufferClusterLevel):
 *         level = BufferClusterLevel(value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.cluster_level.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_level);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":227
 *         hb_buffer_set_cluster_level(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def content_type(self) -> BufferContentType:
 *         level = hb_buffer_get_content_type(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  hb_buffer_content_type_t __pyx_v_level;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":229
 *     @property
 *     def content_type(self) -> BufferContentType:
 *         level = hb_buffer_get_content_type(self._hb_buffer)             # <<<<<<<<<<<<<<
 *         return BufferContentType(level)
 * 
*/
  __pyx_v_level = hb_buffer_get_content_type(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":230
 *     def content_type(self) -> BufferContentType:
 *         level = hb_buffer_get_content_type(self._hb_buffer)
 *         return BufferContentType(level)             # <<<<<<<<<<<<<<
 * 
 *     @content_type.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferContentType); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_content_type_t(__pyx_v_level); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 230, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":227
 *         hb_buffer_set_cluster_level(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def content_type(self) -> BufferContentType:
 *         level = hb_buffer_get_content_type(self._hb_buffer)
*/

  /* 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("uharfbuzz._harfbuzz.Buffer.content_type.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":232
 *         return BufferContentType(level)
 * 
 *     @content_type.setter             # <<<<<<<<<<<<<<
 *     def content_type(self, value: BufferContentType):
 *         level = BufferContentType(value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_level = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  hb_buffer_content_type_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_buffer.pxi":234
 *     @content_type.setter
 *     def content_type(self, value: BufferContentType):
 *         level = BufferContentType(value)             # <<<<<<<<<<<<<<
 *         hb_buffer_set_content_type(self._hb_buffer, level)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_BufferContentType); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_value};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 234, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_level = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":235
 *     def content_type(self, value: BufferContentType):
 *         level = BufferContentType(value)
 *         hb_buffer_set_content_type(self._hb_buffer, level)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_5 = ((hb_buffer_content_type_t)__Pyx_PyLong_As_hb_buffer_content_type_t(__pyx_v_level)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 235, __pyx_L1_error)
  hb_buffer_set_content_type(__pyx_v_self->_hb_buffer, __pyx_t_5);

  /* "src/uharfbuzz/_buffer.pxi":232
 *         return BufferContentType(level)
 * 
 *     @content_type.setter             # <<<<<<<<<<<<<<
 *     def content_type(self, value: BufferContentType):
 *         level = BufferContentType(value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.content_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_level);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":237
 *         hb_buffer_set_content_type(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def replacement_codepoint(self) -> int:
 *         return hb_buffer_get_replacement_codepoint(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":239
 *     @property
 *     def replacement_codepoint(self) -> int:
 *         return hb_buffer_get_replacement_codepoint(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     @replacement_codepoint.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(hb_buffer_get_replacement_codepoint(__pyx_v_self->_hb_buffer)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":237
 *         hb_buffer_set_content_type(self._hb_buffer, level)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def replacement_codepoint(self) -> int:
 *         return hb_buffer_get_replacement_codepoint(self._hb_buffer)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.replacement_codepoint.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":241
 *         return hb_buffer_get_replacement_codepoint(self._hb_buffer)
 * 
 *     @replacement_codepoint.setter             # <<<<<<<<<<<<<<
 *     def replacement_codepoint(self, value: int):
 *         hb_buffer_set_replacement_codepoint(self._hb_buffer, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(7, 242, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  hb_codepoint_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_buffer.pxi":243
 *     @replacement_codepoint.setter
 *     def replacement_codepoint(self, value: int):
 *         hb_buffer_set_replacement_codepoint(self._hb_buffer, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(7, 243, __pyx_L1_error)
  hb_buffer_set_replacement_codepoint(__pyx_v_self->_hb_buffer, __pyx_t_1);

  /* "src/uharfbuzz/_buffer.pxi":241
 *         return hb_buffer_get_replacement_codepoint(self._hb_buffer)
 * 
 *     @replacement_codepoint.setter             # <<<<<<<<<<<<<<
 *     def replacement_codepoint(self, value: int):
 *         hb_buffer_set_replacement_codepoint(self._hb_buffer, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.replacement_codepoint.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":245
 *         hb_buffer_set_replacement_codepoint(self._hb_buffer, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def invisible_glyph(self) -> int:
 *         return hb_buffer_get_invisible_glyph(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":247
 *     @property
 *     def invisible_glyph(self) -> int:
 *         return hb_buffer_get_invisible_glyph(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     @invisible_glyph.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(hb_buffer_get_invisible_glyph(__pyx_v_self->_hb_buffer)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 247, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":245
 *         hb_buffer_set_replacement_codepoint(self._hb_buffer, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def invisible_glyph(self) -> int:
 *         return hb_buffer_get_invisible_glyph(self._hb_buffer)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.invisible_glyph.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":249
 *         return hb_buffer_get_invisible_glyph(self._hb_buffer)
 * 
 *     @invisible_glyph.setter             # <<<<<<<<<<<<<<
 *     def invisible_glyph(self, value: int):
 *         hb_buffer_set_invisible_glyph(self._hb_buffer, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(7, 250, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  hb_codepoint_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_buffer.pxi":251
 *     @invisible_glyph.setter
 *     def invisible_glyph(self, value: int):
 *         hb_buffer_set_invisible_glyph(self._hb_buffer, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(7, 251, __pyx_L1_error)
  hb_buffer_set_invisible_glyph(__pyx_v_self->_hb_buffer, __pyx_t_1);

  /* "src/uharfbuzz/_buffer.pxi":249
 *         return hb_buffer_get_invisible_glyph(self._hb_buffer)
 * 
 *     @invisible_glyph.setter             # <<<<<<<<<<<<<<
 *     def invisible_glyph(self, value: int):
 *         hb_buffer_set_invisible_glyph(self._hb_buffer, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.invisible_glyph.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":253
 *         hb_buffer_set_invisible_glyph(self._hb_buffer, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def not_found_glyph(self) -> int:
 *         return hb_buffer_get_not_found_glyph(self._hb_buffer)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_buffer.pxi":255
 *     @property
 *     def not_found_glyph(self) -> int:
 *         return hb_buffer_get_not_found_glyph(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     @not_found_glyph.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t(hb_buffer_get_not_found_glyph(__pyx_v_self->_hb_buffer)); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 255, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":253
 *         hb_buffer_set_invisible_glyph(self._hb_buffer, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def not_found_glyph(self) -> int:
 *         return hb_buffer_get_not_found_glyph(self._hb_buffer)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.not_found_glyph.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":257
 *         return hb_buffer_get_not_found_glyph(self._hb_buffer)
 * 
 *     @not_found_glyph.setter             # <<<<<<<<<<<<<<
 *     def not_found_glyph(self, value: int):
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(7, 258, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  hb_codepoint_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_buffer.pxi":259
 *     @not_found_glyph.setter
 *     def not_found_glyph(self, value: int):
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)             # <<<<<<<<<<<<<<
 * 
 *     def set_language_from_ot_tag(self, value: str):
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(7, 259, __pyx_L1_error)
  hb_buffer_set_not_found_glyph(__pyx_v_self->_hb_buffer, __pyx_t_1);

  /* "src/uharfbuzz/_buffer.pxi":257
 *         return hb_buffer_get_not_found_glyph(self._hb_buffer)
 * 
 *     @not_found_glyph.setter             # <<<<<<<<<<<<<<
 *     def not_found_glyph(self, value: int):
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.not_found_glyph.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":261
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)
 * 
 *     def set_language_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag = {"set_language_from_ot_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_value = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_language_from_ot_tag (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 261, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 261, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_language_from_ot_tag", 0) < (0)) __PYX_ERR(7, 261, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_language_from_ot_tag", 1, 1, 1, i); __PYX_ERR(7, 261, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 261, __pyx_L3_error)
    }
    __pyx_v_value = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_language_from_ot_tag", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 261, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.set_language_from_ot_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 0, "value", 2))) __PYX_ERR(7, 261, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12set_language_from_ot_tag(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_value);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_12set_language_from_ot_tag(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_language_from_ot_tag", 0);

  /* "src/uharfbuzz/_buffer.pxi":262
 * 
 *     def set_language_from_ot_tag(self, value: str):
 *         cdef bytes packed = value.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         hb_buffer_set_language(
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_value, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":263
 *     def set_language_from_ot_tag(self, value: str):
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         hb_buffer_set_language(
 *             self._hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(cstr, -1)))
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(7, 263, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_buffer.pxi":264
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
 *         hb_buffer_set_language(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(cstr, -1)))
 * 
*/
  hb_buffer_set_language(__pyx_v_self->_hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(__pyx_v_cstr, -1)));

  /* "src/uharfbuzz/_buffer.pxi":261
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)
 * 
 *     def set_language_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.set_language_from_ot_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":267
 *             self._hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(cstr, -1)))
 * 
 *     def set_script_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag = {"set_script_from_ot_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_value = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_script_from_ot_tag (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 267, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 267, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_script_from_ot_tag", 0) < (0)) __PYX_ERR(7, 267, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_script_from_ot_tag", 1, 1, 1, i); __PYX_ERR(7, 267, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 267, __pyx_L3_error)
    }
    __pyx_v_value = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_script_from_ot_tag", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 267, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.set_script_from_ot_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyUnicode_Type), 0, "value", 2))) __PYX_ERR(7, 267, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_14set_script_from_ot_tag(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_value);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_14set_script_from_ot_tag(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_script_from_ot_tag", 0);

  /* "src/uharfbuzz/_buffer.pxi":268
 * 
 *     def set_script_from_ot_tag(self, value: str):
 *         cdef bytes packed = value.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         hb_buffer_set_script(
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_value, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_buffer.pxi":269
 *     def set_script_from_ot_tag(self, value: str):
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         hb_buffer_set_script(
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(7, 269, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_buffer.pxi":270
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
 *         hb_buffer_set_script(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
 * 
*/
  hb_buffer_set_script(__pyx_v_self->_hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(__pyx_v_cstr, -1)));

  /* "src/uharfbuzz/_buffer.pxi":267
 *             self._hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(cstr, -1)))
 * 
 *     def set_script_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.set_script_from_ot_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":273
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
 * 
 *     def add_codepoints(self, codepoints: List[int],             # <<<<<<<<<<<<<<
 *                        item_offset: int = 0, item_length: int = -1):
 *         cdef unsigned int size = len(codepoints)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints = {"add_codepoints", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_codepoints = 0;
  PyObject *__pyx_v_item_offset = 0;
  PyObject *__pyx_v_item_length = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_codepoints (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_codepoints,&__pyx_mstate_global->__pyx_n_u_item_offset,&__pyx_mstate_global->__pyx_n_u_item_length,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 273, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 273, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 273, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 273, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "add_codepoints", 0) < (0)) __PYX_ERR(7, 273, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_codepoints", 0, 1, 3, i); __PYX_ERR(7, 273, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 273, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 273, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 273, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
    }
    __pyx_v_codepoints = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "item_offset", 0) < (0)) __PYX_ERR(7, 274, __pyx_L3_error)
    __pyx_v_item_offset = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "item_length", 0) < (0)) __PYX_ERR(7, 274, __pyx_L3_error)
    __pyx_v_item_length = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_codepoints", 0, 1, 3, __pyx_nargs); __PYX_ERR(7, 273, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_codepoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_codepoints), (&PyList_Type), 0, "codepoints", 2))) __PYX_ERR(7, 273, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_offset), (&PyLong_Type), 0, "item_offset", 2))) __PYX_ERR(7, 274, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_length), (&PyLong_Type), 0, "item_length", 2))) __PYX_ERR(7, 274, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_16add_codepoints(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_codepoints, __pyx_v_item_offset, __pyx_v_item_length);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_16add_codepoints(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_codepoints, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length) {
  unsigned int __pyx_v_size;
  hb_codepoint_t *__pyx_v_hb_codepoints;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  hb_codepoint_t __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_codepoints", 0);

  /* "src/uharfbuzz/_buffer.pxi":275
 *     def add_codepoints(self, codepoints: List[int],
 *                        item_offset: int = 0, item_length: int = -1):
 *         cdef unsigned int size = len(codepoints)             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t* hb_codepoints
 *         if not size:
*/
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_codepoints); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(7, 275, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;

  /* "src/uharfbuzz/_buffer.pxi":277
 *         cdef unsigned int size = len(codepoints)
 *         cdef hb_codepoint_t* hb_codepoints
 *         if not size:             # <<<<<<<<<<<<<<
 *             return
 *         hb_codepoints = <hb_codepoint_t*>malloc(
*/
  __pyx_t_2 = (!(__pyx_v_size != 0));
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_buffer.pxi":278
 *         cdef hb_codepoint_t* hb_codepoints
 *         if not size:
 *             return             # <<<<<<<<<<<<<<
 *         hb_codepoints = <hb_codepoint_t*>malloc(
 *             size * sizeof(hb_codepoint_t))
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_buffer.pxi":277
 *         cdef unsigned int size = len(codepoints)
 *         cdef hb_codepoint_t* hb_codepoints
 *         if not size:             # <<<<<<<<<<<<<<
 *             return
 *         hb_codepoints = <hb_codepoint_t*>malloc(
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":279
 *         if not size:
 *             return
 *         hb_codepoints = <hb_codepoint_t*>malloc(             # <<<<<<<<<<<<<<
 *             size * sizeof(hb_codepoint_t))
 *         for i in range(size):
*/
  __pyx_v_hb_codepoints = ((hb_codepoint_t *)malloc((__pyx_v_size * (sizeof(hb_codepoint_t)))));

  /* "src/uharfbuzz/_buffer.pxi":281
 *         hb_codepoints = <hb_codepoint_t*>malloc(
 *             size * sizeof(hb_codepoint_t))
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             hb_codepoints[i] = codepoints[i]
 *         hb_buffer_add_codepoints(
*/
  __pyx_t_3 = __pyx_v_size;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "src/uharfbuzz/_buffer.pxi":282
 *             size * sizeof(hb_codepoint_t))
 *         for i in range(size):
 *             hb_codepoints[i] = codepoints[i]             # <<<<<<<<<<<<<<
 *         hb_buffer_add_codepoints(
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)
*/
    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_codepoints, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_t_6); if (unlikely((__pyx_t_7 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(7, 282, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    (__pyx_v_hb_codepoints[__pyx_v_i]) = __pyx_t_7;
  }

  /* "src/uharfbuzz/_buffer.pxi":284
 *             hb_codepoints[i] = codepoints[i]
 *         hb_buffer_add_codepoints(
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)             # <<<<<<<<<<<<<<
 *         free(hb_codepoints)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
*/
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_item_offset); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(7, 284, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_v_item_length); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 284, __pyx_L1_error)

  /* "src/uharfbuzz/_buffer.pxi":283
 *         for i in range(size):
 *             hb_codepoints[i] = codepoints[i]
 *         hb_buffer_add_codepoints(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)
 *         free(hb_codepoints)
*/
  hb_buffer_add_codepoints(__pyx_v_self->_hb_buffer, __pyx_v_hb_codepoints, __pyx_v_size, __pyx_t_3, __pyx_t_8);

  /* "src/uharfbuzz/_buffer.pxi":285
 *         hb_buffer_add_codepoints(
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)
 *         free(hb_codepoints)             # <<<<<<<<<<<<<<
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()
*/
  free(__pyx_v_hb_codepoints);

  /* "src/uharfbuzz/_buffer.pxi":286
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)
 *         free(hb_codepoints)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(hb_buffer_allocation_successful(__pyx_v_self->_hb_buffer) != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_buffer.pxi":287
 *         free(hb_codepoints)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def add_utf8(self, text: bytes,
*/
    PyErr_NoMemory(); __PYX_ERR(7, 287, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":286
 *             self._hb_buffer, hb_codepoints, size, item_offset, item_length)
 *         free(hb_codepoints)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":273
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
 * 
 *     def add_codepoints(self, codepoints: List[int],             # <<<<<<<<<<<<<<
 *                        item_offset: int = 0, item_length: int = -1):
 *         cdef unsigned int size = len(codepoints)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_codepoints", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":289
 *             raise MemoryError()
 * 
 *     def add_utf8(self, text: bytes,             # <<<<<<<<<<<<<<
 *                  item_offset: int = 0, item_length: int = -1):
 *         hb_buffer_add_utf8(
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8 = {"add_utf8", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_text = 0;
  PyObject *__pyx_v_item_offset = 0;
  PyObject *__pyx_v_item_length = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_utf8 (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_text,&__pyx_mstate_global->__pyx_n_u_item_offset,&__pyx_mstate_global->__pyx_n_u_item_length,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 289, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 289, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 289, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 289, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "add_utf8", 0) < (0)) __PYX_ERR(7, 289, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_utf8", 0, 1, 3, i); __PYX_ERR(7, 289, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 289, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 289, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 289, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
    }
    __pyx_v_text = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "item_offset", 0) < (0)) __PYX_ERR(7, 290, __pyx_L3_error)
    __pyx_v_item_offset = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "item_length", 0) < (0)) __PYX_ERR(7, 290, __pyx_L3_error)
    __pyx_v_item_length = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_utf8", 0, 1, 3, __pyx_nargs); __PYX_ERR(7, 289, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_text), (&PyBytes_Type), 0, "text", 2))) __PYX_ERR(7, 289, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_offset), (&PyLong_Type), 0, "item_offset", 2))) __PYX_ERR(7, 290, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_length), (&PyLong_Type), 0, "item_length", 2))) __PYX_ERR(7, 290, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_18add_utf8(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_text, __pyx_v_item_offset, __pyx_v_item_length);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_18add_utf8(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  char const *__pyx_t_1;
  Py_ssize_t __pyx_t_2;
  unsigned int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_utf8", 0);

  /* "src/uharfbuzz/_buffer.pxi":292
 *                  item_offset: int = 0, item_length: int = -1):
 *         hb_buffer_add_utf8(
 *             self._hb_buffer, text, len(text), item_offset, item_length)             # <<<<<<<<<<<<<<
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyBytes_AsString(__pyx_v_text); if (unlikely((!__pyx_t_1) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBytes_GET_SIZE(__pyx_v_text); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(7, 292, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_item_offset); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_v_item_length); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 292, __pyx_L1_error)

  /* "src/uharfbuzz/_buffer.pxi":291
 *     def add_utf8(self, text: bytes,
 *                  item_offset: int = 0, item_length: int = -1):
 *         hb_buffer_add_utf8(             # <<<<<<<<<<<<<<
 *             self._hb_buffer, text, len(text), item_offset, item_length)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
*/
  hb_buffer_add_utf8(__pyx_v_self->_hb_buffer, __pyx_t_1, __pyx_t_2, __pyx_t_3, __pyx_t_4);

  /* "src/uharfbuzz/_buffer.pxi":293
 *         hb_buffer_add_utf8(
 *             self._hb_buffer, text, len(text), item_offset, item_length)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_5 = (!(hb_buffer_allocation_successful(__pyx_v_self->_hb_buffer) != 0));
  if (unlikely(__pyx_t_5)) {

    /* "src/uharfbuzz/_buffer.pxi":294
 *             self._hb_buffer, text, len(text), item_offset, item_length)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def add_str(self, text: str,
*/
    PyErr_NoMemory(); __PYX_ERR(7, 294, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":293
 *         hb_buffer_add_utf8(
 *             self._hb_buffer, text, len(text), item_offset, item_length)
 *         if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":289
 *             raise MemoryError()
 * 
 *     def add_utf8(self, text: bytes,             # <<<<<<<<<<<<<<
 *                  item_offset: int = 0, item_length: int = -1):
 *         hb_buffer_add_utf8(
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_utf8", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":296
 *             raise MemoryError()
 * 
 *     def add_str(self, text: str,             # <<<<<<<<<<<<<<
 *                 item_offset: int = 0, item_length: int = -1):
 *         cdef Py_UCS4* ucs4_buffer
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21add_str(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_21add_str = {"add_str", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21add_str, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21add_str(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_text = 0;
  PyObject *__pyx_v_item_offset = 0;
  PyObject *__pyx_v_item_length = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("add_str (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_text,&__pyx_mstate_global->__pyx_n_u_item_offset,&__pyx_mstate_global->__pyx_n_u_item_length,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 296, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 296, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 296, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 296, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "add_str", 0) < (0)) __PYX_ERR(7, 296, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_str", 0, 1, 3, i); __PYX_ERR(7, 296, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 296, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 296, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 296, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_neg_1));
    }
    __pyx_v_text = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "item_offset", 0) < (0)) __PYX_ERR(7, 297, __pyx_L3_error)
    __pyx_v_item_offset = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "item_length", 0) < (0)) __PYX_ERR(7, 297, __pyx_L3_error)
    __pyx_v_item_length = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_str", 0, 1, 3, __pyx_nargs); __PYX_ERR(7, 296, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_text), (&PyUnicode_Type), 0, "text", 2))) __PYX_ERR(7, 296, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_offset), (&PyLong_Type), 0, "item_offset", 2))) __PYX_ERR(7, 297, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_item_length), (&PyLong_Type), 0, "item_length", 2))) __PYX_ERR(7, 297, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_20add_str(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_text, __pyx_v_item_offset, __pyx_v_item_length);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_20add_str(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_text, PyObject *__pyx_v_item_offset, PyObject *__pyx_v_item_length) {
  Py_UCS4 *__pyx_v_ucs4_buffer;
  Py_ssize_t __pyx_v_text_length;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_UCS4 *__pyx_t_1;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  unsigned int __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  char const *__pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_str", 0);

  /* "src/uharfbuzz/_buffer.pxi":301
 *         cdef Py_ssize_t text_length
 * 
 *         ucs4_buffer = PyUnicode_AsUCS4Copy(text)             # <<<<<<<<<<<<<<
 *         if ucs4_buffer == NULL:
 *             raise MemoryError()
*/
  __pyx_t_1 = PyUnicode_AsUCS4Copy(__pyx_v_text); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(7, 301, __pyx_L1_error)
  __pyx_v_ucs4_buffer = __pyx_t_1;

  /* "src/uharfbuzz/_buffer.pxi":302
 * 
 *         ucs4_buffer = PyUnicode_AsUCS4Copy(text)
 *         if ucs4_buffer == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  __pyx_t_2 = (__pyx_v_ucs4_buffer == NULL);
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_buffer.pxi":303
 *         ucs4_buffer = PyUnicode_AsUCS4Copy(text)
 *         if ucs4_buffer == NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         try:
 *             text_length = PyUnicode_GetLength(text)
*/
    PyErr_NoMemory(); __PYX_ERR(7, 303, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":302
 * 
 *         ucs4_buffer = PyUnicode_AsUCS4Copy(text)
 *         if ucs4_buffer == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  }

  /* "src/uharfbuzz/_buffer.pxi":304
 *         if ucs4_buffer == NULL:
 *             raise MemoryError()
 *         try:             # <<<<<<<<<<<<<<
 *             text_length = PyUnicode_GetLength(text)
 *             if text_length == -1:
*/
  /*try:*/ {

    /* "src/uharfbuzz/_buffer.pxi":305
 *             raise MemoryError()
 *         try:
 *             text_length = PyUnicode_GetLength(text)             # <<<<<<<<<<<<<<
 *             if text_length == -1:
 *                 raise ValueError("Invalid Unicode string")
*/
    __pyx_t_3 = PyUnicode_GetLength(__pyx_v_text); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1L))) __PYX_ERR(7, 305, __pyx_L5_error)
    __pyx_v_text_length = __pyx_t_3;

    /* "src/uharfbuzz/_buffer.pxi":306
 *         try:
 *             text_length = PyUnicode_GetLength(text)
 *             if text_length == -1:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid Unicode string")
 *             hb_buffer_add_utf32(
*/
    __pyx_t_2 = (__pyx_v_text_length == -1L);
    if (unlikely(__pyx_t_2)) {

      /* "src/uharfbuzz/_buffer.pxi":307
 *             text_length = PyUnicode_GetLength(text)
 *             if text_length == -1:
 *                 raise ValueError("Invalid Unicode string")             # <<<<<<<<<<<<<<
 *             hb_buffer_add_utf32(
 *                 self._hb_buffer,
*/
      __pyx_t_5 = NULL;
      __pyx_t_6 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Invalid_Unicode_string};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 307, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_4);
      }
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(7, 307, __pyx_L5_error)

      /* "src/uharfbuzz/_buffer.pxi":306
 *         try:
 *             text_length = PyUnicode_GetLength(text)
 *             if text_length == -1:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid Unicode string")
 *             hb_buffer_add_utf32(
*/
    }

    /* "src/uharfbuzz/_buffer.pxi":312
 *                 <uint32_t*>ucs4_buffer,
 *                 text_length,
 *                 item_offset,             # <<<<<<<<<<<<<<
 *                 item_length
 *             )
*/
    __pyx_t_7 = __Pyx_PyLong_As_unsigned_int(__pyx_v_item_offset); if (unlikely((__pyx_t_7 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(7, 312, __pyx_L5_error)

    /* "src/uharfbuzz/_buffer.pxi":313
 *                 text_length,
 *                 item_offset,
 *                 item_length             # <<<<<<<<<<<<<<
 *             )
 *             if not hb_buffer_allocation_successful(self._hb_buffer):
*/
    __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_v_item_length); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 313, __pyx_L5_error)

    /* "src/uharfbuzz/_buffer.pxi":308
 *             if text_length == -1:
 *                 raise ValueError("Invalid Unicode string")
 *             hb_buffer_add_utf32(             # <<<<<<<<<<<<<<
 *                 self._hb_buffer,
 *                 <uint32_t*>ucs4_buffer,
*/
    hb_buffer_add_utf32(__pyx_v_self->_hb_buffer, ((uint32_t *)__pyx_v_ucs4_buffer), __pyx_v_text_length, __pyx_t_7, __pyx_t_8);

    /* "src/uharfbuzz/_buffer.pxi":315
 *                 item_length
 *             )
 *             if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *                 raise MemoryError()
 *         finally:
*/
    __pyx_t_2 = (!(hb_buffer_allocation_successful(__pyx_v_self->_hb_buffer) != 0));
    if (unlikely(__pyx_t_2)) {

      /* "src/uharfbuzz/_buffer.pxi":316
 *             )
 *             if not hb_buffer_allocation_successful(self._hb_buffer):
 *                 raise MemoryError()             # <<<<<<<<<<<<<<
 *         finally:
 *             PyMem_Free(ucs4_buffer)
*/
      PyErr_NoMemory(); __PYX_ERR(7, 316, __pyx_L5_error)

      /* "src/uharfbuzz/_buffer.pxi":315
 *                 item_length
 *             )
 *             if not hb_buffer_allocation_successful(self._hb_buffer):             # <<<<<<<<<<<<<<
 *                 raise MemoryError()
 *         finally:
*/
    }
  }

  /* "src/uharfbuzz/_buffer.pxi":318
 *                 raise MemoryError()
 *         finally:
 *             PyMem_Free(ucs4_buffer)             # <<<<<<<<<<<<<<
 * 
 *     def guess_segment_properties(self):
*/
  /*finally:*/ {
    /*normal exit:*/{
      PyMem_Free(__pyx_v_ucs4_buffer);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __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_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        PyMem_Free(__pyx_v_ucs4_buffer);
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "src/uharfbuzz/_buffer.pxi":296
 *             raise MemoryError()
 * 
 *     def add_str(self, text: str,             # <<<<<<<<<<<<<<
 *                 item_offset: int = 0, item_length: int = -1):
 *         cdef Py_UCS4* ucs4_buffer
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.Buffer.add_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":320
 *             PyMem_Free(ucs4_buffer)
 * 
 *     def guess_segment_properties(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties = {"guess_segment_properties", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("guess_segment_properties (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("guess_segment_properties", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("guess_segment_properties", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_22guess_segment_properties(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_22guess_segment_properties(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("guess_segment_properties", 0);

  /* "src/uharfbuzz/_buffer.pxi":321
 * 
 *     def guess_segment_properties(self):
 *         hb_buffer_guess_segment_properties(self._hb_buffer)             # <<<<<<<<<<<<<<
 * 
 *     def set_message_func(self, callback: Callable[str]):
*/
  hb_buffer_guess_segment_properties(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":320
 *             PyMem_Free(ucs4_buffer)
 * 
 *     def guess_segment_properties(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":323
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
 *     def set_message_func(self, callback: Callable[str]):             # <<<<<<<<<<<<<<
 *         self._message_callback = callback
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func = {"set_message_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_callback = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_message_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_callback,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 323, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 323, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_message_func", 0) < (0)) __PYX_ERR(7, 323, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_message_func", 1, 1, 1, i); __PYX_ERR(7, 323, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 323, __pyx_L3_error)
    }
    __pyx_v_callback = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_message_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(7, 323, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.set_message_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_24set_message_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_callback);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_24set_message_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, PyObject *__pyx_v_callback) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_message_func", 0);

  /* "src/uharfbuzz/_buffer.pxi":324
 * 
 *     def set_message_func(self, callback: Callable[str]):
 *         self._message_callback = callback             # <<<<<<<<<<<<<<
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
 * 
*/
  __Pyx_INCREF(__pyx_v_callback);
  __Pyx_GIVEREF(__pyx_v_callback);
  __Pyx_GOTREF(__pyx_v_self->_message_callback);
  __Pyx_DECREF(__pyx_v_self->_message_callback);
  __pyx_v_self->_message_callback = __pyx_v_callback;

  /* "src/uharfbuzz/_buffer.pxi":325
 *     def set_message_func(self, callback: Callable[str]):
 *         self._message_callback = callback
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)             # <<<<<<<<<<<<<<
 * 
 *     def serialize(self,
*/
  hb_buffer_set_message_func(__pyx_v_self->_hb_buffer, __pyx_f_9uharfbuzz_9_harfbuzz_msgcallback, ((void *)__pyx_v_callback), NULL);

  /* "src/uharfbuzz/_buffer.pxi":323
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
 *     def set_message_func(self, callback: Callable[str]):             # <<<<<<<<<<<<<<
 *         self._message_callback = callback
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_buffer.pxi":327
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
 * 
 *     def serialize(self,             # <<<<<<<<<<<<<<
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_27serialize(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_27serialize = {"serialize", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_27serialize, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_27serialize(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_format = 0;
  PyObject *__pyx_v_flags = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("serialize (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_format,&__pyx_mstate_global->__pyx_n_u_flags,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(7, 327, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 327, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 327, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 327, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "serialize", 0) < (0)) __PYX_ERR(7, 327, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__6);
      if (!values[2]) values[2] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__7);
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("serialize", 0, 1, 3, i); __PYX_ERR(7, 327, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 327, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 327, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(7, 327, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__6);
      if (!values[2]) values[2] = __Pyx_NewRef(__pyx_mstate_global->__pyx_k__7);
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    __pyx_v_format = values[1];
    __pyx_v_flags = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("serialize", 0, 1, 3, __pyx_nargs); __PYX_ERR(7, 327, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.serialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(7, 328, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_26serialize(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v_font, __pyx_v_format, __pyx_v_flags);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_26serialize(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_format, PyObject *__pyx_v_flags) {
  unsigned int __pyx_v_num_glyphs;
  unsigned int __pyx_v_start;
  char __pyx_v_cstr[128];
  unsigned int __pyx_v_consumed;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  hb_buffer_serialize_format_t __pyx_t_2;
  hb_buffer_serialize_flags_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("serialize", 0);

  /* "src/uharfbuzz/_buffer.pxi":331
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)             # <<<<<<<<<<<<<<
 *         cdef unsigned int start = 0
 *         cdef char cstr[STATIC_ARRAY_SIZE]
*/
  __pyx_v_num_glyphs = hb_buffer_get_length(__pyx_v_self->_hb_buffer);

  /* "src/uharfbuzz/_buffer.pxi":332
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)
 *         cdef unsigned int start = 0             # <<<<<<<<<<<<<<
 *         cdef char cstr[STATIC_ARRAY_SIZE]
 *         cdef unsigned int consumed
*/
  __pyx_v_start = 0;

  /* "src/uharfbuzz/_buffer.pxi":335
 *         cdef char cstr[STATIC_ARRAY_SIZE]
 *         cdef unsigned int consumed
 *         cdef bytes packed = b""             # <<<<<<<<<<<<<<
 * 
 *         while start < num_glyphs:
*/
  __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__5);
  __pyx_v_packed = __pyx_mstate_global->__pyx_kp_b__5;

  /* "src/uharfbuzz/_buffer.pxi":337
 *         cdef bytes packed = b""
 * 
 *         while start < num_glyphs:             # <<<<<<<<<<<<<<
 *             start += hb_buffer_serialize(
 *                 self._hb_buffer,
*/
  while (1) {
    __pyx_t_1 = (__pyx_v_start < __pyx_v_num_glyphs);
    if (!__pyx_t_1) break;

    /* "src/uharfbuzz/_buffer.pxi":346
 *                 &consumed,
 *                 font._hb_font,
 *                 format,             # <<<<<<<<<<<<<<
 *                 flags
 *             )
*/
    __pyx_t_2 = ((hb_buffer_serialize_format_t)__Pyx_PyLong_As_hb_buffer_serialize_format_t(__pyx_v_format)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 346, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":347
 *                 font._hb_font,
 *                 format,
 *                 flags             # <<<<<<<<<<<<<<
 *             )
 *             if consumed == 0:
*/
    __pyx_t_3 = ((hb_buffer_serialize_flags_t)__Pyx_PyLong_As_hb_buffer_serialize_flags_t(__pyx_v_flags)); if (unlikely(PyErr_Occurred())) __PYX_ERR(7, 347, __pyx_L1_error)

    /* "src/uharfbuzz/_buffer.pxi":338
 * 
 *         while start < num_glyphs:
 *             start += hb_buffer_serialize(             # <<<<<<<<<<<<<<
 *                 self._hb_buffer,
 *                 start,
*/
    __pyx_v_start = (__pyx_v_start + hb_buffer_serialize(__pyx_v_self->_hb_buffer, __pyx_v_start, __pyx_v_num_glyphs, __pyx_v_cstr, 0x80, (&__pyx_v_consumed), __pyx_v_font->_hb_font, __pyx_t_2, __pyx_t_3));

    /* "src/uharfbuzz/_buffer.pxi":349
 *                 flags
 *             )
 *             if consumed == 0:             # <<<<<<<<<<<<<<
 *                 break
 *             packed += cstr[:consumed]
*/
    __pyx_t_1 = (__pyx_v_consumed == 0);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_buffer.pxi":350
 *             )
 *             if consumed == 0:
 *                 break             # <<<<<<<<<<<<<<
 *             packed += cstr[:consumed]
 * 
*/
      goto __pyx_L4_break;

      /* "src/uharfbuzz/_buffer.pxi":349
 *                 flags
 *             )
 *             if consumed == 0:             # <<<<<<<<<<<<<<
 *                 break
 *             packed += cstr[:consumed]
*/
    }

    /* "src/uharfbuzz/_buffer.pxi":351
 *             if consumed == 0:
 *                 break
 *             packed += cstr[:consumed]             # <<<<<<<<<<<<<<
 * 
 *         return packed.decode()
*/
    __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_cstr + 0, __pyx_v_consumed - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyNumber_InPlaceAdd(__pyx_v_packed, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_5));
    __pyx_t_5 = 0;
  }
  __pyx_L4_break:;

  /* "src/uharfbuzz/_buffer.pxi":353
 *             packed += cstr[:consumed]
 * 
 *         return packed.decode()             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_buffer.pxi":327
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
 * 
 *     def serialize(self,             # <<<<<<<<<<<<<<
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.serialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_28__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_28__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_30__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6Buffer_30__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Buffer.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":27
 *     alpha: int
 * 
 *     def to_int(self) -> int:             # <<<<<<<<<<<<<<
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_1to_int(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_5Color_1to_int = {"to_int", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_1to_int, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_1to_int(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_self = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_int (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_self,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 27, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 27, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "to_int", 0) < (0)) __PYX_ERR(1, 27, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("to_int", 1, 1, 1, i); __PYX_ERR(1, 27, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 27, __pyx_L3_error)
    }
    __pyx_v_self = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("to_int", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 27, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Color.to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_5Color_to_int(__pyx_self, __pyx_v_self);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_5Color_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  uint8_t __pyx_t_2;
  uint8_t __pyx_t_3;
  uint8_t __pyx_t_4;
  uint8_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("to_int", 0);

  /* "src/uharfbuzz/_face.pxi":28
 * 
 *     def to_int(self) -> int:
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_blue); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_uint8_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_green); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_uint8_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_red); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyLong_As_uint8_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_alpha); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyLong_As_uint8_t(__pyx_t_1); if (unlikely((__pyx_t_5 == ((uint8_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyLong_From_uint32_t(HB_COLOR(__pyx_t_2, __pyx_t_3, __pyx_t_4, __pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 0) < (0)) __PYX_ERR(1, 28, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":27
 *     alpha: int
 * 
 *     def to_int(self) -> int:             # <<<<<<<<<<<<<<
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Color.to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":30
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def from_int(value: int) -> Color:
 *         r = hb_color_get_red(value)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_3from_int(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_5Color_3from_int = {"from_int", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_3from_int, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5Color_3from_int(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_value = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_int (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 30, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 30, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "from_int", 0) < (0)) __PYX_ERR(1, 30, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_int", 1, 1, 1, i); __PYX_ERR(1, 30, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 30, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "value", 0) < (0)) __PYX_ERR(1, 31, __pyx_L3_error)
    __pyx_v_value = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_int", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 30, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Color.from_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(1, 31, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_5Color_2from_int(__pyx_self, __pyx_v_value);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_5Color_2from_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_value) {
  uint8_t __pyx_v_r;
  uint8_t __pyx_v_g;
  uint8_t __pyx_v_b;
  uint8_t __pyx_v_a;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_color_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_int", 0);

  /* "src/uharfbuzz/_face.pxi":32
 *     @staticmethod
 *     def from_int(value: int) -> Color:
 *         r = hb_color_get_red(value)             # <<<<<<<<<<<<<<
 *         g = hb_color_get_green(value)
 *         b = hb_color_get_blue(value)
*/
  __pyx_t_1 = __Pyx_PyLong_As_uint32_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 32, __pyx_L1_error)
  __pyx_v_r = hb_color_get_red(__pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":33
 *     def from_int(value: int) -> Color:
 *         r = hb_color_get_red(value)
 *         g = hb_color_get_green(value)             # <<<<<<<<<<<<<<
 *         b = hb_color_get_blue(value)
 *         a = hb_color_get_alpha(value)
*/
  __pyx_t_1 = __Pyx_PyLong_As_uint32_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 33, __pyx_L1_error)
  __pyx_v_g = hb_color_get_green(__pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":34
 *         r = hb_color_get_red(value)
 *         g = hb_color_get_green(value)
 *         b = hb_color_get_blue(value)             # <<<<<<<<<<<<<<
 *         a = hb_color_get_alpha(value)
 *         return Color(r, g, b, a)
*/
  __pyx_t_1 = __Pyx_PyLong_As_uint32_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 34, __pyx_L1_error)
  __pyx_v_b = hb_color_get_blue(__pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":35
 *         g = hb_color_get_green(value)
 *         b = hb_color_get_blue(value)
 *         a = hb_color_get_alpha(value)             # <<<<<<<<<<<<<<
 *         return Color(r, g, b, a)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_uint32_t(__pyx_v_value); if (unlikely((__pyx_t_1 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 35, __pyx_L1_error)
  __pyx_v_a = hb_color_get_alpha(__pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":36
 *         b = hb_color_get_blue(value)
 *         a = hb_color_get_alpha(value)
 *         return Color(r, g, b, a)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_uint8_t(__pyx_v_r); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyLong_From_uint8_t(__pyx_v_g); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyLong_From_uint8_t(__pyx_v_b); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = __Pyx_PyLong_From_uint8_t(__pyx_v_a); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_3, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_9, (5-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 36, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":30
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def from_int(value: int) -> Color:
 *         r = hb_color_get_red(value)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Color.from_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":71
 * 
 * 
 * cdef hb_blob_t* _reference_table_func(             # <<<<<<<<<<<<<<
 *         hb_face_t* face, hb_tag_t tag, void* user_data) noexcept:
 *     cdef Face py_face = <object>(hb_face_get_user_data(face, &k))
*/

static hb_blob_t *__pyx_f_9uharfbuzz_9_harfbuzz__reference_table_func(hb_face_t *__pyx_v_face, hb_tag_t __pyx_v_tag, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_py_face = 0;
  char __pyx_v_cstr[5];
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_v_table = 0;
  hb_blob_t *__pyx_r;
  __Pyx_RefNannyDeclarations
  void *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_t_7;
  char const *__pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_reference_table_func", 0);

  /* "src/uharfbuzz/_face.pxi":73
 * cdef hb_blob_t* _reference_table_func(
 *         hb_face_t* face, hb_tag_t tag, void* user_data) noexcept:
 *     cdef Face py_face = <object>(hb_face_get_user_data(face, &k))             # <<<<<<<<<<<<<<
 *     #
 *     cdef char cstr[5]
*/
  __pyx_t_1 = hb_face_get_user_data(__pyx_v_face, (&__pyx_v_9uharfbuzz_9_harfbuzz_k));
  __pyx_t_2 = ((PyObject *)__pyx_t_1);
  __Pyx_INCREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face))))) __PYX_ERR(1, 73, __pyx_L1_error)
  __pyx_v_py_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":76
 *     #
 *     cdef char cstr[5]
 *     hb_tag_to_string(tag, cstr)             # <<<<<<<<<<<<<<
 *     cstr[4] = b'\0'
 *     cdef bytes packed = cstr
*/
  hb_tag_to_string(__pyx_v_tag, __pyx_v_cstr);

  /* "src/uharfbuzz/_face.pxi":77
 *     cdef char cstr[5]
 *     hb_tag_to_string(tag, cstr)
 *     cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *     cdef bytes packed = cstr
 *     #
*/
  (__pyx_v_cstr[4]) = '\x00';

  /* "src/uharfbuzz/_face.pxi":78
 *     hb_tag_to_string(tag, cstr)
 *     cstr[4] = b'\0'
 *     cdef bytes packed = cstr             # <<<<<<<<<<<<<<
 *     #
 *     cdef bytes table = py_face._reference_table_func(
*/
  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_packed = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":80
 *     cdef bytes packed = cstr
 *     #
 *     cdef bytes table = py_face._reference_table_func(             # <<<<<<<<<<<<<<
 *         py_face, packed.decode(), <object>user_data)
 *     if table is None:
*/
  __pyx_t_3 = NULL;
  __Pyx_INCREF(__pyx_v_py_face->_reference_table_func);
  __pyx_t_4 = __pyx_v_py_face->_reference_table_func; 

  /* "src/uharfbuzz/_face.pxi":81
 *     #
 *     cdef bytes table = py_face._reference_table_func(
 *         py_face, packed.decode(), <object>user_data)             # <<<<<<<<<<<<<<
 *     if table is None:
 *         return NULL
*/
  __pyx_t_5 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_3, ((PyObject *)__pyx_v_py_face), __pyx_t_5, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 80, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }

  /* "src/uharfbuzz/_face.pxi":80
 *     cdef bytes packed = cstr
 *     #
 *     cdef bytes table = py_face._reference_table_func(             # <<<<<<<<<<<<<<
 *         py_face, packed.decode(), <object>user_data)
 *     if table is None:
*/
  if (!(likely(PyBytes_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_2))) __PYX_ERR(1, 80, __pyx_L1_error)
  __pyx_v_table = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":82
 *     cdef bytes table = py_face._reference_table_func(
 *         py_face, packed.decode(), <object>user_data)
 *     if table is None:             # <<<<<<<<<<<<<<
 *         return NULL
 *     return hb_blob_create(
*/
  __pyx_t_7 = (__pyx_v_table == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "src/uharfbuzz/_face.pxi":83
 *         py_face, packed.decode(), <object>user_data)
 *     if table is None:
 *         return NULL             # <<<<<<<<<<<<<<
 *     return hb_blob_create(
 *         table, len(table), HB_MEMORY_MODE_READONLY, NULL, NULL)
*/
    __pyx_r = NULL;
    goto __pyx_L0;

    /* "src/uharfbuzz/_face.pxi":82
 *     cdef bytes table = py_face._reference_table_func(
 *         py_face, packed.decode(), <object>user_data)
 *     if table is None:             # <<<<<<<<<<<<<<
 *         return NULL
 *     return hb_blob_create(
*/
  }

  /* "src/uharfbuzz/_face.pxi":85
 *         return NULL
 *     return hb_blob_create(
 *         table, len(table), HB_MEMORY_MODE_READONLY, NULL, NULL)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  if (unlikely(__pyx_v_table == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
    __PYX_ERR(1, 85, __pyx_L1_error)
  }
  __pyx_t_8 = __Pyx_PyBytes_AsString(__pyx_v_table); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(1, 85, __pyx_L1_error)
  if (unlikely(__pyx_v_table == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(1, 85, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_PyBytes_GET_SIZE(__pyx_v_table); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 85, __pyx_L1_error)

  /* "src/uharfbuzz/_face.pxi":84
 *     if table is None:
 *         return NULL
 *     return hb_blob_create(             # <<<<<<<<<<<<<<
 *         table, len(table), HB_MEMORY_MODE_READONLY, NULL, NULL)
 * 
*/
  __pyx_r = hb_blob_create(__pyx_t_8, __pyx_t_9, HB_MEMORY_MODE_READONLY, NULL, NULL);
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":71
 * 
 * 
 * cdef hb_blob_t* _reference_table_func(             # <<<<<<<<<<<<<<
 *         hb_face_t* face, hb_tag_t tag, void* user_data) noexcept:
 *     cdef Face py_face = <object>(hb_face_get_user_data(face, &k))
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._reference_table_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_face);
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_table);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":127
 *     cdef Blob _blob
 * 
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):             # <<<<<<<<<<<<<<
 *         if blob is not None:
 *             if not isinstance(blob, Blob):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_blob = 0;
  int __pyx_v_index;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_blob,&__pyx_mstate_global->__pyx_n_u_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 127, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 127, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 127, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(1, 127, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 127, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 127, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_blob = values[0];
    if (values[1]) {
      __pyx_v_index = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_index == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 127, __pyx_L3_error)
    } else {
      __pyx_v_index = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 2, __pyx_nargs); __PYX_ERR(1, 127, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_blob, __pyx_v_index);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_blob, int __pyx_v_index) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "src/uharfbuzz/_face.pxi":128
 * 
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):
 *         if blob is not None:             # <<<<<<<<<<<<<<
 *             if not isinstance(blob, Blob):
 *                 self._blob = Blob(blob)
*/
  __pyx_t_1 = (__pyx_v_blob != Py_None);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_face.pxi":129
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):
 *         if blob is not None:
 *             if not isinstance(blob, Blob):             # <<<<<<<<<<<<<<
 *                 self._blob = Blob(blob)
 *             else:
*/
    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_blob, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob); 
    __pyx_t_2 = (!__pyx_t_1);
    if (__pyx_t_2) {

      /* "src/uharfbuzz/_face.pxi":130
 *         if blob is not None:
 *             if not isinstance(blob, Blob):
 *                 self._blob = Blob(blob)             # <<<<<<<<<<<<<<
 *             else:
 *                 self._blob = blob
*/
      __pyx_t_4 = NULL;
      __pyx_t_5 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v_blob};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 130, __pyx_L1_error)
        __Pyx_GOTREF((PyObject *)__pyx_t_3);
      }
      __Pyx_GIVEREF((PyObject *)__pyx_t_3);
      __Pyx_GOTREF((PyObject *)__pyx_v_self->_blob);
      __Pyx_DECREF((PyObject *)__pyx_v_self->_blob);
      __pyx_v_self->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_3);
      __pyx_t_3 = 0;

      /* "src/uharfbuzz/_face.pxi":129
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):
 *         if blob is not None:
 *             if not isinstance(blob, Blob):             # <<<<<<<<<<<<<<
 *                 self._blob = Blob(blob)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_face.pxi":132
 *                 self._blob = Blob(blob)
 *             else:
 *                 self._blob = blob             # <<<<<<<<<<<<<<
 *             self._hb_face = hb_face_create(self._blob._hb_blob, index)
 *         else:
*/
    /*else*/ {
      __pyx_t_3 = __pyx_v_blob;
      __Pyx_INCREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob))))) __PYX_ERR(1, 132, __pyx_L1_error)
      __Pyx_GIVEREF(__pyx_t_3);
      __Pyx_GOTREF((PyObject *)__pyx_v_self->_blob);
      __Pyx_DECREF((PyObject *)__pyx_v_self->_blob);
      __pyx_v_self->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_3);
      __pyx_t_3 = 0;
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_face.pxi":133
 *             else:
 *                 self._blob = blob
 *             self._hb_face = hb_face_create(self._blob._hb_blob, index)             # <<<<<<<<<<<<<<
 *         else:
 *             self._hb_face = hb_face_get_empty()
*/
    __pyx_v_self->_hb_face = hb_face_create(__pyx_v_self->_blob->_hb_blob, __pyx_v_index);

    /* "src/uharfbuzz/_face.pxi":128
 * 
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):
 *         if blob is not None:             # <<<<<<<<<<<<<<
 *             if not isinstance(blob, Blob):
 *                 self._blob = Blob(blob)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_face.pxi":135
 *             self._hb_face = hb_face_create(self._blob._hb_blob, index)
 *         else:
 *             self._hb_face = hb_face_get_empty()             # <<<<<<<<<<<<<<
 *             self._blob = None
 * 
*/
  /*else*/ {
    __pyx_v_self->_hb_face = hb_face_get_empty();

    /* "src/uharfbuzz/_face.pxi":136
 *         else:
 *             self._hb_face = hb_face_get_empty()
 *             self._blob = None             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_blob);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_blob);
    __pyx_v_self->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)Py_None);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_face.pxi":127
 *     cdef Blob _blob
 * 
 *     def __cinit__(self, blob: Union[Blob, bytes] = None, int index=0):             # <<<<<<<<<<<<<<
 *         if blob is not None:
 *             if not isinstance(blob, Blob):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":138
 *             self._blob = None
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_face_destroy(self._hb_face)
 *         self._blob = None
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "src/uharfbuzz/_face.pxi":139
 * 
 *     def __dealloc__(self):
 *         hb_face_destroy(self._hb_face)             # <<<<<<<<<<<<<<
 *         self._blob = None
 * 
*/
  hb_face_destroy(__pyx_v_self->_hb_face);

  /* "src/uharfbuzz/_face.pxi":140
 *     def __dealloc__(self):
 *         hb_face_destroy(self._hb_face)
 *         self._blob = None             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_blob);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_blob);
  __pyx_v_self->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)Py_None);

  /* "src/uharfbuzz/_face.pxi":138
 *             self._blob = None
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_face_destroy(self._hb_face)
 *         self._blob = None
*/

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

/* "src/uharfbuzz/_face.pxi":142
 *         self._blob = None
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Face from_ptr(hb_face_t* hb_face):
 *         """Create Face from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(hb_face_t *__pyx_v_hb_face) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_face.pxi":146
 *         """Create Face from a pointer, taking ownership of it."""
 * 
 *         cdef Face wrapper = Face.__new__(Face)             # <<<<<<<<<<<<<<
 *         wrapper._hb_face = hb_face
 *         return wrapper
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Face(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 146, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":147
 * 
 *         cdef Face wrapper = Face.__new__(Face)
 *         wrapper._hb_face = hb_face             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_hb_face = __pyx_v_hb_face;

  /* "src/uharfbuzz/_face.pxi":148
 *         cdef Face wrapper = Face.__new__(Face)
 *         wrapper._hb_face = hb_face
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     # DEPRECATED: use the normal constructor
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":142
 *         self._blob = None
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Face from_ptr(hb_face_t* hb_face):
 *         """Create Face from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":151
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_5create = {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_blob = 0;
  PyObject *__pyx_v_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_blob,&__pyx_mstate_global->__pyx_n_u_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 151, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 151, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 151, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "create", 0) < (0)) __PYX_ERR(1, 151, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("create", 0, 1, 2, i); __PYX_ERR(1, 151, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 151, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 151, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_blob = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "index", 0) < (0)) __PYX_ERR(1, 152, __pyx_L3_error)
    __pyx_v_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 2, __pyx_nargs); __PYX_ERR(1, 151, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_blob), (&PyBytes_Type), 0, "blob", 2))) __PYX_ERR(1, 152, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_index), (&PyLong_Type), 0, "index", 2))) __PYX_ERR(1, 152, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4create(((PyTypeObject*)__pyx_v_cls), __pyx_v_blob, __pyx_v_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4create(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_blob, PyObject *__pyx_v_index) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/uharfbuzz/_face.pxi":153
 *     @classmethod
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_blob, __pyx_v_index};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face))))) __PYX_ERR(1, 153, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":154
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":151
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":156
 *         return inst
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create_for_tables(cls,
 *                           func: Callable[[
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables = {"create_for_tables", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create_for_tables (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 156, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "create_for_tables", 0) < (0)) __PYX_ERR(1, 156, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("create_for_tables", 1, 2, 2, i); __PYX_ERR(1, 156, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 156, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 156, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("create_for_tables", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 156, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.create_for_tables", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_6create_for_tables(((PyTypeObject*)__pyx_v_cls), __pyx_v_func, __pyx_v_user_data);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_6create_for_tables(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create_for_tables", 0);

  /* "src/uharfbuzz/_face.pxi":164
 *                           ], bytes],
 *                           user_data: object) -> Face:
 *         cdef Face inst = cls(None)             # <<<<<<<<<<<<<<
 *         inst._hb_face = hb_face_create_for_tables(
 *             _reference_table_func, <void*>user_data, NULL)
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, Py_None};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face))))) __PYX_ERR(1, 164, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":165
 *                           user_data: object) -> Face:
 *         cdef Face inst = cls(None)
 *         inst._hb_face = hb_face_create_for_tables(             # <<<<<<<<<<<<<<
 *             _reference_table_func, <void*>user_data, NULL)
 *         hb_face_set_user_data(inst._hb_face, &k, <void*>inst, NULL, 0)
*/
  __pyx_v_inst->_hb_face = hb_face_create_for_tables(__pyx_f_9uharfbuzz_9_harfbuzz__reference_table_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_face.pxi":167
 *         inst._hb_face = hb_face_create_for_tables(
 *             _reference_table_func, <void*>user_data, NULL)
 *         hb_face_set_user_data(inst._hb_face, &k, <void*>inst, NULL, 0)             # <<<<<<<<<<<<<<
 *         inst._reference_table_func = func
 *         return inst
*/
  (void)(hb_face_set_user_data(__pyx_v_inst->_hb_face, (&__pyx_v_9uharfbuzz_9_harfbuzz_k), ((void *)__pyx_v_inst), NULL, 0));

  /* "src/uharfbuzz/_face.pxi":168
 *             _reference_table_func, <void*>user_data, NULL)
 *         hb_face_set_user_data(inst._hb_face, &k, <void*>inst, NULL, 0)
 *         inst._reference_table_func = func             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_inst->_reference_table_func);
  __Pyx_DECREF(__pyx_v_inst->_reference_table_func);
  __pyx_v_inst->_reference_table_func = __pyx_v_func;

  /* "src/uharfbuzz/_face.pxi":169
 *         hb_face_set_user_data(inst._hb_face, &k, <void*>inst, NULL, 0)
 *         inst._reference_table_func = func
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":156
 *         return inst
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create_for_tables(cls,
 *                           func: Callable[[
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.create_for_tables", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":171
 *         return inst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def count(self) -> int:
 *         return hb_face_count(self._blob._hb_blob)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5count_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5count___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5count___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":173
 *     @property
 *     def count(self) -> int:
 *         return hb_face_count(self._blob._hb_blob)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_face_count(__pyx_v_self->_blob->_hb_blob)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":171
 *         return inst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def count(self) -> int:
 *         return hb_face_count(self._blob._hb_blob)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":175
 *         return hb_face_count(self._blob._hb_blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def index(self) -> int:
 *         return hb_face_get_index(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":177
 *     @property
 *     def index(self) -> int:
 *         return hb_face_get_index(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     @index.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_face_get_index(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":175
 *         return hb_face_count(self._blob._hb_blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def index(self) -> int:
 *         return hb_face_get_index(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.index.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":179
 *         return hb_face_get_index(self._hb_face)
 * 
 *     @index.setter             # <<<<<<<<<<<<<<
 *     def index(self, value: int):
 *         hb_face_set_index(self._hb_face, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(1, 180, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_5index_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  unsigned int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_face.pxi":181
 *     @index.setter
 *     def index(self, value: int):
 *         hb_face_set_index(self._hb_face, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 181, __pyx_L1_error)
  hb_face_set_index(__pyx_v_self->_hb_face, __pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":179
 *         return hb_face_get_index(self._hb_face)
 * 
 *     @index.setter             # <<<<<<<<<<<<<<
 *     def index(self, value: int):
 *         hb_face_set_index(self._hb_face, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.index.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":183
 *         hb_face_set_index(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def upem(self) -> int:
 *         return hb_face_get_upem(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":185
 *     @property
 *     def upem(self) -> int:
 *         return hb_face_get_upem(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     @upem.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_face_get_upem(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":183
 *         hb_face_set_index(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def upem(self) -> int:
 *         return hb_face_get_upem(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.upem.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":187
 *         return hb_face_get_upem(self._hb_face)
 * 
 *     @upem.setter             # <<<<<<<<<<<<<<
 *     def upem(self, value: int):
 *         hb_face_set_upem(self._hb_face, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(1, 188, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4upem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  unsigned int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_face.pxi":189
 *     @upem.setter
 *     def upem(self, value: int):
 *         hb_face_set_upem(self._hb_face, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 189, __pyx_L1_error)
  hb_face_set_upem(__pyx_v_self->_hb_face, __pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":187
 *         return hb_face_get_upem(self._hb_face)
 * 
 *     @upem.setter             # <<<<<<<<<<<<<<
 *     def upem(self, value: int):
 *         hb_face_set_upem(self._hb_face, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.upem.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":191
 *         hb_face_set_upem(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_count(self) -> int:
 *         return hb_face_get_glyph_count(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":193
 *     @property
 *     def glyph_count(self) -> int:
 *         return hb_face_get_glyph_count(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     @glyph_count.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_face_get_glyph_count(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 193, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":191
 *         hb_face_set_upem(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_count(self) -> int:
 *         return hb_face_get_glyph_count(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.glyph_count.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":195
 *         return hb_face_get_glyph_count(self._hb_face)
 * 
 *     @glyph_count.setter             # <<<<<<<<<<<<<<
 *     def glyph_count(self, value: int):
 *         hb_face_set_glyph_count(self._hb_face, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(1, 196, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  unsigned int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_face.pxi":197
 *     @glyph_count.setter
 *     def glyph_count(self, value: int):
 *         hb_face_set_glyph_count(self._hb_face, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 197, __pyx_L1_error)
  hb_face_set_glyph_count(__pyx_v_self->_hb_face, __pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":195
 *         return hb_face_get_glyph_count(self._hb_face)
 * 
 *     @glyph_count.setter             # <<<<<<<<<<<<<<
 *     def glyph_count(self, value: int):
 *         hb_face_set_glyph_count(self._hb_face, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.glyph_count.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":199
 *         hb_face_set_glyph_count(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def blob(self) -> Blob:
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4blob_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4blob_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4blob___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_4blob___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  hb_blob_t *__pyx_v_blob;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":201
 *     @property
 *     def blob(self) -> Blob:
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)             # <<<<<<<<<<<<<<
 *         if blob is NULL:
 *             raise MemoryError()
*/
  __pyx_v_blob = hb_face_reference_blob(__pyx_v_self->_hb_face);

  /* "src/uharfbuzz/_face.pxi":202
 *     def blob(self) -> Blob:
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)
 *         if blob is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)
*/
  __pyx_t_1 = (__pyx_v_blob == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_face.pxi":203
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)
 *         if blob is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         return Blob.from_ptr(blob)
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(1, 203, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":202
 *     def blob(self) -> Blob:
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)
 *         if blob is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)
*/
  }

  /* "src/uharfbuzz/_face.pxi":204
 *         if blob is NULL:
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)             # <<<<<<<<<<<<<<
 * 
 *     def reference_table(self, tag: str) -> Blob:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(__pyx_v_blob)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":199
 *         hb_face_set_glyph_count(self._hb_face, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def blob(self) -> Blob:
 *         cdef hb_blob_t* blob = hb_face_reference_blob(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.blob.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":206
 *         return Blob.from_ptr(blob)
 * 
 *     def reference_table(self, tag: str) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_9reference_table(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_9reference_table = {"reference_table", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_9reference_table, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_9reference_table(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reference_table (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 206, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 206, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "reference_table", 0) < (0)) __PYX_ERR(1, 206, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("reference_table", 1, 1, 1, i); __PYX_ERR(1, 206, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 206, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reference_table", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 206, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.reference_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(1, 206, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8reference_table(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8reference_table(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  hb_blob_t *__pyx_v_blob;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("reference_table", 0);

  /* "src/uharfbuzz/_face.pxi":207
 * 
 *     def reference_table(self, tag: str) -> Blob:
 *         cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":208
 *     def reference_table(self, tag: str) -> Blob:
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)
 *         if blob is NULL:
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(1, 208, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "src/uharfbuzz/_face.pxi":209
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)             # <<<<<<<<<<<<<<
 *         if blob is NULL:
 *             raise MemoryError()
*/
  __pyx_v_blob = hb_face_reference_table(__pyx_v_self->_hb_face, __pyx_v_hb_tag);

  /* "src/uharfbuzz/_face.pxi":210
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)
 *         if blob is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)
*/
  __pyx_t_3 = (__pyx_v_blob == NULL);
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_face.pxi":211
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)
 *         if blob is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         return Blob.from_ptr(blob)
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(1, 211, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":210
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef hb_blob_t* blob = hb_face_reference_table(self._hb_face, hb_tag)
 *         if blob is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)
*/
  }

  /* "src/uharfbuzz/_face.pxi":212
 *         if blob is NULL:
 *             raise MemoryError()
 *         return Blob.from_ptr(blob)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(__pyx_v_blob)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":206
 *         return Blob.from_ptr(blob)
 * 
 *     def reference_table(self, tag: str) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.reference_table", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":214
 *         return Blob.from_ptr(blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def table_tags(self) -> List[str]:
 *         cdef unsigned int tag_count = STATIC_ARRAY_SIZE
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10table_tags_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10table_tags_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10table_tags___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10table_tags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  unsigned int __pyx_v_tag_count;
  hb_tag_t __pyx_v_tags_array[128];
  PyObject *__pyx_v_tags = 0;
  char __pyx_v_cstr[5];
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  char *__pyx_v_packed;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":216
 *     @property
 *     def table_tags(self) -> List[str]:
 *         cdef unsigned int tag_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t tags_array[STATIC_ARRAY_SIZE]
 *         cdef list tags = []
*/
  __pyx_v_tag_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":218
 *         cdef unsigned int tag_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t tags_array[STATIC_ARRAY_SIZE]
 *         cdef list tags = []             # <<<<<<<<<<<<<<
 *         cdef char cstr[5]
 *         cdef unsigned int i
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tags = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":221
 *         cdef char cstr[5]
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while tag_count == STATIC_ARRAY_SIZE:
 *             hb_face_get_table_tags(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":222
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while tag_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_face_get_table_tags(
 *                 self._hb_face, start_offset, &tag_count, tags_array)
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_tag_count == 0x80);
    if (!__pyx_t_2) break;

    /* "src/uharfbuzz/_face.pxi":223
 *         cdef unsigned int start_offset = 0
 *         while tag_count == STATIC_ARRAY_SIZE:
 *             hb_face_get_table_tags(             # <<<<<<<<<<<<<<
 *                 self._hb_face, start_offset, &tag_count, tags_array)
 *             for i in range(tag_count):
*/
    (void)(hb_face_get_table_tags(__pyx_v_self->_hb_face, __pyx_v_start_offset, (&__pyx_v_tag_count), __pyx_v_tags_array));

    /* "src/uharfbuzz/_face.pxi":225
 *             hb_face_get_table_tags(
 *                 self._hb_face, start_offset, &tag_count, tags_array)
 *             for i in range(tag_count):             # <<<<<<<<<<<<<<
 *                 hb_tag_to_string(tags_array[i], cstr)
 *                 cstr[4] = b'\0'
*/
    __pyx_t_3 = __pyx_v_tag_count;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "src/uharfbuzz/_face.pxi":226
 *                 self._hb_face, start_offset, &tag_count, tags_array)
 *             for i in range(tag_count):
 *                 hb_tag_to_string(tags_array[i], cstr)             # <<<<<<<<<<<<<<
 *                 cstr[4] = b'\0'
 *                 packed = cstr
*/
      hb_tag_to_string((__pyx_v_tags_array[__pyx_v_i]), __pyx_v_cstr);

      /* "src/uharfbuzz/_face.pxi":227
 *             for i in range(tag_count):
 *                 hb_tag_to_string(tags_array[i], cstr)
 *                 cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *                 packed = cstr
 *                 tags.append(packed.decode())
*/
      (__pyx_v_cstr[4]) = '\x00';

      /* "src/uharfbuzz/_face.pxi":228
 *                 hb_tag_to_string(tags_array[i], cstr)
 *                 cstr[4] = b'\0'
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 tags.append(packed.decode())
 *             start_offset += tag_count
*/
      __pyx_v_packed = __pyx_v_cstr;

      /* "src/uharfbuzz/_face.pxi":229
 *                 cstr[4] = b'\0'
 *                 packed = cstr
 *                 tags.append(packed.decode())             # <<<<<<<<<<<<<<
 *             start_offset += tag_count
 *         return tags
*/
      __pyx_t_6 = __Pyx_ssize_strlen(__pyx_v_packed); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(1, 229, __pyx_L1_error)
      __pyx_t_1 = __Pyx_decode_c_string(__pyx_v_packed, 0, __pyx_t_6, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_tags, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 229, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":230
 *                 packed = cstr
 *                 tags.append(packed.decode())
 *             start_offset += tag_count             # <<<<<<<<<<<<<<
 *         return tags
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_tag_count);
  }

  /* "src/uharfbuzz/_face.pxi":231
 *                 tags.append(packed.decode())
 *             start_offset += tag_count
 *         return tags             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_tags);
  __pyx_r = __pyx_v_tags;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":214
 *         return Blob.from_ptr(blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def table_tags(self) -> List[str]:
 *         cdef unsigned int tag_count = STATIC_ARRAY_SIZE
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.table_tags.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tags);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":233
 *         return tags
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicodes (self) -> Set[int]:
 *         s = Set()
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_8unicodes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_8unicodes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8unicodes___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_8unicodes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":235
 *     @property
 *     def unicodes (self) -> Set[int]:
 *         s = Set()             # <<<<<<<<<<<<<<
 *         hb_face_collect_unicodes(self._hb_face, s._hb_set)
 *         return s
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 235, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":236
 *     def unicodes (self) -> Set[int]:
 *         s = Set()
 *         hb_face_collect_unicodes(self._hb_face, s._hb_set)             # <<<<<<<<<<<<<<
 *         return s
 * 
*/
  hb_face_collect_unicodes(__pyx_v_self->_hb_face, __pyx_v_s->_hb_set);

  /* "src/uharfbuzz/_face.pxi":237
 *         s = Set()
 *         hb_face_collect_unicodes(self._hb_face, s._hb_set)
 *         return s             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_s);
  __pyx_r = ((PyObject *)__pyx_v_s);
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":233
 *         return tags
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicodes (self) -> Set[int]:
 *         s = Set()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.unicodes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":239
 *         return s
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def variation_selectors(self) -> Set[int]:
 *         s = Set()
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":241
 *     @property
 *     def variation_selectors(self) -> Set[int]:
 *         s = Set()             # <<<<<<<<<<<<<<
 *         hb_face_collect_variation_selectors(self._hb_face, s._hb_set)
 *         return s
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 241, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":242
 *     def variation_selectors(self) -> Set[int]:
 *         s = Set()
 *         hb_face_collect_variation_selectors(self._hb_face, s._hb_set)             # <<<<<<<<<<<<<<
 *         return s
 * 
*/
  hb_face_collect_variation_selectors(__pyx_v_self->_hb_face, __pyx_v_s->_hb_set);

  /* "src/uharfbuzz/_face.pxi":243
 *         s = Set()
 *         hb_face_collect_variation_selectors(self._hb_face, s._hb_set)
 *         return s             # <<<<<<<<<<<<<<
 * 
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_s);
  __pyx_r = ((PyObject *)__pyx_v_s);
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":239
 *         return s
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def variation_selectors(self) -> Set[int]:
 *         s = Set()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.variation_selectors.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":245
 *         return s
 * 
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:             # <<<<<<<<<<<<<<
 *         s = Set()
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes = {"variation_unicodes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_variation_selector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("variation_unicodes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_variation_selector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 245, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 245, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "variation_unicodes", 0) < (0)) __PYX_ERR(1, 245, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("variation_unicodes", 1, 1, 1, i); __PYX_ERR(1, 245, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 245, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "variation_selector", 0) < (0)) __PYX_ERR(1, 245, __pyx_L3_error)
    __pyx_v_variation_selector = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("variation_unicodes", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 245, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.variation_unicodes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_variation_selector), (&PyLong_Type), 0, "variation_selector", 2))) __PYX_ERR(1, 245, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10variation_unicodes(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_variation_selector);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10variation_unicodes(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_variation_selector) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_v_s = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  hb_codepoint_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("variation_unicodes", 0);

  /* "src/uharfbuzz/_face.pxi":246
 * 
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:
 *         s = Set()             # <<<<<<<<<<<<<<
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)
 *         return s
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 246, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":247
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:
 *         s = Set()
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)             # <<<<<<<<<<<<<<
 *         return s
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_variation_selector); if (unlikely((__pyx_t_4 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 247, __pyx_L1_error)
  hb_face_collect_variation_unicodes(__pyx_v_self->_hb_face, __pyx_t_4, __pyx_v_s->_hb_set);

  /* "src/uharfbuzz/_face.pxi":248
 *         s = Set()
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)
 *         return s             # <<<<<<<<<<<<<<
 * 
 *     # variations
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_s);
  __pyx_r = ((PyObject *)__pyx_v_s);
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":245
 *         return s
 * 
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:             # <<<<<<<<<<<<<<
 *         s = Set()
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.variation_unicodes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_s);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":251
 * 
 *     # variations
 *     @property             # <<<<<<<<<<<<<<
 *     def has_var_data(self) -> bool:
 *         return hb_ot_var_has_data(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_12has_var_data_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_12has_var_data_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12has_var_data___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12has_var_data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":253
 *     @property
 *     def has_var_data(self) -> bool:
 *         return hb_ot_var_has_data(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_var_has_data(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":251
 * 
 *     # variations
 *     @property             # <<<<<<<<<<<<<<
 *     def has_var_data(self) -> bool:
 *         return hb_ot_var_has_data(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_var_data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":255
 *         return hb_ot_var_has_data(self._hb_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def axis_infos(self) -> List[OTVarAxisInfo]:
 *         cdef unsigned int axis_count = STATIC_ARRAY_SIZE
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10axis_infos_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10axis_infos_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10axis_infos___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_10axis_infos___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  unsigned int __pyx_v_axis_count;
  hb_ot_var_axis_info_t __pyx_v_axis_array[128];
  PyObject *__pyx_v_infos = 0;
  char __pyx_v_cstr[5];
  PyObject *__pyx_v_packed = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  size_t __pyx_t_15;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":257
 *     @property
 *     def axis_infos(self) -> List[OTVarAxisInfo]:
 *         cdef unsigned int axis_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_ot_var_axis_info_t axis_array[STATIC_ARRAY_SIZE]
 *         cdef list infos = []
*/
  __pyx_v_axis_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":259
 *         cdef unsigned int axis_count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_var_axis_info_t axis_array[STATIC_ARRAY_SIZE]
 *         cdef list infos = []             # <<<<<<<<<<<<<<
 *         cdef char cstr[5]
 *         cdef bytes packed
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_infos = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":263
 *         cdef bytes packed
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while axis_count == STATIC_ARRAY_SIZE:
 *             hb_ot_var_get_axis_infos(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":264
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while axis_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_var_get_axis_infos(
 *                 self._hb_face, start_offset, &axis_count, axis_array)
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_axis_count == 0x80);
    if (!__pyx_t_2) break;

    /* "src/uharfbuzz/_face.pxi":265
 *         cdef unsigned int start_offset = 0
 *         while axis_count == STATIC_ARRAY_SIZE:
 *             hb_ot_var_get_axis_infos(             # <<<<<<<<<<<<<<
 *                 self._hb_face, start_offset, &axis_count, axis_array)
 *             for i in range(axis_count):
*/
    (void)(hb_ot_var_get_axis_infos(__pyx_v_self->_hb_face, __pyx_v_start_offset, (&__pyx_v_axis_count), __pyx_v_axis_array));

    /* "src/uharfbuzz/_face.pxi":267
 *             hb_ot_var_get_axis_infos(
 *                 self._hb_face, start_offset, &axis_count, axis_array)
 *             for i in range(axis_count):             # <<<<<<<<<<<<<<
 *                 hb_tag_to_string(axis_array[i].tag, cstr)
 *                 cstr[4] = b'\0'
*/
    __pyx_t_3 = __pyx_v_axis_count;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "src/uharfbuzz/_face.pxi":268
 *                 self._hb_face, start_offset, &axis_count, axis_array)
 *             for i in range(axis_count):
 *                 hb_tag_to_string(axis_array[i].tag, cstr)             # <<<<<<<<<<<<<<
 *                 cstr[4] = b'\0'
 *                 packed = cstr
*/
      hb_tag_to_string((__pyx_v_axis_array[__pyx_v_i]).tag, __pyx_v_cstr);

      /* "src/uharfbuzz/_face.pxi":269
 *             for i in range(axis_count):
 *                 hb_tag_to_string(axis_array[i].tag, cstr)
 *                 cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *                 packed = cstr
 *                 infos.append(
*/
      (__pyx_v_cstr[4]) = '\x00';

      /* "src/uharfbuzz/_face.pxi":270
 *                 hb_tag_to_string(axis_array[i].tag, cstr)
 *                 cstr[4] = b'\0'
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 infos.append(
 *                     OTVarAxisInfo(
*/
      __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "src/uharfbuzz/_face.pxi":272
 *                 packed = cstr
 *                 infos.append(
 *                     OTVarAxisInfo(             # <<<<<<<<<<<<<<
 *                         axis_index=axis_array[i].axis_index,
 *                         tag=packed.decode(),
*/
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTVarAxisInfo); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 272, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);

      /* "src/uharfbuzz/_face.pxi":273
 *                 infos.append(
 *                     OTVarAxisInfo(
 *                         axis_index=axis_array[i].axis_index,             # <<<<<<<<<<<<<<
 *                         tag=packed.decode(),
 *                         name_id=axis_array[i].name_id,
*/
      __pyx_t_8 = __Pyx_PyLong_From_unsigned_int((__pyx_v_axis_array[__pyx_v_i]).axis_index); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 273, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);

      /* "src/uharfbuzz/_face.pxi":274
 *                     OTVarAxisInfo(
 *                         axis_index=axis_array[i].axis_index,
 *                         tag=packed.decode(),             # <<<<<<<<<<<<<<
 *                         name_id=axis_array[i].name_id,
 *                         flags=axis_array[i].flags,
*/
      __pyx_t_9 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 274, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);

      /* "src/uharfbuzz/_face.pxi":275
 *                         axis_index=axis_array[i].axis_index,
 *                         tag=packed.decode(),
 *                         name_id=axis_array[i].name_id,             # <<<<<<<<<<<<<<
 *                         flags=axis_array[i].flags,
 *                         min_value=axis_array[i].min_value,
*/
      __pyx_t_10 = __Pyx_PyLong_From_hb_ot_name_id_t((__pyx_v_axis_array[__pyx_v_i]).name_id); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 275, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);

      /* "src/uharfbuzz/_face.pxi":276
 *                         tag=packed.decode(),
 *                         name_id=axis_array[i].name_id,
 *                         flags=axis_array[i].flags,             # <<<<<<<<<<<<<<
 *                         min_value=axis_array[i].min_value,
 *                         default_value=axis_array[i].default_value,
*/
      __pyx_t_11 = __Pyx_PyLong_From_hb_ot_var_axis_flags_t((__pyx_v_axis_array[__pyx_v_i]).flags); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 276, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);

      /* "src/uharfbuzz/_face.pxi":277
 *                         name_id=axis_array[i].name_id,
 *                         flags=axis_array[i].flags,
 *                         min_value=axis_array[i].min_value,             # <<<<<<<<<<<<<<
 *                         default_value=axis_array[i].default_value,
 *                         max_value=axis_array[i].max_value
*/
      __pyx_t_12 = PyFloat_FromDouble((__pyx_v_axis_array[__pyx_v_i]).min_value); if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 277, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);

      /* "src/uharfbuzz/_face.pxi":278
 *                         flags=axis_array[i].flags,
 *                         min_value=axis_array[i].min_value,
 *                         default_value=axis_array[i].default_value,             # <<<<<<<<<<<<<<
 *                         max_value=axis_array[i].max_value
 *                     )
*/
      __pyx_t_13 = PyFloat_FromDouble((__pyx_v_axis_array[__pyx_v_i]).default_value); if (unlikely(!__pyx_t_13)) __PYX_ERR(1, 278, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);

      /* "src/uharfbuzz/_face.pxi":279
 *                         min_value=axis_array[i].min_value,
 *                         default_value=axis_array[i].default_value,
 *                         max_value=axis_array[i].max_value             # <<<<<<<<<<<<<<
 *                     )
 *                 )
*/
      __pyx_t_14 = PyFloat_FromDouble((__pyx_v_axis_array[__pyx_v_i]).max_value); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 279, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_15 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_15 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 7 : 0)] = {__pyx_t_6, NULL};
        __pyx_t_16 = __Pyx_MakeVectorcallBuilderKwds(7); if (unlikely(!__pyx_t_16)) __PYX_ERR(1, 272, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_16);
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_axis_index, __pyx_t_8, __pyx_t_16, __pyx_callargs+1, 0) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tag, __pyx_t_9, __pyx_t_16, __pyx_callargs+1, 1) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_name_id, __pyx_t_10, __pyx_t_16, __pyx_callargs+1, 2) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_flags, __pyx_t_11, __pyx_t_16, __pyx_callargs+1, 3) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_min_value, __pyx_t_12, __pyx_t_16, __pyx_callargs+1, 4) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_default_value, __pyx_t_13, __pyx_t_16, __pyx_callargs+1, 5) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_max_value, __pyx_t_14, __pyx_t_16, __pyx_callargs+1, 6) < (0)) __PYX_ERR(1, 272, __pyx_L1_error)
        __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_16);
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 272, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }

      /* "src/uharfbuzz/_face.pxi":271
 *                 cstr[4] = b'\0'
 *                 packed = cstr
 *                 infos.append(             # <<<<<<<<<<<<<<
 *                     OTVarAxisInfo(
 *                         axis_index=axis_array[i].axis_index,
*/
      __pyx_t_17 = __Pyx_PyList_Append(__pyx_v_infos, __pyx_t_1); if (unlikely(__pyx_t_17 == ((int)-1))) __PYX_ERR(1, 271, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":282
 *                     )
 *                 )
 *             start_offset += axis_count             # <<<<<<<<<<<<<<
 *         return infos
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_axis_count);
  }

  /* "src/uharfbuzz/_face.pxi":283
 *                 )
 *             start_offset += axis_count
 *         return infos             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_infos);
  __pyx_r = __pyx_v_infos;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":255
 *         return hb_ot_var_has_data(self._hb_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def axis_infos(self) -> List[OTVarAxisInfo]:
 *         cdef unsigned int axis_count = STATIC_ARRAY_SIZE
*/

  /* 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_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_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.axis_infos.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_infos);
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":285
 *         return infos
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def named_instances(self) -> List[OTVarNamedInstance]:
 *         instances = []
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15named_instances_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15named_instances_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15named_instances___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15named_instances___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_v_instances = NULL;
  hb_face_t *__pyx_v_face;
  unsigned int __pyx_v_instance_count;
  unsigned int __pyx_v_axis_count;
  float *__pyx_v_coords;
  unsigned int __pyx_v_coord_length;
  unsigned int __pyx_v_i;
  unsigned int __pyx_8genexpr4__pyx_v_j;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  hb_face_t *__pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  unsigned int __pyx_t_11;
  unsigned int __pyx_t_12;
  unsigned int __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  size_t __pyx_t_15;
  int __pyx_t_16;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":287
 *     @property
 *     def named_instances(self) -> List[OTVarNamedInstance]:
 *         instances = []             # <<<<<<<<<<<<<<
 *         cdef hb_face_t* face = self._hb_face
 *         cdef unsigned int instance_count = hb_ot_var_get_named_instance_count(face)
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_instances = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":288
 *     def named_instances(self) -> List[OTVarNamedInstance]:
 *         instances = []
 *         cdef hb_face_t* face = self._hb_face             # <<<<<<<<<<<<<<
 *         cdef unsigned int instance_count = hb_ot_var_get_named_instance_count(face)
 *         cdef unsigned int axis_count = hb_ot_var_get_axis_count(face)
*/
  __pyx_t_2 = __pyx_v_self->_hb_face;
  __pyx_v_face = __pyx_t_2;

  /* "src/uharfbuzz/_face.pxi":289
 *         instances = []
 *         cdef hb_face_t* face = self._hb_face
 *         cdef unsigned int instance_count = hb_ot_var_get_named_instance_count(face)             # <<<<<<<<<<<<<<
 *         cdef unsigned int axis_count = hb_ot_var_get_axis_count(face)
 *         cdef hb_ot_name_id_t subfamily_name_id
*/
  __pyx_v_instance_count = hb_ot_var_get_named_instance_count(__pyx_v_face);

  /* "src/uharfbuzz/_face.pxi":290
 *         cdef hb_face_t* face = self._hb_face
 *         cdef unsigned int instance_count = hb_ot_var_get_named_instance_count(face)
 *         cdef unsigned int axis_count = hb_ot_var_get_axis_count(face)             # <<<<<<<<<<<<<<
 *         cdef hb_ot_name_id_t subfamily_name_id
 *         cdef hb_ot_name_id_t postscript_name_id
*/
  __pyx_v_axis_count = hb_ot_var_get_axis_count(__pyx_v_face);

  /* "src/uharfbuzz/_face.pxi":293
 *         cdef hb_ot_name_id_t subfamily_name_id
 *         cdef hb_ot_name_id_t postscript_name_id
 *         cdef float* coords = <float*>malloc(axis_count * sizeof(float))             # <<<<<<<<<<<<<<
 *         cdef unsigned int coord_length
 *         for i in range(instance_count):
*/
  __pyx_v_coords = ((float *)malloc((__pyx_v_axis_count * (sizeof(float)))));

  /* "src/uharfbuzz/_face.pxi":295
 *         cdef float* coords = <float*>malloc(axis_count * sizeof(float))
 *         cdef unsigned int coord_length
 *         for i in range(instance_count):             # <<<<<<<<<<<<<<
 *             coord_length = axis_count
 *             hb_ot_var_named_instance_get_design_coords(face, i, &coord_length, coords)
*/
  __pyx_t_3 = __pyx_v_instance_count;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "src/uharfbuzz/_face.pxi":296
 *         cdef unsigned int coord_length
 *         for i in range(instance_count):
 *             coord_length = axis_count             # <<<<<<<<<<<<<<
 *             hb_ot_var_named_instance_get_design_coords(face, i, &coord_length, coords)
 *             instances.append(
*/
    __pyx_v_coord_length = __pyx_v_axis_count;

    /* "src/uharfbuzz/_face.pxi":297
 *         for i in range(instance_count):
 *             coord_length = axis_count
 *             hb_ot_var_named_instance_get_design_coords(face, i, &coord_length, coords)             # <<<<<<<<<<<<<<
 *             instances.append(
 *                 OTVarNamedInstance(
*/
    (void)(hb_ot_var_named_instance_get_design_coords(__pyx_v_face, __pyx_v_i, (&__pyx_v_coord_length), __pyx_v_coords));

    /* "src/uharfbuzz/_face.pxi":299
 *             hb_ot_var_named_instance_get_design_coords(face, i, &coord_length, coords)
 *             instances.append(
 *                 OTVarNamedInstance(             # <<<<<<<<<<<<<<
 *                     subfamily_name_id=hb_ot_var_named_instance_get_subfamily_name_id(face, i),
 *                     postscript_name_id=hb_ot_var_named_instance_get_postscript_name_id(face, i),
*/
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTVarNamedInstance); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);

    /* "src/uharfbuzz/_face.pxi":300
 *             instances.append(
 *                 OTVarNamedInstance(
 *                     subfamily_name_id=hb_ot_var_named_instance_get_subfamily_name_id(face, i),             # <<<<<<<<<<<<<<
 *                     postscript_name_id=hb_ot_var_named_instance_get_postscript_name_id(face, i),
 *                     design_coords=[coords[j] for j in range(coord_length)],
*/
    __pyx_t_8 = __Pyx_PyLong_From_hb_ot_name_id_t(hb_ot_var_named_instance_get_subfamily_name_id(__pyx_v_face, __pyx_v_i)); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    /* "src/uharfbuzz/_face.pxi":301
 *                 OTVarNamedInstance(
 *                     subfamily_name_id=hb_ot_var_named_instance_get_subfamily_name_id(face, i),
 *                     postscript_name_id=hb_ot_var_named_instance_get_postscript_name_id(face, i),             # <<<<<<<<<<<<<<
 *                     design_coords=[coords[j] for j in range(coord_length)],
 *                 )
*/
    __pyx_t_9 = __Pyx_PyLong_From_hb_ot_name_id_t(hb_ot_var_named_instance_get_postscript_name_id(__pyx_v_face, __pyx_v_i)); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    { /* enter inner scope */

      /* "src/uharfbuzz/_face.pxi":302
 *                     subfamily_name_id=hb_ot_var_named_instance_get_subfamily_name_id(face, i),
 *                     postscript_name_id=hb_ot_var_named_instance_get_postscript_name_id(face, i),
 *                     design_coords=[coords[j] for j in range(coord_length)],             # <<<<<<<<<<<<<<
 *                 )
 *             )
*/
      __pyx_t_10 = PyList_New(0); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 302, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __pyx_v_coord_length;
      __pyx_t_12 = __pyx_t_11;
      for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
        __pyx_8genexpr4__pyx_v_j = __pyx_t_13;
        __pyx_t_14 = PyFloat_FromDouble((__pyx_v_coords[__pyx_8genexpr4__pyx_v_j])); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 302, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        if (unlikely(__Pyx_ListComp_Append(__pyx_t_10, (PyObject*)__pyx_t_14))) __PYX_ERR(1, 302, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      }
    } /* exit inner scope */
    __pyx_t_15 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_15 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_6, NULL};
      __pyx_t_14 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 299, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_subfamily_name_id, __pyx_t_8, __pyx_t_14, __pyx_callargs+1, 0) < (0)) __PYX_ERR(1, 299, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_postscript_name_id, __pyx_t_9, __pyx_t_14, __pyx_callargs+1, 1) < (0)) __PYX_ERR(1, 299, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_design_coords, __pyx_t_10, __pyx_t_14, __pyx_callargs+1, 2) < (0)) __PYX_ERR(1, 299, __pyx_L1_error)
      __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_15, (1-__pyx_t_15) | (__pyx_t_15*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_14);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 299, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }

    /* "src/uharfbuzz/_face.pxi":298
 *             coord_length = axis_count
 *             hb_ot_var_named_instance_get_design_coords(face, i, &coord_length, coords)
 *             instances.append(             # <<<<<<<<<<<<<<
 *                 OTVarNamedInstance(
 *                     subfamily_name_id=hb_ot_var_named_instance_get_subfamily_name_id(face, i),
*/
    __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_instances, __pyx_t_1); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(1, 298, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "src/uharfbuzz/_face.pxi":305
 *                 )
 *             )
 *         free(coords)             # <<<<<<<<<<<<<<
 *         return instances
 * 
*/
  free(__pyx_v_coords);

  /* "src/uharfbuzz/_face.pxi":306
 *             )
 *         free(coords)
 *         return instances             # <<<<<<<<<<<<<<
 * 
 *     # math
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_instances);
  __pyx_r = __pyx_v_instances;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":285
 *         return infos
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def named_instances(self) -> List[OTVarNamedInstance]:
 *         instances = []
*/

  /* 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_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.named_instances.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_instances);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":309
 * 
 *     # math
 *     @property             # <<<<<<<<<<<<<<
 *     def has_math_data(self) -> bool:
 *         return hb_ot_math_has_data(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_math_data_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_math_data_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_math_data___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_math_data___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":311
 *     @property
 *     def has_math_data(self) -> bool:
 *         return hb_ot_math_has_data(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def is_glyph_extended_math_shape(self, glyph: int) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_math_has_data(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":309
 * 
 *     # math
 *     @property             # <<<<<<<<<<<<<<
 *     def has_math_data(self) -> bool:
 *         return hb_ot_math_has_data(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_math_data.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":313
 *         return hb_ot_math_has_data(self._hb_face)
 * 
 *     def is_glyph_extended_math_shape(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_is_glyph_extended_shape(self._hb_face, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape = {"is_glyph_extended_math_shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_glyph_extended_math_shape (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 313, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 313, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "is_glyph_extended_math_shape", 0) < (0)) __PYX_ERR(1, 313, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_glyph_extended_math_shape", 1, 1, 1, i); __PYX_ERR(1, 313, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 313, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(1, 313, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_glyph_extended_math_shape", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 313, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.is_glyph_extended_math_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 313, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12is_glyph_extended_math_shape(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_12is_glyph_extended_math_shape(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_glyph_extended_math_shape", 0);

  /* "src/uharfbuzz/_face.pxi":314
 * 
 *     def is_glyph_extended_math_shape(self, glyph: int) -> bool:
 *         return hb_ot_math_is_glyph_extended_shape(self._hb_face, glyph)             # <<<<<<<<<<<<<<
 * 
 *     # color
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 314, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_ot_math_is_glyph_extended_shape(__pyx_v_self->_hb_face, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":313
 *         return hb_ot_math_has_data(self._hb_face)
 * 
 *     def is_glyph_extended_math_shape(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_is_glyph_extended_shape(self._hb_face, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.is_glyph_extended_math_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":317
 * 
 *     # color
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_layers(self) -> bool:
 *         return hb_ot_color_has_layers(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":319
 *     @property
 *     def has_color_layers(self) -> bool:
 *         return hb_ot_color_has_layers(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_color_layers(self, glyph: int) -> List[OTColorLayer]:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_has_layers(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":317
 * 
 *     # color
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_layers(self) -> bool:
 *         return hb_ot_color_has_layers(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_color_layers.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":321
 *         return hb_ot_color_has_layers(self._hb_face)
 * 
 *     def get_glyph_color_layers(self, glyph: int) -> List[OTColorLayer]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int i
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers = {"get_glyph_color_layers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_color_layers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 321, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 321, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_color_layers", 0) < (0)) __PYX_ERR(1, 321, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_color_layers", 1, 1, 1, i); __PYX_ERR(1, 321, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 321, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(1, 321, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_color_layers", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 321, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_glyph_color_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 321, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14get_glyph_color_layers(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14get_glyph_color_layers(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_v_ret = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  unsigned int __pyx_v_layer_count;
  hb_ot_color_layer_t __pyx_v_layers[128];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  hb_codepoint_t __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  size_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_color_layers", 0);

  /* "src/uharfbuzz/_face.pxi":322
 * 
 *     def get_glyph_color_layers(self, glyph: int) -> List[OTColorLayer]:
 *         cdef list ret = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ret = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":324
 *         cdef list ret = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         cdef unsigned int layer_count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_color_layer_t layers[STATIC_ARRAY_SIZE]
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":325
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         cdef unsigned int layer_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_ot_color_layer_t layers[STATIC_ARRAY_SIZE]
 *         while layer_count == STATIC_ARRAY_SIZE:
*/
  __pyx_v_layer_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":327
 *         cdef unsigned int layer_count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_color_layer_t layers[STATIC_ARRAY_SIZE]
 *         while layer_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_color_glyph_get_layers(self._hb_face, glyph, start_offset, &layer_count, layers)
 *             for i in range(layer_count):
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_layer_count == 0x80);
    if (!__pyx_t_2) break;

    /* "src/uharfbuzz/_face.pxi":328
 *         cdef hb_ot_color_layer_t layers[STATIC_ARRAY_SIZE]
 *         while layer_count == STATIC_ARRAY_SIZE:
 *             hb_ot_color_glyph_get_layers(self._hb_face, glyph, start_offset, &layer_count, layers)             # <<<<<<<<<<<<<<
 *             for i in range(layer_count):
 *                 ret.append(OTColorLayer(layers[i].glyph, layers[i].color_index))
*/
    __pyx_t_3 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_3 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 328, __pyx_L1_error)
    (void)(hb_ot_color_glyph_get_layers(__pyx_v_self->_hb_face, __pyx_t_3, __pyx_v_start_offset, (&__pyx_v_layer_count), __pyx_v_layers));

    /* "src/uharfbuzz/_face.pxi":329
 *         while layer_count == STATIC_ARRAY_SIZE:
 *             hb_ot_color_glyph_get_layers(self._hb_face, glyph, start_offset, &layer_count, layers)
 *             for i in range(layer_count):             # <<<<<<<<<<<<<<
 *                 ret.append(OTColorLayer(layers[i].glyph, layers[i].color_index))
 *             start_offset += layer_count
*/
    __pyx_t_4 = __pyx_v_layer_count;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":330
 *             hb_ot_color_glyph_get_layers(self._hb_face, glyph, start_offset, &layer_count, layers)
 *             for i in range(layer_count):
 *                 ret.append(OTColorLayer(layers[i].glyph, layers[i].color_index))             # <<<<<<<<<<<<<<
 *             start_offset += layer_count
 *         return ret
*/
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_OTColorLayer); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyLong_From_hb_codepoint_t((__pyx_v_layers[__pyx_v_i]).glyph); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyLong_From_unsigned_int((__pyx_v_layers[__pyx_v_i]).color_index); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 330, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_11 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_9, __pyx_t_10};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_11, (3-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 330, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_ret, __pyx_t_1); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(1, 330, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":331
 *             for i in range(layer_count):
 *                 ret.append(OTColorLayer(layers[i].glyph, layers[i].color_index))
 *             start_offset += layer_count             # <<<<<<<<<<<<<<
 *         return ret
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_layer_count);
  }

  /* "src/uharfbuzz/_face.pxi":332
 *                 ret.append(OTColorLayer(layers[i].glyph, layers[i].color_index))
 *             start_offset += layer_count
 *         return ret             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ret);
  __pyx_r = __pyx_v_ret;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":321
 *         return hb_ot_color_has_layers(self._hb_face)
 * 
 *     def get_glyph_color_layers(self, glyph: int) -> List[OTColorLayer]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int i
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_glyph_color_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":334
 *         return ret
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_palettes(self) -> bool:
 *         return hb_ot_color_has_palettes(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":336
 *     @property
 *     def has_color_palettes(self) -> bool:
 *         return hb_ot_color_has_palettes(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_has_palettes(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":334
 *         return ret
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_palettes(self) -> bool:
 *         return hb_ot_color_has_palettes(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_color_palettes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":338
 *         return hb_ot_color_has_palettes(self._hb_face)
 * 
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:             # <<<<<<<<<<<<<<
 *         cdef hb_face_t* face = self._hb_face
 *         cdef list colors = []
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette = {"get_color_palette", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_palette_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_color_palette (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_palette_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 338, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 338, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_color_palette", 0) < (0)) __PYX_ERR(1, 338, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_color_palette", 1, 1, 1, i); __PYX_ERR(1, 338, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 338, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "palette_index", 0) < (0)) __PYX_ERR(1, 338, __pyx_L3_error)
    __pyx_v_palette_index = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_color_palette", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 338, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_color_palette", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_palette_index), (&PyLong_Type), 0, "palette_index", 2))) __PYX_ERR(1, 338, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16get_color_palette(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_palette_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_16get_color_palette(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_palette_index) {
  hb_face_t *__pyx_v_face;
  PyObject *__pyx_v_colors = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  unsigned int __pyx_v_color_count;
  hb_color_t __pyx_v_c_colors[128];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_face_t *__pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_color_palette", 0);

  /* "src/uharfbuzz/_face.pxi":339
 * 
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:
 *         cdef hb_face_t* face = self._hb_face             # <<<<<<<<<<<<<<
 *         cdef list colors = []
 *         cdef unsigned int i
*/
  __pyx_t_1 = __pyx_v_self->_hb_face;
  __pyx_v_face = __pyx_t_1;

  /* "src/uharfbuzz/_face.pxi":340
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:
 *         cdef hb_face_t* face = self._hb_face
 *         cdef list colors = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_colors = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":342
 *         cdef list colors = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         cdef unsigned int color_count = STATIC_ARRAY_SIZE
 *         cdef hb_color_t c_colors[STATIC_ARRAY_SIZE]
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":343
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         cdef unsigned int color_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_color_t c_colors[STATIC_ARRAY_SIZE]
 *         while color_count == STATIC_ARRAY_SIZE:
*/
  __pyx_v_color_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":345
 *         cdef unsigned int color_count = STATIC_ARRAY_SIZE
 *         cdef hb_color_t c_colors[STATIC_ARRAY_SIZE]
 *         while color_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_color_palette_get_colors(face, palette_index, start_offset, &color_count, c_colors)
 *             for i in range(color_count):
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_color_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_face.pxi":346
 *         cdef hb_color_t c_colors[STATIC_ARRAY_SIZE]
 *         while color_count == STATIC_ARRAY_SIZE:
 *             hb_ot_color_palette_get_colors(face, palette_index, start_offset, &color_count, c_colors)             # <<<<<<<<<<<<<<
 *             for i in range(color_count):
 *                 colors.append(Color.from_int(c_colors[i]))
*/
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 346, __pyx_L1_error)
    (void)(hb_ot_color_palette_get_colors(__pyx_v_face, __pyx_t_4, __pyx_v_start_offset, (&__pyx_v_color_count), __pyx_v_c_colors));

    /* "src/uharfbuzz/_face.pxi":347
 *         while color_count == STATIC_ARRAY_SIZE:
 *             hb_ot_color_palette_get_colors(face, palette_index, start_offset, &color_count, c_colors)
 *             for i in range(color_count):             # <<<<<<<<<<<<<<
 *                 colors.append(Color.from_int(c_colors[i]))
 * 
*/
    __pyx_t_4 = __pyx_v_color_count;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":348
 *             hb_ot_color_palette_get_colors(face, palette_index, start_offset, &color_count, c_colors)
 *             for i in range(color_count):
 *                 colors.append(Color.from_int(c_colors[i]))             # <<<<<<<<<<<<<<
 * 
 *         return OTColorPalette(
*/
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyLong_From_uint32_t((__pyx_v_c_colors[__pyx_v_i])); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_10 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 348, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_colors, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 348, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
  }

  /* "src/uharfbuzz/_face.pxi":350
 *                 colors.append(Color.from_int(c_colors[i]))
 * 
 *         return OTColorPalette(             # <<<<<<<<<<<<<<
 *             colors=colors,
 *             name_id=hb_ot_color_palette_get_name_id(face, palette_index),
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_OTColorPalette); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "src/uharfbuzz/_face.pxi":352
 *         return OTColorPalette(
 *             colors=colors,
 *             name_id=hb_ot_color_palette_get_name_id(face, palette_index),             # <<<<<<<<<<<<<<
 *             flags=OTColorPaletteFlags(hb_ot_color_palette_get_flags(face, palette_index))
 *         )
*/
  __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 352, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_t(hb_ot_color_palette_get_name_id(__pyx_v_face, __pyx_t_4)); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "src/uharfbuzz/_face.pxi":353
 *             colors=colors,
 *             name_id=hb_ot_color_palette_get_name_id(face, palette_index),
 *             flags=OTColorPaletteFlags(hb_ot_color_palette_get_flags(face, palette_index))             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_13 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 353, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyLong_From_hb_ot_color_palette_flags_t(hb_ot_color_palette_get_flags(__pyx_v_face, __pyx_t_4)); if (unlikely(!__pyx_t_15)) __PYX_ERR(1, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_13 = PyMethod_GET_SELF(__pyx_t_14);
    assert(__pyx_t_13);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_14);
    __Pyx_INCREF(__pyx_t_13);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_14, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_15};
    __pyx_t_12 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_14, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_12)) __PYX_ERR(1, 353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
  }
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
    assert(__pyx_t_9);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_9);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_9, NULL};
    __pyx_t_14 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(1, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_colors, __pyx_v_colors, __pyx_t_14, __pyx_callargs+1, 0) < (0)) __PYX_ERR(1, 350, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_name_id, __pyx_t_7, __pyx_t_14, __pyx_callargs+1, 1) < (0)) __PYX_ERR(1, 350, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_flags, __pyx_t_12, __pyx_t_14, __pyx_callargs+1, 2) < (0)) __PYX_ERR(1, 350, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_14);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 350, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":338
 *         return hb_ot_color_has_palettes(self._hb_face)
 * 
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:             # <<<<<<<<<<<<<<
 *         cdef hb_face_t* face = self._hb_face
 *         cdef list colors = []
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_color_palette", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_colors);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":356
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def color_palettes(self) -> List[OTColorPalette]:
 *         cdef list palettes = []
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_14color_palettes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_14color_palettes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14color_palettes___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_14color_palettes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_v_palettes = 0;
  unsigned int __pyx_v_palette_count;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":358
 *     @property
 *     def color_palettes(self) -> List[OTColorPalette]:
 *         cdef list palettes = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int palette_count = hb_ot_color_palette_get_count(self._hb_face)
 *         for i in range(palette_count):
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_palettes = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":359
 *     def color_palettes(self) -> List[OTColorPalette]:
 *         cdef list palettes = []
 *         cdef unsigned int palette_count = hb_ot_color_palette_get_count(self._hb_face)             # <<<<<<<<<<<<<<
 *         for i in range(palette_count):
 *             palettes.append(self.get_color_palette(i))
*/
  __pyx_v_palette_count = hb_ot_color_palette_get_count(__pyx_v_self->_hb_face);

  /* "src/uharfbuzz/_face.pxi":360
 *         cdef list palettes = []
 *         cdef unsigned int palette_count = hb_ot_color_palette_get_count(self._hb_face)
 *         for i in range(palette_count):             # <<<<<<<<<<<<<<
 *             palettes.append(self.get_color_palette(i))
 *         return palettes
*/
  __pyx_t_2 = __pyx_v_palette_count;
  __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;

    /* "src/uharfbuzz/_face.pxi":361
 *         cdef unsigned int palette_count = hb_ot_color_palette_get_count(self._hb_face)
 *         for i in range(palette_count):
 *             palettes.append(self.get_color_palette(i))             # <<<<<<<<<<<<<<
 *         return palettes
 * 
*/
    __pyx_t_5 = ((PyObject *)__pyx_v_self);
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyLong_From_unsigned_int(__pyx_v_i); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_color_palette, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 361, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_palettes, __pyx_t_1); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(1, 361, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }

  /* "src/uharfbuzz/_face.pxi":362
 *         for i in range(palette_count):
 *             palettes.append(self.get_color_palette(i))
 *         return palettes             # <<<<<<<<<<<<<<
 * 
 *     def color_palette_color_get_name_id(self, color_index: int) -> int | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_palettes);
  __pyx_r = __pyx_v_palettes;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":356
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def color_palettes(self) -> List[OTColorPalette]:
 *         cdef list palettes = []
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.color_palettes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_palettes);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":364
 *         return palettes
 * 
 *     def color_palette_color_get_name_id(self, color_index: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id = {"color_palette_color_get_name_id", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_color_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("color_palette_color_get_name_id (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_color_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 364, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 364, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "color_palette_color_get_name_id", 0) < (0)) __PYX_ERR(1, 364, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("color_palette_color_get_name_id", 1, 1, 1, i); __PYX_ERR(1, 364, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 364, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "color_index", 0) < (0)) __PYX_ERR(1, 364, __pyx_L3_error)
    __pyx_v_color_index = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("color_palette_color_get_name_id", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 364, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.color_palette_color_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_color_index), (&PyLong_Type), 0, "color_index", 2))) __PYX_ERR(1, 364, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18color_palette_color_get_name_id(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_color_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_18color_palette_color_get_name_id(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_color_index) {
  hb_ot_name_id_t __pyx_v_name_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("color_palette_color_get_name_id", 0);

  /* "src/uharfbuzz/_face.pxi":366
 *     def color_palette_color_get_name_id(self, color_index: int) -> int | None:
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)             # <<<<<<<<<<<<<<
 *         if name_id == HB_OT_NAME_ID_INVALID:
 *             return None
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_color_index); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 366, __pyx_L1_error)
  __pyx_v_name_id = hb_ot_color_palette_color_get_name_id(__pyx_v_self->_hb_face, __pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":367
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
 *         if name_id == HB_OT_NAME_ID_INVALID:             # <<<<<<<<<<<<<<
 *             return None
 *         return name_id
*/
  __pyx_t_2 = (__pyx_v_name_id == HB_OT_NAME_ID_INVALID);
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_face.pxi":368
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
 *         if name_id == HB_OT_NAME_ID_INVALID:
 *             return None             # <<<<<<<<<<<<<<
 *         return name_id
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_face.pxi":367
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
 *         if name_id == HB_OT_NAME_ID_INVALID:             # <<<<<<<<<<<<<<
 *             return None
 *         return name_id
*/
  }

  /* "src/uharfbuzz/_face.pxi":369
 *         if name_id == HB_OT_NAME_ID_INVALID:
 *             return None
 *         return name_id             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyLong_From_hb_ot_name_id_t(__pyx_v_name_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 369, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 0) < (0)) __PYX_ERR(1, 369, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":364
 *         return palettes
 * 
 *     def color_palette_color_get_name_id(self, color_index: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.color_palette_color_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":371
 *         return name_id
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_paint(self) -> bool:
 *         return hb_ot_color_has_paint(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":373
 *     @property
 *     def has_color_paint(self) -> bool:
 *         return hb_ot_color_has_paint(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def glyph_has_color_paint(self, glyph: int) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_has_paint(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":371
 *         return name_id
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_paint(self) -> bool:
 *         return hb_ot_color_has_paint(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_color_paint.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":375
 *         return hb_ot_color_has_paint(self._hb_face)
 * 
 *     def glyph_has_color_paint(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint = {"glyph_has_color_paint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("glyph_has_color_paint (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 375, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 375, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "glyph_has_color_paint", 0) < (0)) __PYX_ERR(1, 375, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("glyph_has_color_paint", 1, 1, 1, i); __PYX_ERR(1, 375, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 375, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(1, 375, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("glyph_has_color_paint", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 375, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.glyph_has_color_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 375, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_20glyph_has_color_paint(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_20glyph_has_color_paint(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("glyph_has_color_paint", 0);

  /* "src/uharfbuzz/_face.pxi":376
 * 
 *     def glyph_has_color_paint(self, glyph: int) -> bool:
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 376, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_glyph_has_paint(__pyx_v_self->_hb_face, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 376, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":375
 *         return hb_ot_color_has_paint(self._hb_face)
 * 
 *     def glyph_has_color_paint(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.glyph_has_color_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":378
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_svg(self) -> bool:
 *         return hb_ot_color_has_svg(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":380
 *     @property
 *     def has_color_svg(self) -> bool:
 *         return hb_ot_color_has_svg(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_color_svg(self, glyph: int) -> Blob:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_has_svg(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 380, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":378
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_svg(self) -> bool:
 *         return hb_ot_color_has_svg(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_color_svg.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":382
 *         return hb_ot_color_has_svg(self._hb_face)
 * 
 *     def get_glyph_color_svg(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_svg(self._hb_face, glyph)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg = {"get_glyph_color_svg", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_color_svg (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 382, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 382, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_color_svg", 0) < (0)) __PYX_ERR(1, 382, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_color_svg", 1, 1, 1, i); __PYX_ERR(1, 382, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 382, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(1, 382, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_color_svg", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 382, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_glyph_color_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 382, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22get_glyph_color_svg(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22get_glyph_color_svg(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph) {
  hb_blob_t *__pyx_v_blob;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_color_svg", 0);

  /* "src/uharfbuzz/_face.pxi":384
 *     def get_glyph_color_svg(self, glyph: int) -> Blob:
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_svg(self._hb_face, glyph)             # <<<<<<<<<<<<<<
 *         return Blob.from_ptr(blob)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 384, __pyx_L1_error)
  __pyx_v_blob = hb_ot_color_glyph_reference_svg(__pyx_v_self->_hb_face, __pyx_t_1);

  /* "src/uharfbuzz/_face.pxi":385
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_svg(self._hb_face, glyph)
 *         return Blob.from_ptr(blob)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(__pyx_v_blob)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":382
 *         return hb_ot_color_has_svg(self._hb_face)
 * 
 *     def get_glyph_color_svg(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_svg(self._hb_face, glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_glyph_color_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":387
 *         return Blob.from_ptr(blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_png(self) -> bool:
 *         return hb_ot_color_has_png(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_png_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_png_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_png___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_13has_color_png___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":389
 *     @property
 *     def has_color_png(self) -> bool:
 *         return hb_ot_color_has_png(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     # layout
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_color_has_png(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 389, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":387
 *         return Blob.from_ptr(blob)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_color_png(self) -> bool:
 *         return hb_ot_color_has_png(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_color_png.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":392
 * 
 *     # layout
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_glyph_classes(self) -> bool:
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":394
 *     @property
 *     def has_layout_glyph_classes(self) -> bool:
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def get_layout_glyph_class(self, glyph: int) -> OTLayoutGlyphClass:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_layout_has_glyph_classes(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":392
 * 
 *     # layout
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_glyph_classes(self) -> bool:
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_layout_glyph_classes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":396
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)
 * 
 *     def get_layout_glyph_class(self, glyph: int) -> OTLayoutGlyphClass:             # <<<<<<<<<<<<<<
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class = {"get_layout_glyph_class", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_layout_glyph_class (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 396, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 396, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_layout_glyph_class", 0) < (0)) __PYX_ERR(1, 396, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_layout_glyph_class", 1, 1, 1, i); __PYX_ERR(1, 396, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 396, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(1, 396, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_layout_glyph_class", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 396, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_layout_glyph_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 396, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24get_layout_glyph_class(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_24get_layout_glyph_class(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  hb_codepoint_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_layout_glyph_class", 0);

  /* "src/uharfbuzz/_face.pxi":397
 * 
 *     def get_layout_glyph_class(self, glyph: int) -> OTLayoutGlyphClass:
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_4 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 397, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(hb_ot_layout_get_glyph_class(__pyx_v_self->_hb_face, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 397, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":396
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)
 * 
 *     def get_layout_glyph_class(self, glyph: int) -> OTLayoutGlyphClass:             # <<<<<<<<<<<<<<
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))
 * 
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.Face.get_layout_glyph_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":399
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_positioning(self) -> bool:
 *         return hb_ot_layout_has_positioning(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":401
 *     @property
 *     def has_layout_positioning(self) -> bool:
 *         return hb_ot_layout_has_positioning(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_layout_has_positioning(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 401, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":399
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_positioning(self) -> bool:
 *         return hb_ot_layout_has_positioning(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_layout_positioning.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":403
 *         return hb_ot_layout_has_positioning(self._hb_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_substitution(self) -> bool:
 *         return hb_ot_layout_has_substitution(self._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_face.pxi":405
 *     @property
 *     def has_layout_substitution(self) -> bool:
 *         return hb_ot_layout_has_substitution(self._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def get_lookup_glyph_alternates(self, lookup_index: int, glyph: int) -> List[int]:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_ot_layout_has_substitution(__pyx_v_self->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":403
 *         return hb_ot_layout_has_positioning(self._hb_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def has_layout_substitution(self) -> bool:
 *         return hb_ot_layout_has_substitution(self._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.has_layout_substitution.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":407
 *         return hb_ot_layout_has_substitution(self._hb_face)
 * 
 *     def get_lookup_glyph_alternates(self, lookup_index: int, glyph: int) -> List[int]:             # <<<<<<<<<<<<<<
 *         cdef list alternates = []
 *         cdef unsigned int i
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates = {"get_lookup_glyph_alternates", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_lookup_index = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_lookup_glyph_alternates (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_lookup_index,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 407, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 407, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_lookup_glyph_alternates", 0) < (0)) __PYX_ERR(1, 407, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_lookup_glyph_alternates", 1, 2, 2, i); __PYX_ERR(1, 407, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 407, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 407, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "lookup_index", 0) < (0)) __PYX_ERR(1, 407, __pyx_L3_error)
    __pyx_v_lookup_index = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(1, 407, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_lookup_glyph_alternates", 1, 2, 2, __pyx_nargs); __PYX_ERR(1, 407, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_lookup_glyph_alternates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup_index), (&PyLong_Type), 0, "lookup_index", 2))) __PYX_ERR(1, 407, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(1, 407, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_26get_lookup_glyph_alternates(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_lookup_index, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_26get_lookup_glyph_alternates(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_lookup_index, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_v_alternates = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  unsigned int __pyx_v_alternate_count;
  hb_codepoint_t __pyx_v_c_alternates[128];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  hb_codepoint_t __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_lookup_glyph_alternates", 0);

  /* "src/uharfbuzz/_face.pxi":408
 * 
 *     def get_lookup_glyph_alternates(self, lookup_index: int, glyph: int) -> List[int]:
 *         cdef list alternates = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_alternates = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":410
 *         cdef list alternates = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         cdef unsigned int alternate_count = STATIC_ARRAY_SIZE
 *         cdef hb_codepoint_t c_alternates[STATIC_ARRAY_SIZE]
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":411
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         cdef unsigned int alternate_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t c_alternates[STATIC_ARRAY_SIZE]
 *         while alternate_count == STATIC_ARRAY_SIZE:
*/
  __pyx_v_alternate_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":413
 *         cdef unsigned int alternate_count = STATIC_ARRAY_SIZE
 *         cdef hb_codepoint_t c_alternates[STATIC_ARRAY_SIZE]
 *         while alternate_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_layout_lookup_get_glyph_alternates(self._hb_face, lookup_index, glyph, start_offset,
 *                 &alternate_count, c_alternates)
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_alternate_count == 0x80);
    if (!__pyx_t_2) break;

    /* "src/uharfbuzz/_face.pxi":414
 *         cdef hb_codepoint_t c_alternates[STATIC_ARRAY_SIZE]
 *         while alternate_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_lookup_get_glyph_alternates(self._hb_face, lookup_index, glyph, start_offset,             # <<<<<<<<<<<<<<
 *                 &alternate_count, c_alternates)
 *             for i in range(alternate_count):
*/
    __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_lookup_index); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 414, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_4 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 414, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":415
 *         while alternate_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_lookup_get_glyph_alternates(self._hb_face, lookup_index, glyph, start_offset,
 *                 &alternate_count, c_alternates)             # <<<<<<<<<<<<<<
 *             for i in range(alternate_count):
 *                 alternates.append(c_alternates[i])
*/
    (void)(hb_ot_layout_lookup_get_glyph_alternates(__pyx_v_self->_hb_face, __pyx_t_3, __pyx_t_4, __pyx_v_start_offset, (&__pyx_v_alternate_count), __pyx_v_c_alternates));

    /* "src/uharfbuzz/_face.pxi":416
 *             hb_ot_layout_lookup_get_glyph_alternates(self._hb_face, lookup_index, glyph, start_offset,
 *                 &alternate_count, c_alternates)
 *             for i in range(alternate_count):             # <<<<<<<<<<<<<<
 *                 alternates.append(c_alternates[i])
 *             start_offset += alternate_count
*/
    __pyx_t_3 = __pyx_v_alternate_count;
    __pyx_t_5 = __pyx_t_3;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":417
 *                 &alternate_count, c_alternates)
 *             for i in range(alternate_count):
 *                 alternates.append(c_alternates[i])             # <<<<<<<<<<<<<<
 *             start_offset += alternate_count
 *         return alternates
*/
      __pyx_t_1 = __Pyx_PyLong_From_hb_codepoint_t((__pyx_v_c_alternates[__pyx_v_i])); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 417, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_alternates, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 417, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":418
 *             for i in range(alternate_count):
 *                 alternates.append(c_alternates[i])
 *             start_offset += alternate_count             # <<<<<<<<<<<<<<
 *         return alternates
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_alternate_count);
  }

  /* "src/uharfbuzz/_face.pxi":419
 *                 alternates.append(c_alternates[i])
 *             start_offset += alternate_count
 *         return alternates             # <<<<<<<<<<<<<<
 * 
 *     def get_language_feature_tags(self,
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_alternates);
  __pyx_r = __pyx_v_alternates;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":407
 *         return hb_ot_layout_has_substitution(self._hb_face)
 * 
 *     def get_lookup_glyph_alternates(self, lookup_index: int, glyph: int) -> List[int]:             # <<<<<<<<<<<<<<
 *         cdef list alternates = []
 *         cdef unsigned int i
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_lookup_glyph_alternates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_alternates);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":421
 *         return alternates
 * 
 *     def get_language_feature_tags(self,             # <<<<<<<<<<<<<<
 *                                   tag: str,
 *                                   script_index: int = 0,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags = {"get_language_feature_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_script_index = 0;
  PyObject *__pyx_v_language_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_language_feature_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_script_index,&__pyx_mstate_global->__pyx_n_u_language_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 421, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 421, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 421, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 421, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_language_feature_tags", 0) < (0)) __PYX_ERR(1, 421, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65535));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_language_feature_tags", 0, 1, 3, i); __PYX_ERR(1, 421, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(1, 421, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 421, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 421, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_65535));
    }
    __pyx_v_tag = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "script_index", 0) < (0)) __PYX_ERR(1, 423, __pyx_L3_error)
    __pyx_v_script_index = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "language_index", 0) < (0)) __PYX_ERR(1, 424, __pyx_L3_error)
    __pyx_v_language_index = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_language_feature_tags", 0, 1, 3, __pyx_nargs); __PYX_ERR(1, 421, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_language_feature_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(1, 422, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_index), (&PyLong_Type), 0, "script_index", 2))) __PYX_ERR(1, 423, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_language_index), (&PyLong_Type), 0, "language_index", 2))) __PYX_ERR(1, 424, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_28get_language_feature_tags(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_tag, __pyx_v_script_index, __pyx_v_language_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_28get_language_feature_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index, PyObject *__pyx_v_language_index) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  unsigned int __pyx_v_feature_count;
  hb_tag_t __pyx_v_c_tags[128];
  PyObject *__pyx_v_tags = 0;
  char __pyx_v_cstr[5];
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_language_feature_tags", 0);

  /* "src/uharfbuzz/_face.pxi":425
 *                                   script_index: int = 0,
 *                                   language_index: int = 0xFFFF) -> List[str]:
 *         cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int feature_count = STATIC_ARRAY_SIZE
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":426
 *                                   language_index: int = 0xFFFF) -> List[str]:
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         cdef unsigned int feature_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(1, 426, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "src/uharfbuzz/_face.pxi":427
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int feature_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []
*/
  __pyx_v_feature_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":429
 *         cdef unsigned int feature_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []             # <<<<<<<<<<<<<<
 *         cdef char cstr[5]
 *         cdef unsigned int i
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tags = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":432
 *         cdef char cstr[5]
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while feature_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_language_get_feature_tags(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":433
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while feature_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_layout_language_get_feature_tags(
 *                 self._hb_face,
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_feature_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_face.pxi":436
 *             hb_ot_layout_language_get_feature_tags(
 *                 self._hb_face,
 *                 hb_tag, script_index,             # <<<<<<<<<<<<<<
 *                 language_index,
 *                 start_offset,
*/
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_script_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 436, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":437
 *                 self._hb_face,
 *                 hb_tag, script_index,
 *                 language_index,             # <<<<<<<<<<<<<<
 *                 start_offset,
 *                 &feature_count,
*/
    __pyx_t_5 = __Pyx_PyLong_As_unsigned_int(__pyx_v_language_index); if (unlikely((__pyx_t_5 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 437, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":434
 *         cdef unsigned int start_offset = 0
 *         while feature_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_language_get_feature_tags(             # <<<<<<<<<<<<<<
 *                 self._hb_face,
 *                 hb_tag, script_index,
*/
    (void)(hb_ot_layout_language_get_feature_tags(__pyx_v_self->_hb_face, __pyx_v_hb_tag, __pyx_t_4, __pyx_t_5, __pyx_v_start_offset, (&__pyx_v_feature_count), __pyx_v_c_tags));

    /* "src/uharfbuzz/_face.pxi":441
 *                 &feature_count,
 *                 c_tags)
 *             for i in range(feature_count):             # <<<<<<<<<<<<<<
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
*/
    __pyx_t_5 = __pyx_v_feature_count;
    __pyx_t_4 = __pyx_t_5;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_4; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":442
 *                 c_tags)
 *             for i in range(feature_count):
 *                 hb_tag_to_string(c_tags[i], cstr)             # <<<<<<<<<<<<<<
 *                 cstr[4] = b'\0'
 *                 packed = cstr
*/
      hb_tag_to_string((__pyx_v_c_tags[__pyx_v_i]), __pyx_v_cstr);

      /* "src/uharfbuzz/_face.pxi":443
 *             for i in range(feature_count):
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *                 packed = cstr
 *                 tags.append(packed.decode())
*/
      (__pyx_v_cstr[4]) = '\x00';

      /* "src/uharfbuzz/_face.pxi":444
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 tags.append(packed.decode())
 *             start_offset += feature_count
*/
      __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 444, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "src/uharfbuzz/_face.pxi":445
 *                 cstr[4] = b'\0'
 *                 packed = cstr
 *                 tags.append(packed.decode())             # <<<<<<<<<<<<<<
 *             start_offset += feature_count
 *         return tags
*/
      __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 445, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_tags, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 445, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":446
 *                 packed = cstr
 *                 tags.append(packed.decode())
 *             start_offset += feature_count             # <<<<<<<<<<<<<<
 *         return tags
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_feature_count);
  }

  /* "src/uharfbuzz/_face.pxi":447
 *                 tags.append(packed.decode())
 *             start_offset += feature_count
 *         return tags             # <<<<<<<<<<<<<<
 * 
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_tags);
  __pyx_r = __pyx_v_tags;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":421
 *         return alternates
 * 
 *     def get_language_feature_tags(self,             # <<<<<<<<<<<<<<
 *                                   tag: str,
 *                                   script_index: int = 0,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_language_feature_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_tags);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":449
 *         return tags
 * 
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags = {"get_script_language_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_script_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_script_language_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_script_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 449, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 449, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 449, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_script_language_tags", 0) < (0)) __PYX_ERR(1, 449, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_script_language_tags", 0, 1, 2, i); __PYX_ERR(1, 449, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 449, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 449, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));
    }
    __pyx_v_tag = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "script_index", 0) < (0)) __PYX_ERR(1, 449, __pyx_L3_error)
    __pyx_v_script_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_script_language_tags", 0, 1, 2, __pyx_nargs); __PYX_ERR(1, 449, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_script_language_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(1, 449, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_index), (&PyLong_Type), 0, "script_index", 2))) __PYX_ERR(1, 449, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_30get_script_language_tags(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_tag, __pyx_v_script_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_30get_script_language_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  unsigned int __pyx_v_language_count;
  hb_tag_t __pyx_v_c_tags[128];
  PyObject *__pyx_v_tags = 0;
  char __pyx_v_cstr[5];
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_script_language_tags", 0);

  /* "src/uharfbuzz/_face.pxi":450
 * 
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:
 *         cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int language_count = STATIC_ARRAY_SIZE
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":451
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         cdef unsigned int language_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "src/uharfbuzz/_face.pxi":452
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int language_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []
*/
  __pyx_v_language_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":454
 *         cdef unsigned int language_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []             # <<<<<<<<<<<<<<
 *         cdef char cstr[5]
 *         cdef unsigned int i
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tags = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":457
 *         cdef char cstr[5]
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while language_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_script_get_language_tags(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":458
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while language_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_layout_script_get_language_tags(
 *                 self._hb_face,
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_language_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_face.pxi":462
 *                 self._hb_face,
 *                 hb_tag,
 *                 script_index,             # <<<<<<<<<<<<<<
 *                 start_offset,
 *                 &language_count,
*/
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_script_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(1, 462, __pyx_L1_error)

    /* "src/uharfbuzz/_face.pxi":459
 *         cdef unsigned int start_offset = 0
 *         while language_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_script_get_language_tags(             # <<<<<<<<<<<<<<
 *                 self._hb_face,
 *                 hb_tag,
*/
    (void)(hb_ot_layout_script_get_language_tags(__pyx_v_self->_hb_face, __pyx_v_hb_tag, __pyx_t_4, __pyx_v_start_offset, (&__pyx_v_language_count), __pyx_v_c_tags));

    /* "src/uharfbuzz/_face.pxi":466
 *                 &language_count,
 *                 c_tags)
 *             for i in range(language_count):             # <<<<<<<<<<<<<<
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
*/
    __pyx_t_4 = __pyx_v_language_count;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":467
 *                 c_tags)
 *             for i in range(language_count):
 *                 hb_tag_to_string(c_tags[i], cstr)             # <<<<<<<<<<<<<<
 *                 cstr[4] = b'\0'
 *                 packed = cstr
*/
      hb_tag_to_string((__pyx_v_c_tags[__pyx_v_i]), __pyx_v_cstr);

      /* "src/uharfbuzz/_face.pxi":468
 *             for i in range(language_count):
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *                 packed = cstr
 *                 tags.append(packed.decode())
*/
      (__pyx_v_cstr[4]) = '\x00';

      /* "src/uharfbuzz/_face.pxi":469
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 tags.append(packed.decode())
 *             start_offset += language_count
*/
      __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 469, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "src/uharfbuzz/_face.pxi":470
 *                 cstr[4] = b'\0'
 *                 packed = cstr
 *                 tags.append(packed.decode())             # <<<<<<<<<<<<<<
 *             start_offset += language_count
 *         return tags
*/
      __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 470, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_tags, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 470, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":471
 *                 packed = cstr
 *                 tags.append(packed.decode())
 *             start_offset += language_count             # <<<<<<<<<<<<<<
 *         return tags
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_language_count);
  }

  /* "src/uharfbuzz/_face.pxi":472
 *                 tags.append(packed.decode())
 *             start_offset += language_count
 *         return tags             # <<<<<<<<<<<<<<
 * 
 *     def get_table_script_tags(self, tag: str) -> List[str]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_tags);
  __pyx_r = __pyx_v_tags;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":449
 *         return tags
 * 
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_script_language_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_tags);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":474
 *         return tags
 * 
 *     def get_table_script_tags(self, tag: str) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags = {"get_table_script_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_table_script_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 474, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 474, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_table_script_tags", 0) < (0)) __PYX_ERR(1, 474, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_table_script_tags", 1, 1, 1, i); __PYX_ERR(1, 474, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 474, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_table_script_tags", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 474, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_table_script_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(1, 474, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_32get_table_script_tags(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_32get_table_script_tags(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  unsigned int __pyx_v_script_count;
  hb_tag_t __pyx_v_c_tags[128];
  PyObject *__pyx_v_tags = 0;
  char __pyx_v_cstr[5];
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_table_script_tags", 0);

  /* "src/uharfbuzz/_face.pxi":475
 * 
 *     def get_table_script_tags(self, tag: str) -> List[str]:
 *         cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int script_count = STATIC_ARRAY_SIZE
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":476
 *     def get_table_script_tags(self, tag: str) -> List[str]:
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         cdef unsigned int script_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(1, 476, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "src/uharfbuzz/_face.pxi":477
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *         cdef unsigned int script_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []
*/
  __pyx_v_script_count = 0x80;

  /* "src/uharfbuzz/_face.pxi":479
 *         cdef unsigned int script_count = STATIC_ARRAY_SIZE
 *         cdef hb_tag_t c_tags[STATIC_ARRAY_SIZE]
 *         cdef list tags = []             # <<<<<<<<<<<<<<
 *         cdef char cstr[5]
 *         cdef unsigned int i
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tags = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":482
 *         cdef char cstr[5]
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while script_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_table_get_script_tags(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_face.pxi":483
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while script_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_layout_table_get_script_tags(
 *                 self._hb_face,
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_script_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_face.pxi":484
 *         cdef unsigned int start_offset = 0
 *         while script_count == STATIC_ARRAY_SIZE:
 *             hb_ot_layout_table_get_script_tags(             # <<<<<<<<<<<<<<
 *                 self._hb_face,
 *                 hb_tag,
*/
    (void)(hb_ot_layout_table_get_script_tags(__pyx_v_self->_hb_face, __pyx_v_hb_tag, __pyx_v_start_offset, (&__pyx_v_script_count), __pyx_v_c_tags));

    /* "src/uharfbuzz/_face.pxi":490
 *                 &script_count,
 *                 c_tags)
 *             for i in range(script_count):             # <<<<<<<<<<<<<<
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
*/
    __pyx_t_4 = __pyx_v_script_count;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_i = __pyx_t_6;

      /* "src/uharfbuzz/_face.pxi":491
 *                 c_tags)
 *             for i in range(script_count):
 *                 hb_tag_to_string(c_tags[i], cstr)             # <<<<<<<<<<<<<<
 *                 cstr[4] = b'\0'
 *                 packed = cstr
*/
      hb_tag_to_string((__pyx_v_c_tags[__pyx_v_i]), __pyx_v_cstr);

      /* "src/uharfbuzz/_face.pxi":492
 *             for i in range(script_count):
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *                 packed = cstr
 *                 tags.append(packed.decode())
*/
      (__pyx_v_cstr[4]) = '\x00';

      /* "src/uharfbuzz/_face.pxi":493
 *                 hb_tag_to_string(c_tags[i], cstr)
 *                 cstr[4] = b'\0'
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 tags.append(packed.decode())
 *             start_offset += script_count
*/
      __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "src/uharfbuzz/_face.pxi":494
 *                 cstr[4] = b'\0'
 *                 packed = cstr
 *                 tags.append(packed.decode())             # <<<<<<<<<<<<<<
 *             start_offset += script_count
 *         return tags
*/
      __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 494, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyList_Append(__pyx_v_tags, __pyx_t_1); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 494, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_face.pxi":495
 *                 packed = cstr
 *                 tags.append(packed.decode())
 *             start_offset += script_count             # <<<<<<<<<<<<<<
 *         return tags
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_script_count);
  }

  /* "src/uharfbuzz/_face.pxi":496
 *                 tags.append(packed.decode())
 *             start_offset += script_count
 *         return tags             # <<<<<<<<<<<<<<
 * 
 *     def list_names(self) -> List[OTNameEntry]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_tags);
  __pyx_r = __pyx_v_tags;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":474
 *         return tags
 * 
 *     def get_table_script_tags(self, tag: str) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_table_script_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_tags);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":498
 *         return tags
 * 
 *     def list_names(self) -> List[OTNameEntry]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int num_entries
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_35list_names(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_35list_names = {"list_names", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_35list_names, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_35list_names(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("list_names (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("list_names", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("list_names", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_34list_names(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_34list_names(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_v_ret = 0;
  unsigned int __pyx_v_num_entries;
  hb_ot_name_entry_t const *__pyx_v_entries;
  unsigned int __pyx_v_i;
  const char *__pyx_v_cstr;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_v_language = NULL;
  PyObject *__pyx_v_name_id = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("list_names", 0);

  /* "src/uharfbuzz/_face.pxi":499
 * 
 *     def list_names(self) -> List[OTNameEntry]:
 *         cdef list ret = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int num_entries
 *         cdef const hb_ot_name_entry_t* entries
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ret = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_face.pxi":506
 *         cdef bytes packed
 * 
 *         entries = hb_ot_name_list_names(self._hb_face, &num_entries)             # <<<<<<<<<<<<<<
 *         for i in range(num_entries):
 *             cstr = hb_language_to_string(entries[i].language)
*/
  __pyx_v_entries = hb_ot_name_list_names(__pyx_v_self->_hb_face, (&__pyx_v_num_entries));

  /* "src/uharfbuzz/_face.pxi":507
 * 
 *         entries = hb_ot_name_list_names(self._hb_face, &num_entries)
 *         for i in range(num_entries):             # <<<<<<<<<<<<<<
 *             cstr = hb_language_to_string(entries[i].language)
 *             if cstr is NULL:
*/
  __pyx_t_2 = __pyx_v_num_entries;
  __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;

    /* "src/uharfbuzz/_face.pxi":508
 *         entries = hb_ot_name_list_names(self._hb_face, &num_entries)
 *         for i in range(num_entries):
 *             cstr = hb_language_to_string(entries[i].language)             # <<<<<<<<<<<<<<
 *             if cstr is NULL:
 *                 language = None
*/
    __pyx_v_cstr = hb_language_to_string((__pyx_v_entries[__pyx_v_i]).language);

    /* "src/uharfbuzz/_face.pxi":509
 *         for i in range(num_entries):
 *             cstr = hb_language_to_string(entries[i].language)
 *             if cstr is NULL:             # <<<<<<<<<<<<<<
 *                 language = None
 *             else:
*/
    __pyx_t_5 = (__pyx_v_cstr == NULL);
    if (__pyx_t_5) {

      /* "src/uharfbuzz/_face.pxi":510
 *             cstr = hb_language_to_string(entries[i].language)
 *             if cstr is NULL:
 *                 language = None             # <<<<<<<<<<<<<<
 *             else:
 *                 packed = cstr
*/
      __Pyx_INCREF(Py_None);
      __Pyx_XDECREF_SET(__pyx_v_language, ((PyObject*)Py_None));

      /* "src/uharfbuzz/_face.pxi":509
 *         for i in range(num_entries):
 *             cstr = hb_language_to_string(entries[i].language)
 *             if cstr is NULL:             # <<<<<<<<<<<<<<
 *                 language = None
 *             else:
*/
      goto __pyx_L5;
    }

    /* "src/uharfbuzz/_face.pxi":512
 *                 language = None
 *             else:
 *                 packed = cstr             # <<<<<<<<<<<<<<
 *                 language = packed.decode()
 *             if entries[i].name_id in iter(OTNameIdPredefined):
*/
    /*else*/ {
      __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "src/uharfbuzz/_face.pxi":513
 *             else:
 *                 packed = cstr
 *                 language = packed.decode()             # <<<<<<<<<<<<<<
 *             if entries[i].name_id in iter(OTNameIdPredefined):
 *                 name_id = OTNameIdPredefined(entries[i].name_id)
*/
      __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 513, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_language, ((PyObject*)__pyx_t_1));
      __pyx_t_1 = 0;
    }
    __pyx_L5:;

    /* "src/uharfbuzz/_face.pxi":514
 *                 packed = cstr
 *                 language = packed.decode()
 *             if entries[i].name_id in iter(OTNameIdPredefined):             # <<<<<<<<<<<<<<
 *                 name_id = OTNameIdPredefined(entries[i].name_id)
 *             else:
*/
    __pyx_t_1 = __Pyx_PyLong_From_hb_ot_name_id_t((__pyx_v_entries[__pyx_v_i]).name_id); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_7, Py_EQ)); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(1, 514, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (__pyx_t_5) {

      /* "src/uharfbuzz/_face.pxi":515
 *                 language = packed.decode()
 *             if entries[i].name_id in iter(OTNameIdPredefined):
 *                 name_id = OTNameIdPredefined(entries[i].name_id)             # <<<<<<<<<<<<<<
 *             else:
 *                 name_id = entries[i].name_id
*/
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 515, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_8 = __Pyx_PyLong_From_hb_ot_name_id_t((__pyx_v_entries[__pyx_v_i]).name_id); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 515, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_6))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_6);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_8};
        __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 515, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
      }
      __Pyx_XDECREF_SET(__pyx_v_name_id, __pyx_t_7);
      __pyx_t_7 = 0;

      /* "src/uharfbuzz/_face.pxi":514
 *                 packed = cstr
 *                 language = packed.decode()
 *             if entries[i].name_id in iter(OTNameIdPredefined):             # <<<<<<<<<<<<<<
 *                 name_id = OTNameIdPredefined(entries[i].name_id)
 *             else:
*/
      goto __pyx_L6;
    }

    /* "src/uharfbuzz/_face.pxi":517
 *                 name_id = OTNameIdPredefined(entries[i].name_id)
 *             else:
 *                 name_id = entries[i].name_id             # <<<<<<<<<<<<<<
 *             ret.append(OTNameEntry(name_id=name_id, language=language))
 *         return ret
*/
    /*else*/ {
      __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_t((__pyx_v_entries[__pyx_v_i]).name_id); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 517, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_XDECREF_SET(__pyx_v_name_id, __pyx_t_7);
      __pyx_t_7 = 0;
    }
    __pyx_L6:;

    /* "src/uharfbuzz/_face.pxi":518
 *             else:
 *                 name_id = entries[i].name_id
 *             ret.append(OTNameEntry(name_id=name_id, language=language))             # <<<<<<<<<<<<<<
 *         return ret
 * 
*/
    __pyx_t_6 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_OTNameEntry); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 518, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
      assert(__pyx_t_6);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_6, NULL};
      __pyx_t_1 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_name_id, __pyx_v_name_id, __pyx_t_1, __pyx_callargs+1, 0) < (0)) __PYX_ERR(1, 518, __pyx_L1_error)
      if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_language, __pyx_v_language, __pyx_t_1, __pyx_callargs+1, 1) < (0)) __PYX_ERR(1, 518, __pyx_L1_error)
      __pyx_t_7 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_1);
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
    }
    __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_ret, __pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 518, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }

  /* "src/uharfbuzz/_face.pxi":519
 *                 name_id = entries[i].name_id
 *             ret.append(OTNameEntry(name_id=name_id, language=language))
 *         return ret             # <<<<<<<<<<<<<<
 * 
 *     def get_name(self, name_id: OTNameIdPredefined | int, language: str | None = None) -> str | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ret);
  __pyx_r = __pyx_v_ret;
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":498
 *         return tags
 * 
 *     def list_names(self) -> List[OTNameEntry]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int num_entries
*/

  /* 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_8);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.list_names", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_language);
  __Pyx_XDECREF(__pyx_v_name_id);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_face.pxi":521
 *         return ret
 * 
 *     def get_name(self, name_id: OTNameIdPredefined | int, language: str | None = None) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef bytes packed
 *         cdef hb_language_t lang
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_37get_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_37get_name = {"get_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_37get_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_37get_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name_id = 0;
  PyObject *__pyx_v_language = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_name (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name_id,&__pyx_mstate_global->__pyx_n_u_language,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(1, 521, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 521, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 521, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_name", 0) < (0)) __PYX_ERR(1, 521, __pyx_L3_error)
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_name", 0, 1, 2, i); __PYX_ERR(1, 521, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(1, 521, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(1, 521, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject*)Py_None));
    }
    __pyx_v_name_id = values[0];
    __pyx_v_language = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_name", 0, 1, 2, __pyx_nargs); __PYX_ERR(1, 521, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_language), (&PyUnicode_Type), 1, "language", 2))) __PYX_ERR(1, 521, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_36get_name(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v_name_id, __pyx_v_language);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_36get_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, PyObject *__pyx_v_name_id, PyObject *__pyx_v_language) {
  PyObject *__pyx_v_packed = 0;
  hb_language_t __pyx_v_lang;
  char *__pyx_v_text;
  unsigned int __pyx_v_length;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  char *__pyx_t_3;
  hb_ot_name_id_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  char const *__pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_name", 0);

  /* "src/uharfbuzz/_face.pxi":527
 *         cdef unsigned int length
 * 
 *         if language is None:             # <<<<<<<<<<<<<<
 *             lang = <hb_language_t>0  # HB_LANGUAGE_INVALID
 *         else:
*/
  __pyx_t_1 = (__pyx_v_language == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_face.pxi":528
 * 
 *         if language is None:
 *             lang = <hb_language_t>0  # HB_LANGUAGE_INVALID             # <<<<<<<<<<<<<<
 *         else:
 *             packed = language.encode()
*/
    __pyx_v_lang = 0;

    /* "src/uharfbuzz/_face.pxi":527
 *         cdef unsigned int length
 * 
 *         if language is None:             # <<<<<<<<<<<<<<
 *             lang = <hb_language_t>0  # HB_LANGUAGE_INVALID
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_face.pxi":530
 *             lang = <hb_language_t>0  # HB_LANGUAGE_INVALID
 *         else:
 *             packed = language.encode()             # <<<<<<<<<<<<<<
 *             lang = hb_language_from_string(<char*>packed, -1)
 * 
*/
  /*else*/ {
    if (unlikely(__pyx_v_language == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "encode");
      __PYX_ERR(1, 530, __pyx_L1_error)
    }
    __pyx_t_2 = PyUnicode_AsEncodedString(__pyx_v_language, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 530, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_packed = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "src/uharfbuzz/_face.pxi":531
 *         else:
 *             packed = language.encode()
 *             lang = hb_language_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 * 
 *         length = hb_ot_name_get_utf8(self._hb_face, name_id, lang, NULL, NULL)
*/
    __pyx_t_3 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(1, 531, __pyx_L1_error)
    __pyx_v_lang = hb_language_from_string(((char *)__pyx_t_3), -1);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_face.pxi":533
 *             lang = hb_language_from_string(<char*>packed, -1)
 * 
 *         length = hb_ot_name_get_utf8(self._hb_face, name_id, lang, NULL, NULL)             # <<<<<<<<<<<<<<
 *         if length:
 *             length += 1  # for the null terminator
*/
  __pyx_t_4 = __Pyx_PyLong_As_hb_ot_name_id_t(__pyx_v_name_id); if (unlikely((__pyx_t_4 == ((hb_ot_name_id_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 533, __pyx_L1_error)
  __pyx_v_length = hb_ot_name_get_utf8(__pyx_v_self->_hb_face, __pyx_t_4, __pyx_v_lang, NULL, NULL);

  /* "src/uharfbuzz/_face.pxi":534
 * 
 *         length = hb_ot_name_get_utf8(self._hb_face, name_id, lang, NULL, NULL)
 *         if length:             # <<<<<<<<<<<<<<
 *             length += 1  # for the null terminator
 *             text = <char*>malloc(length * sizeof(char))
*/
  __pyx_t_1 = (__pyx_v_length != 0);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_face.pxi":535
 *         length = hb_ot_name_get_utf8(self._hb_face, name_id, lang, NULL, NULL)
 *         if length:
 *             length += 1  # for the null terminator             # <<<<<<<<<<<<<<
 *             text = <char*>malloc(length * sizeof(char))
 *             if text == NULL:
*/
    __pyx_v_length = (__pyx_v_length + 1);

    /* "src/uharfbuzz/_face.pxi":536
 *         if length:
 *             length += 1  # for the null terminator
 *             text = <char*>malloc(length * sizeof(char))             # <<<<<<<<<<<<<<
 *             if text == NULL:
 *                 raise MemoryError()
*/
    __pyx_v_text = ((char *)malloc((__pyx_v_length * (sizeof(char)))));

    /* "src/uharfbuzz/_face.pxi":537
 *             length += 1  # for the null terminator
 *             text = <char*>malloc(length * sizeof(char))
 *             if text == NULL:             # <<<<<<<<<<<<<<
 *                 raise MemoryError()
 *             try:
*/
    __pyx_t_1 = (__pyx_v_text == NULL);
    if (unlikely(__pyx_t_1)) {

      /* "src/uharfbuzz/_face.pxi":538
 *             text = <char*>malloc(length * sizeof(char))
 *             if text == NULL:
 *                 raise MemoryError()             # <<<<<<<<<<<<<<
 *             try:
 *                 hb_ot_name_get_utf8(self._hb_face, name_id, lang, &length, text)
*/
      PyErr_NoMemory(); __PYX_ERR(1, 538, __pyx_L1_error)

      /* "src/uharfbuzz/_face.pxi":537
 *             length += 1  # for the null terminator
 *             text = <char*>malloc(length * sizeof(char))
 *             if text == NULL:             # <<<<<<<<<<<<<<
 *                 raise MemoryError()
 *             try:
*/
    }

    /* "src/uharfbuzz/_face.pxi":539
 *             if text == NULL:
 *                 raise MemoryError()
 *             try:             # <<<<<<<<<<<<<<
 *                 hb_ot_name_get_utf8(self._hb_face, name_id, lang, &length, text)
 *                 result = text[:length].decode("utf-8")
*/
    /*try:*/ {

      /* "src/uharfbuzz/_face.pxi":540
 *                 raise MemoryError()
 *             try:
 *                 hb_ot_name_get_utf8(self._hb_face, name_id, lang, &length, text)             # <<<<<<<<<<<<<<
 *                 result = text[:length].decode("utf-8")
 *                 return result
*/
      __pyx_t_4 = __Pyx_PyLong_As_hb_ot_name_id_t(__pyx_v_name_id); if (unlikely((__pyx_t_4 == ((hb_ot_name_id_t)-1)) && PyErr_Occurred())) __PYX_ERR(1, 540, __pyx_L7_error)
      (void)(hb_ot_name_get_utf8(__pyx_v_self->_hb_face, __pyx_t_4, __pyx_v_lang, (&__pyx_v_length), __pyx_v_text));

      /* "src/uharfbuzz/_face.pxi":541
 *             try:
 *                 hb_ot_name_get_utf8(self._hb_face, name_id, lang, &length, text)
 *                 result = text[:length].decode("utf-8")             # <<<<<<<<<<<<<<
 *                 return result
 *             finally:
*/
      __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_text, 0, __pyx_v_length, NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 541, __pyx_L7_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_result = ((PyObject*)__pyx_t_2);
      __pyx_t_2 = 0;

      /* "src/uharfbuzz/_face.pxi":542
 *                 hb_ot_name_get_utf8(self._hb_face, name_id, lang, &length, text)
 *                 result = text[:length].decode("utf-8")
 *                 return result             # <<<<<<<<<<<<<<
 *             finally:
 *                 free(text)
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_result);
      __pyx_r = __pyx_v_result;
      goto __pyx_L6_return;
    }

    /* "src/uharfbuzz/_face.pxi":544
 *                 return result
 *             finally:
 *                 free(text)             # <<<<<<<<<<<<<<
 *         return None
*/
    /*finally:*/ {
      __pyx_L7_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __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_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
        if ( unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_9);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        __pyx_t_5 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
        {
          free(__pyx_v_text);
        }
        __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);
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
        __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_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
        goto __pyx_L1_error;
      }
      __pyx_L6_return: {
        __pyx_t_14 = __pyx_r;
        __pyx_r = 0;
        free(__pyx_v_text);
        __pyx_r = __pyx_t_14;
        __pyx_t_14 = 0;
        goto __pyx_L0;
      }
    }

    /* "src/uharfbuzz/_face.pxi":534
 * 
 *         length = hb_ot_name_get_utf8(self._hb_face, name_id, lang, NULL, NULL)
 *         if length:             # <<<<<<<<<<<<<<
 *             length += 1  # for the null terminator
 *             text = <char*>malloc(length * sizeof(char))
*/
  }

  /* "src/uharfbuzz/_face.pxi":545
 *             finally:
 *                 free(text)
 *         return None             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "src/uharfbuzz/_face.pxi":521
 *         return ret
 * 
 *     def get_name(self, name_id: OTNameIdPredefined | int, language: str | None = None) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef bytes packed
 *         cdef hb_language_t lang
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.get_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_38__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_38__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Face_40__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Face_40__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Face.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":1
 * cdef void _move_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                         void *draw_data,
 *                         hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__move_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_to_x, float __pyx_v_to_y, void *__pyx_v_user_data) {
  PyObject *__pyx_v_m = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_move_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":7
 *                         float to_y,
 *                         void *user_data) noexcept:
 *     m = <object>user_data             # <<<<<<<<<<<<<<
 *     m(to_x, to_y, <object>draw_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_m = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":8
 *                         void *user_data) noexcept:
 *     m = <object>user_data
 *     m(to_x, to_y, <object>draw_data)             # <<<<<<<<<<<<<<
 * 
 * cdef void _line_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_m);
  __pyx_t_3 = __pyx_v_m; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_draw_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":1
 * cdef void _move_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                         void *draw_data,
 *                         hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._move_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_m);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_draw.pxi":10
 *     m(to_x, to_y, <object>draw_data)
 * 
 * cdef void _line_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                         void *draw_data,
 *                         hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__line_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_to_x, float __pyx_v_to_y, void *__pyx_v_user_data) {
  PyObject *__pyx_v_l = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_line_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":16
 *                         float to_y,
 *                         void *user_data) noexcept:
 *     l = <object>user_data             # <<<<<<<<<<<<<<
 *     l(to_x, to_y, <object>draw_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_l = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":17
 *                         void *user_data) noexcept:
 *     l = <object>user_data
 *     l(to_x, to_y, <object>draw_data)             # <<<<<<<<<<<<<<
 * 
 * cdef void _close_path_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_l);
  __pyx_t_3 = __pyx_v_l; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_draw_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (4-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 17, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":10
 *     m(to_x, to_y, <object>draw_data)
 * 
 * cdef void _line_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                         void *draw_data,
 *                         hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._line_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_l);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_draw.pxi":19
 *     l(to_x, to_y, <object>draw_data)
 * 
 * cdef void _close_path_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                            void *draw_data,
 *                            hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__close_path_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, void *__pyx_v_user_data) {
  PyObject *__pyx_v_cl = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_close_path_func", 0);

  /* "src/uharfbuzz/_draw.pxi":23
 *                            hb_draw_state_t *st,
 *                            void *user_data) noexcept:
 *     cl = <object>user_data             # <<<<<<<<<<<<<<
 *     cl(<object>draw_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_cl = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":24
 *                            void *user_data) noexcept:
 *     cl = <object>user_data
 *     cl(<object>draw_data)             # <<<<<<<<<<<<<<
 * 
 * cdef void _quadratic_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_cl);
  __pyx_t_3 = __pyx_v_cl; 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_draw_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 24, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":19
 *     l(to_x, to_y, <object>draw_data)
 * 
 * cdef void _close_path_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                            void *draw_data,
 *                            hb_draw_state_t *st,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._close_path_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_cl);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_draw.pxi":26
 *     cl(<object>draw_data)
 * 
 * cdef void _quadratic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                              void *draw_data,
 *                              hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__quadratic_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_c1_x, float __pyx_v_c1_y, float __pyx_v_to_x, float __pyx_v_to_y, void *__pyx_v_user_data) {
  PyObject *__pyx_v_q = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_quadratic_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":34
 *                              float to_y,
 *                              void *user_data) noexcept:
 *     q = <object>user_data             # <<<<<<<<<<<<<<
 *     q(c1_x, c1_y, to_x, to_y, <object>draw_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_q = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":35
 *                              void *user_data) noexcept:
 *     q = <object>user_data
 *     q(c1_x, c1_y, to_x, to_y, <object>draw_data)             # <<<<<<<<<<<<<<
 * 
 * cdef void _cubic_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_q);
  __pyx_t_3 = __pyx_v_q; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_c1_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_c1_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[6] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, ((PyObject *)__pyx_v_draw_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (6-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 35, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":26
 *     cl(<object>draw_data)
 * 
 * cdef void _quadratic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                              void *draw_data,
 *                              hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._quadratic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_q);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_draw.pxi":37
 *     q(c1_x, c1_y, to_x, to_y, <object>draw_data)
 * 
 * cdef void _cubic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                          void *draw_data,
 *                          hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__cubic_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_c1_x, float __pyx_v_c1_y, float __pyx_v_c2_x, float __pyx_v_c2_y, float __pyx_v_to_x, float __pyx_v_to_y, void *__pyx_v_user_data) {
  PyObject *__pyx_v_c = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_cubic_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":47
 *                          float to_y,
 *                          void *user_data) noexcept:
 *     c = <object>user_data             # <<<<<<<<<<<<<<
 *     c(c1_x, c1_y, c2_x, c2_y, to_x, to_y, <object>draw_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_c = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":48
 *                          void *user_data) noexcept:
 *     c = <object>user_data
 *     c(c1_x, c1_y, c2_x, c2_y, to_x, to_y, <object>draw_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_c);
  __pyx_t_3 = __pyx_v_c; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_c1_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_c1_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_c2_x); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_c2_y); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[8] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, ((PyObject *)__pyx_v_draw_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (8-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 48, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":37
 *     q(c1_x, c1_y, to_x, to_y, <object>draw_data)
 * 
 * cdef void _cubic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                          void *draw_data,
 *                          hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._cubic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_draw.pxi":59
 *     cdef object _close_path_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_drawfuncs = hb_draw_funcs_create()
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_draw.pxi":60
 * 
 *     def __cinit__(self):
 *         self._hb_drawfuncs = hb_draw_funcs_create()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_v_self->_hb_drawfuncs = hb_draw_funcs_create();

  /* "src/uharfbuzz/_draw.pxi":59
 *     cdef object _close_path_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_drawfuncs = hb_draw_funcs_create()
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":62
 *         self._hb_drawfuncs = hb_draw_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self) {

  /* "src/uharfbuzz/_draw.pxi":63
 * 
 *     def __dealloc__(self):
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)             # <<<<<<<<<<<<<<
 * 
 *     @deprecated("Font.draw_glyph()")
*/
  hb_draw_funcs_destroy(__pyx_v_self->_hb_drawfuncs);

  /* "src/uharfbuzz/_draw.pxi":62
 *         self._hb_drawfuncs = hb_draw_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_draw.pxi":65
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def get_glyph_shape(self, font: Font, gid: int):
 *         font.draw_glyph(gid, self)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape = {"get_glyph_shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_shape (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 65, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 65, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 65, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_shape", 0) < (0)) __PYX_ERR(8, 65, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_shape", 1, 2, 2, i); __PYX_ERR(8, 65, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 65, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 65, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "gid", 0) < (0)) __PYX_ERR(8, 66, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_shape", 1, 2, 2, __pyx_nargs); __PYX_ERR(8, 65, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.get_glyph_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(8, 66, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(8, 66, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_4get_glyph_shape(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_font, __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_4get_glyph_shape(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_gid) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_shape", 0);

  /* "src/uharfbuzz/_draw.pxi":67
 *     @deprecated("Font.draw_glyph()")
 *     def get_glyph_shape(self, font: Font, gid: int):
 *         font.draw_glyph(gid, self)             # <<<<<<<<<<<<<<
 * 
 *     @deprecated("Font.draw_glyph()")
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_gid, ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 67, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":65
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def get_glyph_shape(self, font: Font, gid: int):
 *         font.draw_glyph(gid, self)
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.get_glyph_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":69
 *         font.draw_glyph(gid, self)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):
 *         font.draw_glyph(gid, self, draw_data)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph = {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_gid = 0;
  PyObject *__pyx_v_draw_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_gid,&__pyx_mstate_global->__pyx_n_u_draw_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 69, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "draw_glyph", 0) < (0)) __PYX_ERR(8, 69, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":70
 * 
 *     @deprecated("Font.draw_glyph()")
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):             # <<<<<<<<<<<<<<
 *         font.draw_glyph(gid, self, draw_data)
 * 
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("draw_glyph", 0, 2, 3, i); __PYX_ERR(8, 69, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(8, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 69, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 69, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "gid", 0) < (0)) __PYX_ERR(8, 70, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[1]);
    __pyx_v_draw_data = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_glyph", 0, 2, 3, __pyx_nargs); __PYX_ERR(8, 69, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(8, 70, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(8, 70, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_6draw_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_font, __pyx_v_gid, __pyx_v_draw_data);

  /* "src/uharfbuzz/_draw.pxi":69
 *         font.draw_glyph(gid, self)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):
 *         font.draw_glyph(gid, self, draw_data)
*/

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_6draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_gid, PyObject *__pyx_v_draw_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_glyph", 0);

  /* "src/uharfbuzz/_draw.pxi":71
 *     @deprecated("Font.draw_glyph()")
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):
 *         font.draw_glyph(gid, self, draw_data)             # <<<<<<<<<<<<<<
 * 
 *     def set_move_to_func(self,
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_gid, ((PyObject *)__pyx_v_self), __pyx_v_draw_data};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_callargs+__pyx_t_3, (4-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_draw.pxi":69
 *         font.draw_glyph(gid, self)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):
 *         font.draw_glyph(gid, self, draw_data)
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":73
 *         font.draw_glyph(gid, self, draw_data)
 * 
 *     def set_move_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func = {"set_move_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_move_to_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 73, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 73, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 73, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_move_to_func", 0) < (0)) __PYX_ERR(8, 73, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":79
 *                              object,  # draw_data
 *                          ], None],
 *                          user_data: object = None):             # <<<<<<<<<<<<<<
 *         cdef hb_draw_move_to_func_t func_p
 *         cdef void *user_data_p
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_move_to_func", 0, 1, 2, i); __PYX_ERR(8, 73, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 73, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 73, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_move_to_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(8, 73, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_move_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_8set_move_to_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_draw.pxi":73
 *         font.draw_glyph(gid, self, draw_data)
 * 
 *     def set_move_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_8set_move_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  hb_draw_move_to_func_t __pyx_v_func_p;
  void *__pyx_v_user_data_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_move_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":82
 *         cdef hb_draw_move_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._move_to_func = None
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_func, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_draw.pxi":83
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):
 *             self._move_to_func = None             # <<<<<<<<<<<<<<
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_move_to_func);
    __Pyx_DECREF(__pyx_v_self->_move_to_func);
    __pyx_v_self->_move_to_func = Py_None;

    /* "src/uharfbuzz/_draw.pxi":84
 *         if PyCapsule_IsValid(func, NULL):
 *             self._move_to_func = None
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)             # <<<<<<<<<<<<<<
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_func, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 84, __pyx_L1_error)
    __pyx_v_func_p = ((hb_draw_move_to_func_t)__pyx_t_2);

    /* "src/uharfbuzz/_draw.pxi":85
 *             self._move_to_func = None
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
    __pyx_t_1 = PyCapsule_IsValid(__pyx_v_user_data, NULL);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_draw.pxi":86
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)             # <<<<<<<<<<<<<<
 *             else:
 *                 user_data_p = <void*>user_data
*/
      __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_user_data, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 86, __pyx_L1_error)
      __pyx_v_user_data_p = ((void *)__pyx_t_2);

      /* "src/uharfbuzz/_draw.pxi":85
 *             self._move_to_func = None
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_draw.pxi":88
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
 *                 user_data_p = <void*>user_data             # <<<<<<<<<<<<<<
 *         else:
 *             self._move_to_func = func
*/
    /*else*/ {
      __pyx_v_user_data_p = ((void *)__pyx_v_user_data);
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_draw.pxi":82
 *         cdef hb_draw_move_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._move_to_func = None
 *             func_p = <hb_draw_move_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_draw.pxi":90
 *                 user_data_p = <void*>user_data
 *         else:
 *             self._move_to_func = func             # <<<<<<<<<<<<<<
 *             func_p = _move_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
*/
  /*else*/ {
    __Pyx_INCREF(__pyx_v_func);
    __Pyx_GIVEREF(__pyx_v_func);
    __Pyx_GOTREF(__pyx_v_self->_move_to_func);
    __Pyx_DECREF(__pyx_v_self->_move_to_func);
    __pyx_v_self->_move_to_func = __pyx_v_func;

    /* "src/uharfbuzz/_draw.pxi":91
 *         else:
 *             self._move_to_func = func
 *             func_p = _move_to_func             # <<<<<<<<<<<<<<
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
*/
    __pyx_v_func_p = __pyx_f_9uharfbuzz_9_harfbuzz__move_to_func;

    /* "src/uharfbuzz/_draw.pxi":92
 *             self._move_to_func = func
 *             func_p = _move_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"             # <<<<<<<<<<<<<<
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_move_to_func(
*/
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(__pyx_assertions_enabled())) {
      __pyx_t_1 = (__pyx_v_user_data == Py_None);
      if (unlikely(!__pyx_t_1)) {
        __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Pass_draw_state_to_Font_draw_gly, 0, 0);
        __PYX_ERR(8, 92, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(8, 92, __pyx_L1_error)
    #endif

    /* "src/uharfbuzz/_draw.pxi":93
 *             func_p = _move_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_set_move_to_func(
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
    __pyx_v_user_data_p = ((void *)__pyx_v_func);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_draw.pxi":94
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_move_to_func(             # <<<<<<<<<<<<<<
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
*/
  hb_draw_funcs_set_move_to_func(__pyx_v_self->_hb_drawfuncs, __pyx_v_func_p, __pyx_v_user_data_p, NULL);

  /* "src/uharfbuzz/_draw.pxi":73
 *         font.draw_glyph(gid, self, draw_data)
 * 
 *     def set_move_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_move_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":97
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_line_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func = {"set_line_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_line_to_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 97, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 97, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 97, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_line_to_func", 0) < (0)) __PYX_ERR(8, 97, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":103
 *                              object,  # draw_data
 *                          ], None],
 *                          user_data: object = None):             # <<<<<<<<<<<<<<
 *         cdef hb_draw_line_to_func_t func_p
 *         cdef void *user_data_p
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_line_to_func", 0, 1, 2, i); __PYX_ERR(8, 97, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 97, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 97, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_line_to_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(8, 97, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_line_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_10set_line_to_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_draw.pxi":97
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_line_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_10set_line_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  hb_draw_line_to_func_t __pyx_v_func_p;
  void *__pyx_v_user_data_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_line_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":106
 *         cdef hb_draw_line_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._line_to_func = None
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_func, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_draw.pxi":107
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):
 *             self._line_to_func = None             # <<<<<<<<<<<<<<
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_line_to_func);
    __Pyx_DECREF(__pyx_v_self->_line_to_func);
    __pyx_v_self->_line_to_func = Py_None;

    /* "src/uharfbuzz/_draw.pxi":108
 *         if PyCapsule_IsValid(func, NULL):
 *             self._line_to_func = None
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)             # <<<<<<<<<<<<<<
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_func, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 108, __pyx_L1_error)
    __pyx_v_func_p = ((hb_draw_line_to_func_t)__pyx_t_2);

    /* "src/uharfbuzz/_draw.pxi":109
 *             self._line_to_func = None
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
    __pyx_t_1 = PyCapsule_IsValid(__pyx_v_user_data, NULL);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_draw.pxi":110
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)             # <<<<<<<<<<<<<<
 *             else:
 *                 user_data_p = <void*>user_data
*/
      __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_user_data, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 110, __pyx_L1_error)
      __pyx_v_user_data_p = ((void *)__pyx_t_2);

      /* "src/uharfbuzz/_draw.pxi":109
 *             self._line_to_func = None
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_draw.pxi":112
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
 *                 user_data_p = <void*>user_data             # <<<<<<<<<<<<<<
 *         else:
 *             self._line_to_func = func
*/
    /*else*/ {
      __pyx_v_user_data_p = ((void *)__pyx_v_user_data);
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_draw.pxi":106
 *         cdef hb_draw_line_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._line_to_func = None
 *             func_p = <hb_draw_line_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_draw.pxi":114
 *                 user_data_p = <void*>user_data
 *         else:
 *             self._line_to_func = func             # <<<<<<<<<<<<<<
 *             func_p = _line_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
*/
  /*else*/ {
    __Pyx_INCREF(__pyx_v_func);
    __Pyx_GIVEREF(__pyx_v_func);
    __Pyx_GOTREF(__pyx_v_self->_line_to_func);
    __Pyx_DECREF(__pyx_v_self->_line_to_func);
    __pyx_v_self->_line_to_func = __pyx_v_func;

    /* "src/uharfbuzz/_draw.pxi":115
 *         else:
 *             self._line_to_func = func
 *             func_p = _line_to_func             # <<<<<<<<<<<<<<
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
*/
    __pyx_v_func_p = __pyx_f_9uharfbuzz_9_harfbuzz__line_to_func;

    /* "src/uharfbuzz/_draw.pxi":116
 *             self._line_to_func = func
 *             func_p = _line_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"             # <<<<<<<<<<<<<<
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_line_to_func(
*/
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(__pyx_assertions_enabled())) {
      __pyx_t_1 = (__pyx_v_user_data == Py_None);
      if (unlikely(!__pyx_t_1)) {
        __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Pass_draw_state_to_Font_draw_gly, 0, 0);
        __PYX_ERR(8, 116, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(8, 116, __pyx_L1_error)
    #endif

    /* "src/uharfbuzz/_draw.pxi":117
 *             func_p = _line_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_set_line_to_func(
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
    __pyx_v_user_data_p = ((void *)__pyx_v_func);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_draw.pxi":118
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_line_to_func(             # <<<<<<<<<<<<<<
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
*/
  hb_draw_funcs_set_line_to_func(__pyx_v_self->_hb_drawfuncs, __pyx_v_func_p, __pyx_v_user_data_p, NULL);

  /* "src/uharfbuzz/_draw.pxi":97
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_line_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_line_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":121
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_cubic_to_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                              float,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func = {"set_cubic_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_cubic_to_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 121, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 121, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 121, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_cubic_to_func", 0) < (0)) __PYX_ERR(8, 121, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":131
 *                              object,  # draw_data
 *                           ], None],
 *                           user_data: object = None):             # <<<<<<<<<<<<<<
 *         cdef hb_draw_cubic_to_func_t func_p
 *         cdef void *user_data_p
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_cubic_to_func", 0, 1, 2, i); __PYX_ERR(8, 121, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 121, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 121, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_cubic_to_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(8, 121, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_cubic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_12set_cubic_to_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_draw.pxi":121
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_cubic_to_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                              float,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_12set_cubic_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  hb_draw_cubic_to_func_t __pyx_v_func_p;
  void *__pyx_v_user_data_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_cubic_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":134
 *         cdef hb_draw_cubic_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._cubic_to_func = None
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_func, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_draw.pxi":135
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):
 *             self._cubic_to_func = None             # <<<<<<<<<<<<<<
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_cubic_to_func);
    __Pyx_DECREF(__pyx_v_self->_cubic_to_func);
    __pyx_v_self->_cubic_to_func = Py_None;

    /* "src/uharfbuzz/_draw.pxi":136
 *         if PyCapsule_IsValid(func, NULL):
 *             self._cubic_to_func = None
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)             # <<<<<<<<<<<<<<
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_func, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 136, __pyx_L1_error)
    __pyx_v_func_p = ((hb_draw_cubic_to_func_t)__pyx_t_2);

    /* "src/uharfbuzz/_draw.pxi":137
 *             self._cubic_to_func = None
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
    __pyx_t_1 = PyCapsule_IsValid(__pyx_v_user_data, NULL);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_draw.pxi":138
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)             # <<<<<<<<<<<<<<
 *             else:
 *                 user_data_p = <void*>user_data
*/
      __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_user_data, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 138, __pyx_L1_error)
      __pyx_v_user_data_p = ((void *)__pyx_t_2);

      /* "src/uharfbuzz/_draw.pxi":137
 *             self._cubic_to_func = None
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_draw.pxi":140
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
 *                 user_data_p = <void*>user_data             # <<<<<<<<<<<<<<
 *         else:
 *             self._cubic_to_func = func
*/
    /*else*/ {
      __pyx_v_user_data_p = ((void *)__pyx_v_user_data);
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_draw.pxi":134
 *         cdef hb_draw_cubic_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._cubic_to_func = None
 *             func_p = <hb_draw_cubic_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_draw.pxi":142
 *                 user_data_p = <void*>user_data
 *         else:
 *             self._cubic_to_func = func             # <<<<<<<<<<<<<<
 *             func_p = _cubic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
*/
  /*else*/ {
    __Pyx_INCREF(__pyx_v_func);
    __Pyx_GIVEREF(__pyx_v_func);
    __Pyx_GOTREF(__pyx_v_self->_cubic_to_func);
    __Pyx_DECREF(__pyx_v_self->_cubic_to_func);
    __pyx_v_self->_cubic_to_func = __pyx_v_func;

    /* "src/uharfbuzz/_draw.pxi":143
 *         else:
 *             self._cubic_to_func = func
 *             func_p = _cubic_to_func             # <<<<<<<<<<<<<<
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
*/
    __pyx_v_func_p = __pyx_f_9uharfbuzz_9_harfbuzz__cubic_to_func;

    /* "src/uharfbuzz/_draw.pxi":144
 *             self._cubic_to_func = func
 *             func_p = _cubic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"             # <<<<<<<<<<<<<<
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_cubic_to_func(
*/
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(__pyx_assertions_enabled())) {
      __pyx_t_1 = (__pyx_v_user_data == Py_None);
      if (unlikely(!__pyx_t_1)) {
        __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Pass_draw_state_to_Font_draw_gly, 0, 0);
        __PYX_ERR(8, 144, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(8, 144, __pyx_L1_error)
    #endif

    /* "src/uharfbuzz/_draw.pxi":145
 *             func_p = _cubic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_set_cubic_to_func(
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
    __pyx_v_user_data_p = ((void *)__pyx_v_func);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_draw.pxi":146
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_cubic_to_func(             # <<<<<<<<<<<<<<
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
*/
  hb_draw_funcs_set_cubic_to_func(__pyx_v_self->_hb_drawfuncs, __pyx_v_func_p, __pyx_v_user_data_p, NULL);

  /* "src/uharfbuzz/_draw.pxi":121
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_cubic_to_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                              float,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_cubic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":149
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_quadratic_to_func(self,             # <<<<<<<<<<<<<<
 *                               func: Callable[[
 *                                  float,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func = {"set_quadratic_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_quadratic_to_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 149, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 149, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 149, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_quadratic_to_func", 0) < (0)) __PYX_ERR(8, 149, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":157
 *                                  object,  # draw_data
 *                               ], None],
 *                               user_data: object = None):             # <<<<<<<<<<<<<<
 *         cdef hb_draw_quadratic_to_func_t func_p
 *         cdef void *user_data_p
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_quadratic_to_func", 0, 1, 2, i); __PYX_ERR(8, 149, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 149, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 149, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_quadratic_to_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(8, 149, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_quadratic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_14set_quadratic_to_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_draw.pxi":149
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_quadratic_to_func(self,             # <<<<<<<<<<<<<<
 *                               func: Callable[[
 *                                  float,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_14set_quadratic_to_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  hb_draw_quadratic_to_func_t __pyx_v_func_p;
  void *__pyx_v_user_data_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_quadratic_to_func", 0);

  /* "src/uharfbuzz/_draw.pxi":160
 *         cdef hb_draw_quadratic_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._quadratic_to_func = None
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_func, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_draw.pxi":161
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):
 *             self._quadratic_to_func = None             # <<<<<<<<<<<<<<
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_quadratic_to_func);
    __Pyx_DECREF(__pyx_v_self->_quadratic_to_func);
    __pyx_v_self->_quadratic_to_func = Py_None;

    /* "src/uharfbuzz/_draw.pxi":162
 *         if PyCapsule_IsValid(func, NULL):
 *             self._quadratic_to_func = None
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)             # <<<<<<<<<<<<<<
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_func, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 162, __pyx_L1_error)
    __pyx_v_func_p = ((hb_draw_quadratic_to_func_t)__pyx_t_2);

    /* "src/uharfbuzz/_draw.pxi":163
 *             self._quadratic_to_func = None
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
    __pyx_t_1 = PyCapsule_IsValid(__pyx_v_user_data, NULL);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_draw.pxi":164
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)             # <<<<<<<<<<<<<<
 *             else:
 *                 user_data_p = <void*>user_data
*/
      __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_user_data, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 164, __pyx_L1_error)
      __pyx_v_user_data_p = ((void *)__pyx_t_2);

      /* "src/uharfbuzz/_draw.pxi":163
 *             self._quadratic_to_func = None
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_draw.pxi":166
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
 *                 user_data_p = <void*>user_data             # <<<<<<<<<<<<<<
 *         else:
 *             self._quadratic_to_func = func
*/
    /*else*/ {
      __pyx_v_user_data_p = ((void *)__pyx_v_user_data);
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_draw.pxi":160
 *         cdef hb_draw_quadratic_to_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._quadratic_to_func = None
 *             func_p = <hb_draw_quadratic_to_func_t>PyCapsule_GetPointer(func, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_draw.pxi":168
 *                 user_data_p = <void*>user_data
 *         else:
 *             self._quadratic_to_func = func             # <<<<<<<<<<<<<<
 *             func_p = _quadratic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
*/
  /*else*/ {
    __Pyx_INCREF(__pyx_v_func);
    __Pyx_GIVEREF(__pyx_v_func);
    __Pyx_GOTREF(__pyx_v_self->_quadratic_to_func);
    __Pyx_DECREF(__pyx_v_self->_quadratic_to_func);
    __pyx_v_self->_quadratic_to_func = __pyx_v_func;

    /* "src/uharfbuzz/_draw.pxi":169
 *         else:
 *             self._quadratic_to_func = func
 *             func_p = _quadratic_to_func             # <<<<<<<<<<<<<<
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
*/
    __pyx_v_func_p = __pyx_f_9uharfbuzz_9_harfbuzz__quadratic_to_func;

    /* "src/uharfbuzz/_draw.pxi":170
 *             self._quadratic_to_func = func
 *             func_p = _quadratic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"             # <<<<<<<<<<<<<<
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_quadratic_to_func(
*/
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(__pyx_assertions_enabled())) {
      __pyx_t_1 = (__pyx_v_user_data == Py_None);
      if (unlikely(!__pyx_t_1)) {
        __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Pass_draw_state_to_Font_draw_gly, 0, 0);
        __PYX_ERR(8, 170, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(8, 170, __pyx_L1_error)
    #endif

    /* "src/uharfbuzz/_draw.pxi":171
 *             func_p = _quadratic_to_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_set_quadratic_to_func(
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
    __pyx_v_user_data_p = ((void *)__pyx_v_func);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_draw.pxi":172
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_quadratic_to_func(             # <<<<<<<<<<<<<<
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
*/
  hb_draw_funcs_set_quadratic_to_func(__pyx_v_self->_hb_drawfuncs, __pyx_v_func_p, __pyx_v_user_data_p, NULL);

  /* "src/uharfbuzz/_draw.pxi":149
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_quadratic_to_func(self,             # <<<<<<<<<<<<<<
 *                               func: Callable[[
 *                                  float,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_quadratic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_draw.pxi":175
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_close_path_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func = {"set_close_path_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_close_path_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(8, 175, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_close_path_func", 0) < (0)) __PYX_ERR(8, 175, __pyx_L3_error)

      /* "src/uharfbuzz/_draw.pxi":179
 *                                 object
 *                             ], None],
 *                             user_data: object = None):             # <<<<<<<<<<<<<<
 *         cdef hb_draw_close_path_func_t func_p
 *         cdef void *user_data_p
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_close_path_func", 0, 1, 2, i); __PYX_ERR(8, 175, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(8, 175, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(8, 175, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_close_path_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(8, 175, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_close_path_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_16set_close_path_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_draw.pxi":175
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_close_path_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_16set_close_path_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  hb_draw_close_path_func_t __pyx_v_func_p;
  void *__pyx_v_user_data_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_close_path_func", 0);

  /* "src/uharfbuzz/_draw.pxi":182
 *         cdef hb_draw_close_path_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._close_path_func = None
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_func, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_draw.pxi":183
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):
 *             self._close_path_func = None             # <<<<<<<<<<<<<<
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
*/
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->_close_path_func);
    __Pyx_DECREF(__pyx_v_self->_close_path_func);
    __pyx_v_self->_close_path_func = Py_None;

    /* "src/uharfbuzz/_draw.pxi":184
 *         if PyCapsule_IsValid(func, NULL):
 *             self._close_path_func = None
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)             # <<<<<<<<<<<<<<
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_func, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 184, __pyx_L1_error)
    __pyx_v_func_p = ((hb_draw_close_path_func_t)__pyx_t_2);

    /* "src/uharfbuzz/_draw.pxi":185
 *             self._close_path_func = None
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
    __pyx_t_1 = PyCapsule_IsValid(__pyx_v_user_data, NULL);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_draw.pxi":186
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)             # <<<<<<<<<<<<<<
 *             else:
 *                 user_data_p = <void*>user_data
*/
      __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_user_data, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(8, 186, __pyx_L1_error)
      __pyx_v_user_data_p = ((void *)__pyx_t_2);

      /* "src/uharfbuzz/_draw.pxi":185
 *             self._close_path_func = None
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
 *             if PyCapsule_IsValid(user_data, NULL):             # <<<<<<<<<<<<<<
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_draw.pxi":188
 *                 user_data_p = <void*>PyCapsule_GetPointer(user_data, NULL)
 *             else:
 *                 user_data_p = <void*>user_data             # <<<<<<<<<<<<<<
 *         else:
 *             self._close_path_func = func
*/
    /*else*/ {
      __pyx_v_user_data_p = ((void *)__pyx_v_user_data);
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_draw.pxi":182
 *         cdef hb_draw_close_path_func_t func_p
 *         cdef void *user_data_p
 *         if PyCapsule_IsValid(func, NULL):             # <<<<<<<<<<<<<<
 *             self._close_path_func = None
 *             func_p = <hb_draw_close_path_func_t>PyCapsule_GetPointer(func, NULL)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_draw.pxi":190
 *                 user_data_p = <void*>user_data
 *         else:
 *             self._close_path_func = func             # <<<<<<<<<<<<<<
 *             func_p = _close_path_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
*/
  /*else*/ {
    __Pyx_INCREF(__pyx_v_func);
    __Pyx_GIVEREF(__pyx_v_func);
    __Pyx_GOTREF(__pyx_v_self->_close_path_func);
    __Pyx_DECREF(__pyx_v_self->_close_path_func);
    __pyx_v_self->_close_path_func = __pyx_v_func;

    /* "src/uharfbuzz/_draw.pxi":191
 *         else:
 *             self._close_path_func = func
 *             func_p = _close_path_func             # <<<<<<<<<<<<<<
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
*/
    __pyx_v_func_p = __pyx_f_9uharfbuzz_9_harfbuzz__close_path_func;

    /* "src/uharfbuzz/_draw.pxi":192
 *             self._close_path_func = func
 *             func_p = _close_path_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"             # <<<<<<<<<<<<<<
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_close_path_func(
*/
    #ifndef CYTHON_WITHOUT_ASSERTIONS
    if (unlikely(__pyx_assertions_enabled())) {
      __pyx_t_1 = (__pyx_v_user_data == Py_None);
      if (unlikely(!__pyx_t_1)) {
        __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_Pass_draw_state_to_Font_draw_gly, 0, 0);
        __PYX_ERR(8, 192, __pyx_L1_error)
      }
    }
    #else
    if ((1)); else __PYX_ERR(8, 192, __pyx_L1_error)
    #endif

    /* "src/uharfbuzz/_draw.pxi":193
 *             func_p = _close_path_func
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func             # <<<<<<<<<<<<<<
 *         hb_draw_funcs_set_close_path_func(
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
    __pyx_v_user_data_p = ((void *)__pyx_v_func);
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_draw.pxi":194
 *             assert user_data is None, "Pass draw_state to Font.draw_glyph"
 *             user_data_p = <void*>func
 *         hb_draw_funcs_set_close_path_func(             # <<<<<<<<<<<<<<
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
*/
  hb_draw_funcs_set_close_path_func(__pyx_v_self->_hb_drawfuncs, __pyx_v_func_p, __pyx_v_user_data_p, NULL);

  /* "src/uharfbuzz/_draw.pxi":175
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_close_path_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.set_close_path_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_18__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_18__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_20__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9DrawFuncs_20__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.DrawFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":47
 *     cdef hb_color_line_t* _color_line
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._color_line = NULL
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_paint.pxi":48
 * 
 *     def __cinit__(self):
 *         self._color_line = NULL             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  __pyx_v_self->_color_line = NULL;

  /* "src/uharfbuzz/_paint.pxi":47
 *     cdef hb_color_line_t* _color_line
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._color_line = NULL
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":50
 *         self._color_line = NULL
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef ColorLine from_ptr(hb_color_line_t* color_line):
 *         cdef ColorLine wrapper = ColorLine()
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr(hb_color_line_t *__pyx_v_color_line) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_paint.pxi":52
 *     @staticmethod
 *     cdef ColorLine from_ptr(hb_color_line_t* color_line):
 *         cdef ColorLine wrapper = ColorLine()             # <<<<<<<<<<<<<<
 *         wrapper._color_line = color_line
 *         return wrapper
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 52, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_1);
  }
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":53
 *     cdef ColorLine from_ptr(hb_color_line_t* color_line):
 *         cdef ColorLine wrapper = ColorLine()
 *         wrapper._color_line = color_line             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_color_line = __pyx_v_color_line;

  /* "src/uharfbuzz/_paint.pxi":54
 *         cdef ColorLine wrapper = ColorLine()
 *         wrapper._color_line = color_line
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":50
 *         self._color_line = NULL
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef ColorLine from_ptr(hb_color_line_t* color_line):
 *         cdef ColorLine wrapper = ColorLine()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ColorLine.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":57
 * 
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def color_stops(self) -> Sequence[ColorStop]:
 *         if self._color_line is NULL:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self) {
  unsigned int __pyx_v_stop_count;
  hb_color_stop_t __pyx_v_stops_array[128];
  PyObject *__pyx_v_stops = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  hb_color_stop_t __pyx_v_c_stop;
  PyObject *__pyx_v_py_color = NULL;
  PyObject *__pyx_v_stop = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_paint.pxi":59
 *     @property
 *     def color_stops(self) -> Sequence[ColorStop]:
 *         if self._color_line is NULL:             # <<<<<<<<<<<<<<
 *             return []
 *         cdef unsigned int stop_count = STATIC_ARRAY_SIZE
*/
  __pyx_t_1 = (__pyx_v_self->_color_line == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_paint.pxi":60
 *     def color_stops(self) -> Sequence[ColorStop]:
 *         if self._color_line is NULL:
 *             return []             # <<<<<<<<<<<<<<
 *         cdef unsigned int stop_count = STATIC_ARRAY_SIZE
 *         cdef hb_color_stop_t stops_array[STATIC_ARRAY_SIZE]
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 60, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_paint.pxi":59
 *     @property
 *     def color_stops(self) -> Sequence[ColorStop]:
 *         if self._color_line is NULL:             # <<<<<<<<<<<<<<
 *             return []
 *         cdef unsigned int stop_count = STATIC_ARRAY_SIZE
*/
  }

  /* "src/uharfbuzz/_paint.pxi":61
 *         if self._color_line is NULL:
 *             return []
 *         cdef unsigned int stop_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_color_stop_t stops_array[STATIC_ARRAY_SIZE]
 *         cdef list stops = []
*/
  __pyx_v_stop_count = 0x80;

  /* "src/uharfbuzz/_paint.pxi":63
 *         cdef unsigned int stop_count = STATIC_ARRAY_SIZE
 *         cdef hb_color_stop_t stops_array[STATIC_ARRAY_SIZE]
 *         cdef list stops = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_stops = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_paint.pxi":65
 *         cdef list stops = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while stop_count == STATIC_ARRAY_SIZE:
 *             hb_color_line_get_color_stops(
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_paint.pxi":66
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while stop_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_color_line_get_color_stops(
 *                 self._color_line, start_offset, &stop_count, stops_array)
*/
  while (1) {
    __pyx_t_1 = (__pyx_v_stop_count == 0x80);
    if (!__pyx_t_1) break;

    /* "src/uharfbuzz/_paint.pxi":67
 *         cdef unsigned int start_offset = 0
 *         while stop_count == STATIC_ARRAY_SIZE:
 *             hb_color_line_get_color_stops(             # <<<<<<<<<<<<<<
 *                 self._color_line, start_offset, &stop_count, stops_array)
 *             for i in range(stop_count):
*/
    (void)(hb_color_line_get_color_stops(__pyx_v_self->_color_line, __pyx_v_start_offset, (&__pyx_v_stop_count), __pyx_v_stops_array));

    /* "src/uharfbuzz/_paint.pxi":69
 *             hb_color_line_get_color_stops(
 *                 self._color_line, start_offset, &stop_count, stops_array)
 *             for i in range(stop_count):             # <<<<<<<<<<<<<<
 *                 c_stop = stops_array[i]
 *                 py_color = Color.from_int(c_stop.color)
*/
    __pyx_t_3 = __pyx_v_stop_count;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "src/uharfbuzz/_paint.pxi":70
 *                 self._color_line, start_offset, &stop_count, stops_array)
 *             for i in range(stop_count):
 *                 c_stop = stops_array[i]             # <<<<<<<<<<<<<<
 *                 py_color = Color.from_int(c_stop.color)
 *                 stop = ColorStop(c_stop.offset, <bint>c_stop.is_foreground, py_color)
*/
      __pyx_v_c_stop = (__pyx_v_stops_array[__pyx_v_i]);

      /* "src/uharfbuzz/_paint.pxi":71
 *             for i in range(stop_count):
 *                 c_stop = stops_array[i]
 *                 py_color = Color.from_int(c_stop.color)             # <<<<<<<<<<<<<<
 *                 stop = ColorStop(c_stop.offset, <bint>c_stop.is_foreground, py_color)
 *                 stops.append(stop)
*/
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 71, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 71, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyLong_From_uint32_t(__pyx_v_c_stop.color); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 71, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 71, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_py_color, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "src/uharfbuzz/_paint.pxi":72
 *                 c_stop = stops_array[i]
 *                 py_color = Color.from_int(c_stop.color)
 *                 stop = ColorStop(c_stop.offset, <bint>c_stop.is_foreground, py_color)             # <<<<<<<<<<<<<<
 *                 stops.append(stop)
 *             start_offset += stop_count
*/
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_ColorStop); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 72, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_6 = PyFloat_FromDouble(__pyx_v_c_stop.offset); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 72, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_10 = __Pyx_PyBool_FromLong((__pyx_v_c_stop.is_foreground != 0)); if (unlikely(!__pyx_t_10)) __PYX_ERR(9, 72, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_7))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[4] = {__pyx_t_8, __pyx_t_6, __pyx_t_10, __pyx_v_py_color};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 72, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
      }
      __Pyx_XDECREF_SET(__pyx_v_stop, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "src/uharfbuzz/_paint.pxi":73
 *                 py_color = Color.from_int(c_stop.color)
 *                 stop = ColorStop(c_stop.offset, <bint>c_stop.is_foreground, py_color)
 *                 stops.append(stop)             # <<<<<<<<<<<<<<
 *             start_offset += stop_count
 *         return stops
*/
      __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_stops, __pyx_v_stop); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(9, 73, __pyx_L1_error)
    }

    /* "src/uharfbuzz/_paint.pxi":74
 *                 stop = ColorStop(c_stop.offset, <bint>c_stop.is_foreground, py_color)
 *                 stops.append(stop)
 *             start_offset += stop_count             # <<<<<<<<<<<<<<
 *         return stops
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_stop_count);
  }

  /* "src/uharfbuzz/_paint.pxi":75
 *                 stops.append(stop)
 *             start_offset += stop_count
 *         return stops             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_stops);
  __pyx_r = __pyx_v_stops;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":57
 * 
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def color_stops(self) -> Sequence[ColorStop]:
 *         if self._color_line is NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ColorLine.color_stops.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_stops);
  __Pyx_XDECREF(__pyx_v_py_color);
  __Pyx_XDECREF(__pyx_v_stop);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":77
 *         return stops
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extend(self) -> PaintExtend:
 *         if self._color_line is NULL:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_6extend_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_6extend_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_6extend___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_6extend___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_paint.pxi":79
 *     @property
 *     def extend(self) -> PaintExtend:
 *         if self._color_line is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return PaintExtend(hb_color_line_get_extend(self._color_line))
*/
  __pyx_t_1 = (__pyx_v_self->_color_line == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_paint.pxi":80
 *     def extend(self) -> PaintExtend:
 *         if self._color_line is NULL:
 *             return None             # <<<<<<<<<<<<<<
 *         return PaintExtend(hb_color_line_get_extend(self._color_line))
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_paint.pxi":79
 *     @property
 *     def extend(self) -> PaintExtend:
 *         if self._color_line is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return PaintExtend(hb_color_line_get_extend(self._color_line))
*/
  }

  /* "src/uharfbuzz/_paint.pxi":81
 *         if self._color_line is NULL:
 *             return None
 *         return PaintExtend(hb_color_line_get_extend(self._color_line))             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PaintExtend); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_hb_paint_extend_t(hb_color_line_get_extend(__pyx_v_self->_color_line)); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 81, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":77
 *         return stops
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extend(self) -> PaintExtend:
 *         if self._color_line is NULL:
*/

  /* 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("uharfbuzz._harfbuzz.ColorLine.extend.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_2__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_2__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ColorLine.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ColorLine.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_4__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9ColorLine_4__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ColorLine.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":84
 * 
 * 
 * cdef void _paint_push_transform_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_transform_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, float __pyx_v_xx, float __pyx_v_yx, float __pyx_v_xy, float __pyx_v_yy, float __pyx_v_dx, float __pyx_v_dy, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_push_transform_func", 0);

  /* "src/uharfbuzz/_paint.pxi":94
 *         float dy,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._push_transform_func(xx, yx, xy, yy, dx, dy, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":95
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._push_transform_func(xx, yx, xy, yy, dx, dy, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_push_transform_func);
  __pyx_t_3 = __pyx_v_py_funcs->_push_transform_func; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_xx); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_yx); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_xy); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_yy); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_dy); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[8] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (8-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 95, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":84
 * 
 * 
 * cdef void _paint_push_transform_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_push_transform_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":98
 * 
 * 
 * cdef void _paint_pop_transform_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_transform_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_pop_transform_func", 0);

  /* "src/uharfbuzz/_paint.pxi":102
 *         void *paint_data,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._pop_transform_func(<object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":103
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._pop_transform_func(<object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_pop_transform_func);
  __pyx_t_3 = __pyx_v_py_funcs->_pop_transform_func; 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 103, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":98
 * 
 * 
 * cdef void _paint_pop_transform_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_pop_transform_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":106
 * 
 * 
 * cdef hb_bool_t _paint_color_glyph_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_glyph_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_codepoint_t __pyx_v_glyph, CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_color_glyph_func", 0);

  /* "src/uharfbuzz/_paint.pxi":112
 *         hb_font_t *font,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     if py_funcs._color_glyph_func(glyph, <object>paint_data):
 *         return 1
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":113
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     if py_funcs._color_glyph_func(glyph, <object>paint_data):             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_color_glyph_func);
  __pyx_t_3 = __pyx_v_py_funcs->_color_glyph_func; 
  __pyx_t_4 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(9, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "src/uharfbuzz/_paint.pxi":114
 *     py_funcs = <PaintFuncs>user_data
 *     if py_funcs._color_glyph_func(glyph, <object>paint_data):
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "src/uharfbuzz/_paint.pxi":113
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     if py_funcs._color_glyph_func(glyph, <object>paint_data):             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
  }

  /* "src/uharfbuzz/_paint.pxi":115
 *     if py_funcs._color_glyph_func(glyph, <object>paint_data):
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":106
 * 
 * 
 * cdef hb_bool_t _paint_color_glyph_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_color_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":118
 * 
 * 
 * cdef void _paint_push_clip_glyph_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_glyph_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_codepoint_t __pyx_v_glyph, CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_push_clip_glyph_func", 0);

  /* "src/uharfbuzz/_paint.pxi":124
 *         hb_font_t *font,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._push_clip_glyph_func(glyph, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":125
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._push_clip_glyph_func(glyph, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_push_clip_glyph_func);
  __pyx_t_3 = __pyx_v_py_funcs->_push_clip_glyph_func; 
  __pyx_t_4 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 125, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":118
 * 
 * 
 * cdef void _paint_push_clip_glyph_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_push_clip_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":128
 * 
 * 
 * cdef void _paint_push_clip_rectangle_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_rectangle_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, float __pyx_v_xmin, float __pyx_v_ymin, float __pyx_v_xmax, float __pyx_v_ymax, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_push_clip_rectangle_func", 0);

  /* "src/uharfbuzz/_paint.pxi":136
 *         float ymax,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._push_clip_rectangle_func(xmin, ymin, xmax, ymax, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":137
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._push_clip_rectangle_func(xmin, ymin, xmax, ymax, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_push_clip_rectangle_func);
  __pyx_t_3 = __pyx_v_py_funcs->_push_clip_rectangle_func; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_xmin); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_ymin); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_xmax); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_ymax); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[6] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (6-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":128
 * 
 * 
 * cdef void _paint_push_clip_rectangle_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_push_clip_rectangle_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":140
 * 
 * 
 * cdef void _paint_pop_clip_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_clip_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_pop_clip_func", 0);

  /* "src/uharfbuzz/_paint.pxi":144
 *         void *paint_data,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._pop_clip_func(<object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":145
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._pop_clip_func(<object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_pop_clip_func);
  __pyx_t_3 = __pyx_v_py_funcs->_pop_clip_func; 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":140
 * 
 * 
 * cdef void _paint_pop_clip_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_pop_clip_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":148
 * 
 * 
 * cdef void _paint_color_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_bool_t __pyx_v_is_foreground, hb_color_t __pyx_v_color, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  PyObject *__pyx_v_py_color = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_color_func", 0);

  /* "src/uharfbuzz/_paint.pxi":154
 *         hb_color_t color,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_color: Color = Color.from_int(color)
 *     py_funcs._color_func(py_color, <bint>is_foreground, <object>paint_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":155
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_color: Color = Color.from_int(color)             # <<<<<<<<<<<<<<
 *     py_funcs._color_func(py_color, <bint>is_foreground, <object>paint_data)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_uint32_t(__pyx_v_color); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 155, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_color = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":156
 *     py_funcs = <PaintFuncs>user_data
 *     py_color: Color = Color.from_int(color)
 *     py_funcs._color_func(py_color, <bint>is_foreground, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_color_func);
  __pyx_t_3 = __pyx_v_py_funcs->_color_func; 
  __pyx_t_2 = __Pyx_PyBool_FromLong((__pyx_v_is_foreground != 0)); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, __pyx_v_py_color, __pyx_t_2, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":148
 * 
 * 
 * cdef void _paint_color_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_color_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF(__pyx_v_py_color);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":159
 * 
 * 
 * cdef hb_bool_t _paint_image_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_image_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_blob_t *__pyx_v_image, unsigned int __pyx_v_width, unsigned int __pyx_v_height, hb_tag_t __pyx_v_format, float __pyx_v_slant, hb_glyph_extents_t *__pyx_v_extents, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_v_py_image = NULL;
  PyObject *__pyx_v_py_format = NULL;
  PyObject *__pyx_v_py_extents = NULL;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_image_func", 0);

  /* "src/uharfbuzz/_paint.pxi":169
 *         hb_glyph_extents_t *extents,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_image = Blob.from_ptr(hb_blob_reference(image))
 *     py_format = hb_tag_to_string(format, NULL)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":170
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_image = Blob.from_ptr(hb_blob_reference(image))             # <<<<<<<<<<<<<<
 *     py_format = hb_tag_to_string(format, NULL)
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(hb_blob_reference(__pyx_v_image))); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 170, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_image = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":171
 *     py_funcs = <PaintFuncs>user_data
 *     py_image = Blob.from_ptr(hb_blob_reference(image))
 *     py_format = hb_tag_to_string(format, NULL)             # <<<<<<<<<<<<<<
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):
*/
  __pyx_t_1 = __Pyx_void_to_None(hb_tag_to_string(__pyx_v_format, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_format = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":172
 *     py_image = Blob.from_ptr(hb_blob_reference(image))
 *     py_format = hb_tag_to_string(format, NULL)
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)             # <<<<<<<<<<<<<<
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):
 *         return 1
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_GlyphExtents); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents->x_bearing); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents->y_bearing); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents->width); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents->height); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (5-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_extents = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":173
 *     py_format = hb_tag_to_string(format, NULL)
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
  __pyx_t_3 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_image_func);
  __pyx_t_7 = __pyx_v_py_funcs->_image_func; 
  __pyx_t_6 = __Pyx_PyLong_From_unsigned_int(__pyx_v_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyLong_From_unsigned_int(__pyx_v_height); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_slant); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[8] = {__pyx_t_3, ((PyObject *)__pyx_v_py_image), __pyx_t_6, __pyx_t_5, __pyx_v_py_format, __pyx_t_4, __pyx_v_py_extents, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_8, (8-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(9, 173, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_9) {

    /* "src/uharfbuzz/_paint.pxi":174
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "src/uharfbuzz/_paint.pxi":173
 *     py_format = hb_tag_to_string(format, NULL)
 *     py_extents = GlyphExtents(extents.x_bearing, extents.y_bearing, extents.width, extents.height)
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
  }

  /* "src/uharfbuzz/_paint.pxi":175
 *     if py_funcs._image_func(py_image, width, height, py_format, slant, py_extents, <object>paint_data):
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":159
 * 
 * 
 * cdef hb_bool_t _paint_image_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_image_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF((PyObject *)__pyx_v_py_image);
  __Pyx_XDECREF(__pyx_v_py_format);
  __Pyx_XDECREF(__pyx_v_py_extents);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":178
 * 
 * 
 * cdef void _paint_linear_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_linear_gradient_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_color_line_t *__pyx_v_color_line, float __pyx_v_x0, float __pyx_v_y0, float __pyx_v_x1, float __pyx_v_y1, float __pyx_v_x2, float __pyx_v_y2, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_py_color_line = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_linear_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":189
 *         float y2,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._linear_gradient_func(py_color_line, x0, y0, x1, y1, x2, y2, <object>paint_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":190
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)             # <<<<<<<<<<<<<<
 *     py_funcs._linear_gradient_func(py_color_line, x0, y0, x1, y1, x2, y2, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr(__pyx_v_color_line)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_color_line = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":191
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._linear_gradient_func(py_color_line, x0, y0, x1, y1, x2, y2, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_linear_gradient_func);
  __pyx_t_3 = __pyx_v_py_funcs->_linear_gradient_func; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_y0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_x1); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_y1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_x2); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_y2); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[9] = {__pyx_t_2, ((PyObject *)__pyx_v_py_color_line), __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (9-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":178
 * 
 * 
 * cdef void _paint_linear_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_linear_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF((PyObject *)__pyx_v_py_color_line);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":194
 * 
 * 
 * cdef void _paint_radial_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_radial_gradient_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_color_line_t *__pyx_v_color_line, float __pyx_v_x0, float __pyx_v_y0, float __pyx_v_r0, float __pyx_v_x1, float __pyx_v_y1, float __pyx_v_r1, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_py_color_line = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_radial_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":205
 *         float r1,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._radial_gradient_func(py_color_line, x0, y0, r0, x1, y1, r1, <object>paint_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":206
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)             # <<<<<<<<<<<<<<
 *     py_funcs._radial_gradient_func(py_color_line, x0, y0, r0, x1, y1, r1, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr(__pyx_v_color_line)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_color_line = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":207
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._radial_gradient_func(py_color_line, x0, y0, r0, x1, y1, r1, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_radial_gradient_func);
  __pyx_t_3 = __pyx_v_py_funcs->_radial_gradient_func; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_y0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_r0); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_x1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_y1); if (unlikely(!__pyx_t_8)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyFloat_FromDouble(__pyx_v_r1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[9] = {__pyx_t_2, ((PyObject *)__pyx_v_py_color_line), __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_10, (9-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":194
 * 
 * 
 * cdef void _paint_radial_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_radial_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF((PyObject *)__pyx_v_py_color_line);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":210
 * 
 * 
 * cdef void _paint_sweep_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_sweep_gradient_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_color_line_t *__pyx_v_color_line, float __pyx_v_x0, float __pyx_v_y0, float __pyx_v_start_angle, float __pyx_v_end_angle, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *__pyx_v_py_color_line = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_sweep_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":219
 *         float end_angle,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._sweep_gradient_func(py_color_line, x0, y0, start_angle, end_angle, <object>paint_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":220
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)             # <<<<<<<<<<<<<<
 *     py_funcs._sweep_gradient_func(py_color_line, x0, y0, start_angle, end_angle, <object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr(__pyx_v_color_line)); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_py_color_line = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":221
 *     py_funcs = <PaintFuncs>user_data
 *     py_color_line = ColorLine.from_ptr(color_line)
 *     py_funcs._sweep_gradient_func(py_color_line, x0, y0, start_angle, end_angle, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_sweep_gradient_func);
  __pyx_t_3 = __pyx_v_py_funcs->_sweep_gradient_func; 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_x0); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_y0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_start_angle); if (unlikely(!__pyx_t_6)) __PYX_ERR(9, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_end_angle); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[7] = {__pyx_t_2, ((PyObject *)__pyx_v_py_color_line), __pyx_t_4, __pyx_t_5, __pyx_t_6, __pyx_t_7, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (7-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":210
 * 
 * 
 * cdef void _paint_sweep_gradient_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._paint_sweep_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF((PyObject *)__pyx_v_py_color_line);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":224
 * 
 * 
 * cdef void _paint_push_group_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_group_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_push_group_func", 0);

  /* "src/uharfbuzz/_paint.pxi":228
 *         void *paint_data,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_funcs._push_group_func(<object>paint_data)
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":229
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_funcs._push_group_func(<object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_push_group_func);
  __pyx_t_3 = __pyx_v_py_funcs->_push_group_func; 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":224
 * 
 * 
 * cdef void _paint_push_group_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_push_group_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":232
 * 
 * 
 * cdef void _paint_pop_group_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_group_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, hb_paint_composite_mode_t __pyx_v_mode, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  PyObject *__pyx_v_py_mode = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_pop_group_func", 0);

  /* "src/uharfbuzz/_paint.pxi":237
 *         hb_paint_composite_mode_t mode,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_mode = PaintCompositeMode(mode)
 *     py_funcs._pop_group_func(py_mode, <object>paint_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":238
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_mode = PaintCompositeMode(mode)             # <<<<<<<<<<<<<<
 *     py_funcs._pop_group_func(py_mode, <object>paint_data)
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_PaintCompositeMode); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_paint_composite_mode_t(__pyx_v_mode); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_mode = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":239
 *     py_funcs = <PaintFuncs>user_data
 *     py_mode = PaintCompositeMode(mode)
 *     py_funcs._pop_group_func(py_mode, <object>paint_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_3 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_pop_group_func);
  __pyx_t_4 = __pyx_v_py_funcs->_pop_group_func; 
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_3, __pyx_v_py_mode, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":232
 * 
 * 
 * cdef void _paint_pop_group_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_pop_group_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF(__pyx_v_py_mode);
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_paint.pxi":242
 * 
 * 
 * cdef hb_bool_t _paint_custom_palette_color_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__paint_custom_palette_color_func(CYTHON_UNUSED hb_paint_funcs_t *__pyx_v_funcs, void *__pyx_v_paint_data, unsigned int __pyx_v_color_index, hb_color_t *__pyx_v_color, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_py_funcs = NULL;
  PyObject *__pyx_v_py_color = NULL;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_t_6;
  hb_color_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_paint_custom_palette_color_func", 0);

  /* "src/uharfbuzz/_paint.pxi":248
 *         hb_color_t *color,
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data             # <<<<<<<<<<<<<<
 *     py_color: Color = py_funcs._custom_palette_color_func(color_index, <object>paint_data)
 *     if py_color is not None:
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_user_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":249
 *         void *user_data) noexcept:
 *     py_funcs = <PaintFuncs>user_data
 *     py_color: Color = py_funcs._custom_palette_color_func(color_index, <object>paint_data)             # <<<<<<<<<<<<<<
 *     if py_color is not None:
 *         color[0] = py_color.to_int()
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(__pyx_v_py_funcs->_custom_palette_color_func);
  __pyx_t_3 = __pyx_v_py_funcs->_custom_palette_color_func; 
  __pyx_t_4 = __Pyx_PyLong_From_unsigned_int(__pyx_v_color_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(9, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_4, ((PyObject *)__pyx_v_paint_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_py_color = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_paint.pxi":250
 *     py_funcs = <PaintFuncs>user_data
 *     py_color: Color = py_funcs._custom_palette_color_func(color_index, <object>paint_data)
 *     if py_color is not None:             # <<<<<<<<<<<<<<
 *         color[0] = py_color.to_int()
 *         return 1
*/
  __pyx_t_6 = (__pyx_v_py_color != Py_None);
  if (__pyx_t_6) {

    /* "src/uharfbuzz/_paint.pxi":251
 *     py_color: Color = py_funcs._custom_palette_color_func(color_index, <object>paint_data)
 *     if py_color is not None:
 *         color[0] = py_color.to_int()             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
    __pyx_t_3 = __pyx_v_py_color;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_5 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_int, __pyx_callargs+__pyx_t_5, (1-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 251, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
    }
    __pyx_t_7 = __Pyx_PyLong_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(9, 251, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    (__pyx_v_color[0]) = __pyx_t_7;

    /* "src/uharfbuzz/_paint.pxi":252
 *     if py_color is not None:
 *         color[0] = py_color.to_int()
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "src/uharfbuzz/_paint.pxi":250
 *     py_funcs = <PaintFuncs>user_data
 *     py_color: Color = py_funcs._custom_palette_color_func(color_index, <object>paint_data)
 *     if py_color is not None:             # <<<<<<<<<<<<<<
 *         color[0] = py_color.to_int()
 *         return 1
*/
  }

  /* "src/uharfbuzz/_paint.pxi":253
 *         color[0] = py_color.to_int()
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_paint.pxi":242
 * 
 * 
 * cdef hb_bool_t _paint_custom_palette_color_func(             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_t *funcs,
 *         void *paint_data,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._paint_custom_palette_color_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_funcs);
  __Pyx_XDECREF(__pyx_v_py_color);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":273
 *     cdef object _custom_palette_color_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_paintfuncs = hb_paint_funcs_create()
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_paint.pxi":274
 * 
 *     def __cinit__(self):
 *         self._hb_paintfuncs = hb_paint_funcs_create()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_v_self->_hb_paintfuncs = hb_paint_funcs_create();

  /* "src/uharfbuzz/_paint.pxi":273
 *     cdef object _custom_palette_color_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_paintfuncs = hb_paint_funcs_create()
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":276
 *         self._hb_paintfuncs = hb_paint_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self) {

  /* "src/uharfbuzz/_paint.pxi":277
 * 
 *     def __dealloc__(self):
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)             # <<<<<<<<<<<<<<
 * 
 *     def set_push_transform_func(self,
*/
  hb_paint_funcs_destroy(__pyx_v_self->_hb_paintfuncs);

  /* "src/uharfbuzz/_paint.pxi":276
 *         self._hb_paintfuncs = hb_paint_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_paint.pxi":279
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)
 * 
 *     def set_push_transform_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     float,  # xx
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func = {"set_push_transform_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_transform_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 279, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 279, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_push_transform_func", 0) < (0)) __PYX_ERR(9, 279, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_push_transform_func", 1, 1, 1, i); __PYX_ERR(9, 279, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 279, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_push_transform_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 279, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_push_transform_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_4set_push_transform_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_4set_push_transform_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_transform_func", 0);

  /* "src/uharfbuzz/_paint.pxi":289
 *                                     object,  # paint_data
 *                                 ], None]):
 *         self._push_transform_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_push_transform_func(
 *             self._hb_paintfuncs, _paint_push_transform_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_push_transform_func);
  __Pyx_DECREF(__pyx_v_self->_push_transform_func);
  __pyx_v_self->_push_transform_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":290
 *                                 ], None]):
 *         self._push_transform_func = func
 *         hb_paint_funcs_set_push_transform_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_push_transform_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_push_transform_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_transform_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":279
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)
 * 
 *     def set_push_transform_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     float,  # xx
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":293
 *             self._hb_paintfuncs, _paint_push_transform_func, <void*>self, NULL)
 * 
 *     def set_pop_transform_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    object,  # paint_data
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func = {"set_pop_transform_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_transform_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 293, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 293, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_pop_transform_func", 0) < (0)) __PYX_ERR(9, 293, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_pop_transform_func", 1, 1, 1, i); __PYX_ERR(9, 293, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 293, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_pop_transform_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 293, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_pop_transform_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_6set_pop_transform_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_6set_pop_transform_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_transform_func", 0);

  /* "src/uharfbuzz/_paint.pxi":297
 *                                    object,  # paint_data
 *                                ], None]):
 *         self._pop_transform_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_pop_transform_func(
 *             self._hb_paintfuncs, _paint_pop_transform_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_pop_transform_func);
  __Pyx_DECREF(__pyx_v_self->_pop_transform_func);
  __pyx_v_self->_pop_transform_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":298
 *                                ], None]):
 *         self._pop_transform_func = func
 *         hb_paint_funcs_set_pop_transform_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_pop_transform_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_pop_transform_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_transform_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":293
 *             self._hb_paintfuncs, _paint_push_transform_func, <void*>self, NULL)
 * 
 *     def set_pop_transform_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    object,  # paint_data
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":301
 *             self._hb_paintfuncs, _paint_pop_transform_func, <void*>self, NULL)
 * 
 *     def set_color_glyph_func(self,             # <<<<<<<<<<<<<<
 *                              func: Callable[[
 *                                  int,  # gid
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func = {"set_color_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_color_glyph_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 301, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 301, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_color_glyph_func", 0) < (0)) __PYX_ERR(9, 301, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_color_glyph_func", 1, 1, 1, i); __PYX_ERR(9, 301, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 301, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_color_glyph_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 301, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_color_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_8set_color_glyph_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_8set_color_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_color_glyph_func", 0);

  /* "src/uharfbuzz/_paint.pxi":306
 *                                  object,  # paint_data
 *                              ], bool]):
 *         self._color_glyph_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_color_glyph_func(
 *             self._hb_paintfuncs, _paint_color_glyph_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_color_glyph_func);
  __Pyx_DECREF(__pyx_v_self->_color_glyph_func);
  __pyx_v_self->_color_glyph_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":307
 *                              ], bool]):
 *         self._color_glyph_func = func
 *         hb_paint_funcs_set_color_glyph_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_color_glyph_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_color_glyph_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_glyph_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":301
 *             self._hb_paintfuncs, _paint_pop_transform_func, <void*>self, NULL)
 * 
 *     def set_color_glyph_func(self,             # <<<<<<<<<<<<<<
 *                              func: Callable[[
 *                                  int,  # gid
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":310
 *             self._hb_paintfuncs, _paint_color_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      int,  # gid
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func = {"set_push_clip_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_clip_glyph_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 310, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 310, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_push_clip_glyph_func", 0) < (0)) __PYX_ERR(9, 310, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_push_clip_glyph_func", 1, 1, 1, i); __PYX_ERR(9, 310, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 310, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_push_clip_glyph_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 310, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_push_clip_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_10set_push_clip_glyph_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_10set_push_clip_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_clip_glyph_func", 0);

  /* "src/uharfbuzz/_paint.pxi":315
 *                                      object,  # paint_data
 *                                  ], None]):
 *         self._push_clip_glyph_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_push_clip_glyph_func(
 *             self._hb_paintfuncs, _paint_push_clip_glyph_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_push_clip_glyph_func);
  __Pyx_DECREF(__pyx_v_self->_push_clip_glyph_func);
  __pyx_v_self->_push_clip_glyph_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":316
 *                                  ], None]):
 *         self._push_clip_glyph_func = func
 *         hb_paint_funcs_set_push_clip_glyph_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_push_clip_glyph_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_push_clip_glyph_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_glyph_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":310
 *             self._hb_paintfuncs, _paint_color_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      int,  # gid
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":319
 *             self._hb_paintfuncs, _paint_push_clip_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_rectangle_func(self,             # <<<<<<<<<<<<<<
 *                                      func: Callable[[
 *                                          float,  # xmin
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func = {"set_push_clip_rectangle_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_clip_rectangle_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 319, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 319, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_push_clip_rectangle_func", 0) < (0)) __PYX_ERR(9, 319, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_push_clip_rectangle_func", 1, 1, 1, i); __PYX_ERR(9, 319, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 319, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_push_clip_rectangle_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 319, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_push_clip_rectangle_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_12set_push_clip_rectangle_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_12set_push_clip_rectangle_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_clip_rectangle_func", 0);

  /* "src/uharfbuzz/_paint.pxi":327
 *                                          object,  # paint_data
 *                                      ], None]):
 *         self._push_clip_rectangle_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_push_clip_rectangle_func(
 *             self._hb_paintfuncs, _paint_push_clip_rectangle_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_push_clip_rectangle_func);
  __Pyx_DECREF(__pyx_v_self->_push_clip_rectangle_func);
  __pyx_v_self->_push_clip_rectangle_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":328
 *                                      ], None]):
 *         self._push_clip_rectangle_func = func
 *         hb_paint_funcs_set_push_clip_rectangle_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_push_clip_rectangle_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_push_clip_rectangle_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_clip_rectangle_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":319
 *             self._hb_paintfuncs, _paint_push_clip_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_rectangle_func(self,             # <<<<<<<<<<<<<<
 *                                      func: Callable[[
 *                                          float,  # xmin
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":331
 *             self._hb_paintfuncs, _paint_push_clip_rectangle_func, <void*>self, NULL)
 * 
 *     def set_pop_clip_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                               object,  # paint_data
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func = {"set_pop_clip_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_clip_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 331, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 331, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_pop_clip_func", 0) < (0)) __PYX_ERR(9, 331, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_pop_clip_func", 1, 1, 1, i); __PYX_ERR(9, 331, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 331, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_pop_clip_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 331, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_pop_clip_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_14set_pop_clip_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_14set_pop_clip_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_clip_func", 0);

  /* "src/uharfbuzz/_paint.pxi":335
 *                               object,  # paint_data
 *                           ], None]):
 *         self._pop_clip_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_pop_clip_func(
 *             self._hb_paintfuncs, _paint_pop_clip_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_pop_clip_func);
  __Pyx_DECREF(__pyx_v_self->_pop_clip_func);
  __pyx_v_self->_pop_clip_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":336
 *                           ], None]):
 *         self._pop_clip_func = func
 *         hb_paint_funcs_set_pop_clip_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_pop_clip_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_pop_clip_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_clip_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":331
 *             self._hb_paintfuncs, _paint_push_clip_rectangle_func, <void*>self, NULL)
 * 
 *     def set_pop_clip_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                               object,  # paint_data
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":339
 *             self._hb_paintfuncs, _paint_pop_clip_func, <void*>self, NULL)
 * 
 *     def set_color_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Color,  # color
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func = {"set_color_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_color_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 339, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 339, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_color_func", 0) < (0)) __PYX_ERR(9, 339, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_color_func", 1, 1, 1, i); __PYX_ERR(9, 339, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 339, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_color_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 339, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_color_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_16set_color_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_16set_color_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_color_func", 0);

  /* "src/uharfbuzz/_paint.pxi":345
 *                            object,  # paint_data
 *                        ], None]):
 *         self._color_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_color_func(
 *             self._hb_paintfuncs, _paint_color_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_color_func);
  __Pyx_DECREF(__pyx_v_self->_color_func);
  __pyx_v_self->_color_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":346
 *                        ], None]):
 *         self._color_func = func
 *         hb_paint_funcs_set_color_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_color_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_color_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_color_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":339
 *             self._hb_paintfuncs, _paint_pop_clip_func, <void*>self, NULL)
 * 
 *     def set_color_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Color,  # color
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":349
 *             self._hb_paintfuncs, _paint_color_func, <void*>self, NULL)
 * 
 *     def set_image_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Blob,  # image
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func = {"set_image_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_image_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 349, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 349, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_image_func", 0) < (0)) __PYX_ERR(9, 349, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_image_func", 1, 1, 1, i); __PYX_ERR(9, 349, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 349, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_image_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 349, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_image_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_18set_image_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_18set_image_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_image_func", 0);

  /* "src/uharfbuzz/_paint.pxi":359
 *                            object,  # paint_data
 *                        ], bool]):
 *         self._image_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_image_func(
 *             self._hb_paintfuncs, _paint_image_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_image_func);
  __Pyx_DECREF(__pyx_v_self->_image_func);
  __pyx_v_self->_image_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":360
 *                        ], bool]):
 *         self._image_func = func
 *         hb_paint_funcs_set_image_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_image_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_image_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_image_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":349
 *             self._hb_paintfuncs, _paint_color_func, <void*>self, NULL)
 * 
 *     def set_image_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Blob,  # image
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":363
 *             self._hb_paintfuncs, _paint_image_func, <void*>self, NULL)
 * 
 *     def set_linear_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func = {"set_linear_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_linear_gradient_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 363, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 363, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_linear_gradient_func", 0) < (0)) __PYX_ERR(9, 363, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_linear_gradient_func", 1, 1, 1, i); __PYX_ERR(9, 363, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 363, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_linear_gradient_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 363, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_linear_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_20set_linear_gradient_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_20set_linear_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_linear_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":374
 *                                     object,  # paint_data
 *                                  ], None]):
 *         self._linear_gradient_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_linear_gradient_func(
 *             self._hb_paintfuncs, _paint_linear_gradient_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_linear_gradient_func);
  __Pyx_DECREF(__pyx_v_self->_linear_gradient_func);
  __pyx_v_self->_linear_gradient_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":375
 *                                  ], None]):
 *         self._linear_gradient_func = func
 *         hb_paint_funcs_set_linear_gradient_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_linear_gradient_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_linear_gradient_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_linear_gradient_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":363
 *             self._hb_paintfuncs, _paint_image_func, <void*>self, NULL)
 * 
 *     def set_linear_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":378
 *             self._hb_paintfuncs, _paint_linear_gradient_func, <void*>self, NULL)
 * 
 *     def set_radial_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func = {"set_radial_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_radial_gradient_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 378, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 378, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_radial_gradient_func", 0) < (0)) __PYX_ERR(9, 378, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_radial_gradient_func", 1, 1, 1, i); __PYX_ERR(9, 378, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 378, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_radial_gradient_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 378, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_radial_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_22set_radial_gradient_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_22set_radial_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_radial_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":389
 *                                     object,  # paint_data
 *                                  ], None]):
 *         self._radial_gradient_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_radial_gradient_func(
 *             self._hb_paintfuncs, _paint_radial_gradient_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_radial_gradient_func);
  __Pyx_DECREF(__pyx_v_self->_radial_gradient_func);
  __pyx_v_self->_radial_gradient_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":390
 *                                  ], None]):
 *         self._radial_gradient_func = func
 *         hb_paint_funcs_set_radial_gradient_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_radial_gradient_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_radial_gradient_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_radial_gradient_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":378
 *             self._hb_paintfuncs, _paint_linear_gradient_func, <void*>self, NULL)
 * 
 *     def set_radial_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":393
 *             self._hb_paintfuncs, _paint_radial_gradient_func, <void*>self, NULL)
 * 
 *     def set_sweep_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     ColorLine,  # color_line
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func = {"set_sweep_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_sweep_gradient_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 393, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 393, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_sweep_gradient_func", 0) < (0)) __PYX_ERR(9, 393, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_sweep_gradient_func", 1, 1, 1, i); __PYX_ERR(9, 393, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 393, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_sweep_gradient_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 393, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_sweep_gradient_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_24set_sweep_gradient_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_24set_sweep_gradient_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_sweep_gradient_func", 0);

  /* "src/uharfbuzz/_paint.pxi":402
 *                                     object,  # paint_data
 *                                 ], None]):
 *         self._sweep_gradient_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_sweep_gradient_func(
 *             self._hb_paintfuncs, _paint_sweep_gradient_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_sweep_gradient_func);
  __Pyx_DECREF(__pyx_v_self->_sweep_gradient_func);
  __pyx_v_self->_sweep_gradient_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":403
 *                                 ], None]):
 *         self._sweep_gradient_func = func
 *         hb_paint_funcs_set_sweep_gradient_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_sweep_gradient_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_sweep_gradient_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_sweep_gradient_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":393
 *             self._hb_paintfuncs, _paint_radial_gradient_func, <void*>self, NULL)
 * 
 *     def set_sweep_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     ColorLine,  # color_line
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":406
 *             self._hb_paintfuncs, _paint_sweep_gradient_func, <void*>self, NULL)
 * 
 *     def set_push_group_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object,  # paint_data
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func = {"set_push_group_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_group_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 406, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 406, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_push_group_func", 0) < (0)) __PYX_ERR(9, 406, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_push_group_func", 1, 1, 1, i); __PYX_ERR(9, 406, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 406, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_push_group_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 406, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_push_group_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_26set_push_group_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_26set_push_group_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_push_group_func", 0);

  /* "src/uharfbuzz/_paint.pxi":410
 *                                 object,  # paint_data
 *                             ], None]):
 *         self._push_group_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_push_group_func(
 *             self._hb_paintfuncs, _paint_push_group_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_push_group_func);
  __Pyx_DECREF(__pyx_v_self->_push_group_func);
  __pyx_v_self->_push_group_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":411
 *                             ], None]):
 *         self._push_group_func = func
 *         hb_paint_funcs_set_push_group_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_push_group_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_push_group_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_push_group_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":406
 *             self._hb_paintfuncs, _paint_sweep_gradient_func, <void*>self, NULL)
 * 
 *     def set_push_group_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object,  # paint_data
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":414
 *             self._hb_paintfuncs, _paint_push_group_func, <void*>self, NULL)
 * 
 *     def set_pop_group_func(self,             # <<<<<<<<<<<<<<
 *                            func: Callable[[
 *                                PaintCompositeMode,  # mode
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func = {"set_pop_group_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_group_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 414, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 414, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_pop_group_func", 0) < (0)) __PYX_ERR(9, 414, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_pop_group_func", 1, 1, 1, i); __PYX_ERR(9, 414, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 414, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_pop_group_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 414, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_pop_group_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_28set_pop_group_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_28set_pop_group_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_pop_group_func", 0);

  /* "src/uharfbuzz/_paint.pxi":419
 *                                object,  # paint_data
 *                            ], None]):
 *         self._pop_group_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_pop_group_func(
 *             self._hb_paintfuncs, _paint_pop_group_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_pop_group_func);
  __Pyx_DECREF(__pyx_v_self->_pop_group_func);
  __pyx_v_self->_pop_group_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":420
 *                            ], None]):
 *         self._pop_group_func = func
 *         hb_paint_funcs_set_pop_group_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_pop_group_func, <void*>self, NULL)
 * 
*/
  hb_paint_funcs_set_pop_group_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_pop_group_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":414
 *             self._hb_paintfuncs, _paint_push_group_func, <void*>self, NULL)
 * 
 *     def set_pop_group_func(self,             # <<<<<<<<<<<<<<
 *                            func: Callable[[
 *                                PaintCompositeMode,  # mode
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_paint.pxi":423
 *             self._hb_paintfuncs, _paint_pop_group_func, <void*>self, NULL)
 * 
 *     def set_custom_palette_color_func(self,             # <<<<<<<<<<<<<<
 *                                       func: Callable[[
 *                                           int,  # color_index
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func = {"set_custom_palette_color_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_custom_palette_color_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(9, 423, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 423, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_custom_palette_color_func", 0) < (0)) __PYX_ERR(9, 423, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_custom_palette_color_func", 1, 1, 1, i); __PYX_ERR(9, 423, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(9, 423, __pyx_L3_error)
    }
    __pyx_v_func = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_custom_palette_color_func", 1, 1, 1, __pyx_nargs); __PYX_ERR(9, 423, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.set_custom_palette_color_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_30set_custom_palette_color_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v_func);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_30set_custom_palette_color_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, PyObject *__pyx_v_func) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_custom_palette_color_func", 0);

  /* "src/uharfbuzz/_paint.pxi":428
 *                                           object,  # paint_data
 *                                       ], Color]):
 *         self._custom_palette_color_func = func             # <<<<<<<<<<<<<<
 *         hb_paint_funcs_set_custom_palette_color_func(
 *             self._hb_paintfuncs, _paint_custom_palette_color_func, <void*>self, NULL)
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_custom_palette_color_func);
  __Pyx_DECREF(__pyx_v_self->_custom_palette_color_func);
  __pyx_v_self->_custom_palette_color_func = __pyx_v_func;

  /* "src/uharfbuzz/_paint.pxi":429
 *                                       ], Color]):
 *         self._custom_palette_color_func = func
 *         hb_paint_funcs_set_custom_palette_color_func(             # <<<<<<<<<<<<<<
 *             self._hb_paintfuncs, _paint_custom_palette_color_func, <void*>self, NULL)
*/
  hb_paint_funcs_set_custom_palette_color_func(__pyx_v_self->_hb_paintfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__paint_custom_palette_color_func, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_paint.pxi":423
 *             self._hb_paintfuncs, _paint_pop_group_func, <void*>self, NULL)
 * 
 *     def set_custom_palette_color_func(self,             # <<<<<<<<<<<<<<
 *                                       func: Callable[[
 *                                           int,  # color_index
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_32__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_32__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_34__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10PaintFuncs_34__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.PaintFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":146
 *     cdef FontFuncs _ffuncs
 * 
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):             # <<<<<<<<<<<<<<
 *         if face_or_font is not None:
 *             if isinstance(face_or_font, Font):
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_face_or_font = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face_or_font,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 146, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 146, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(3, 146, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    } else {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 146, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_face_or_font = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 0, 1, __pyx_nargs); __PYX_ERR(3, 146, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_face_or_font);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_face_or_font) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__cinit__", 0);

  /* "src/uharfbuzz/_font.pxi":147
 * 
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):
 *         if face_or_font is not None:             # <<<<<<<<<<<<<<
 *             if isinstance(face_or_font, Font):
 *                 self.__create_sub_font(face_or_font)
*/
  __pyx_t_1 = (__pyx_v_face_or_font != Py_None);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":148
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):
 *         if face_or_font is not None:
 *             if isinstance(face_or_font, Font):             # <<<<<<<<<<<<<<
 *                 self.__create_sub_font(face_or_font)
 *                 return
*/
    __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_face_or_font, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font); 
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_font.pxi":149
 *         if face_or_font is not None:
 *             if isinstance(face_or_font, Font):
 *                 self.__create_sub_font(face_or_font)             # <<<<<<<<<<<<<<
 *                 return
 *             self.__create(face_or_font)
*/
      if (!(likely(((__pyx_v_face_or_font) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_face_or_font, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font))))) __PYX_ERR(3, 149, __pyx_L1_error)
      __pyx_t_2 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self->__pyx_vtab)->_Font__create_sub_font(__pyx_v_self, ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_face_or_font)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 149, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "src/uharfbuzz/_font.pxi":150
 *             if isinstance(face_or_font, Font):
 *                 self.__create_sub_font(face_or_font)
 *                 return             # <<<<<<<<<<<<<<
 *             self.__create(face_or_font)
 *         else:
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "src/uharfbuzz/_font.pxi":148
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):
 *         if face_or_font is not None:
 *             if isinstance(face_or_font, Font):             # <<<<<<<<<<<<<<
 *                 self.__create_sub_font(face_or_font)
 *                 return
*/
    }

    /* "src/uharfbuzz/_font.pxi":151
 *                 self.__create_sub_font(face_or_font)
 *                 return
 *             self.__create(face_or_font)             # <<<<<<<<<<<<<<
 *         else:
 *             self._hb_font = hb_font_get_empty()
*/
    if (!(likely(((__pyx_v_face_or_font) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_face_or_font, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face))))) __PYX_ERR(3, 151, __pyx_L1_error)
    __pyx_t_2 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self->__pyx_vtab)->_Font__create(__pyx_v_self, ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_v_face_or_font)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "src/uharfbuzz/_font.pxi":147
 * 
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):
 *         if face_or_font is not None:             # <<<<<<<<<<<<<<
 *             if isinstance(face_or_font, Font):
 *                 self.__create_sub_font(face_or_font)
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":153
 *             self.__create(face_or_font)
 *         else:
 *             self._hb_font = hb_font_get_empty()             # <<<<<<<<<<<<<<
 *             self._face = Face()
 * 
*/
  /*else*/ {
    __pyx_v_self->_hb_font = hb_font_get_empty();

    /* "src/uharfbuzz/_font.pxi":154
 *         else:
 *             self._hb_font = hb_font_get_empty()
 *             self._face = Face()             # <<<<<<<<<<<<<<
 * 
 *     cdef __create(self, Face face):
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 154, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_2);
    }
    __Pyx_GIVEREF((PyObject *)__pyx_t_2);
    __Pyx_GOTREF((PyObject *)__pyx_v_self->_face);
    __Pyx_DECREF((PyObject *)__pyx_v_self->_face);
    __pyx_v_self->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_2);
    __pyx_t_2 = 0;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_font.pxi":146
 *     cdef FontFuncs _ffuncs
 * 
 *     def __cinit__(self, face_or_font: Union[Face, Font] = None):             # <<<<<<<<<<<<<<
 *         if face_or_font is not None:
 *             if isinstance(face_or_font, Font):
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":156
 *             self._face = Face()
 * 
 *     cdef __create(self, Face face):             # <<<<<<<<<<<<<<
 *         self._hb_font = hb_font_create(face._hb_face)
 *         self._face = face
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_Font__create", 0);

  /* "src/uharfbuzz/_font.pxi":157
 * 
 *     cdef __create(self, Face face):
 *         self._hb_font = hb_font_create(face._hb_face)             # <<<<<<<<<<<<<<
 *         self._face = face
 * 
*/
  __pyx_v_self->_hb_font = hb_font_create(__pyx_v_face->_hb_face);

  /* "src/uharfbuzz/_font.pxi":158
 *     cdef __create(self, Face face):
 *         self._hb_font = hb_font_create(face._hb_face)
 *         self._face = face             # <<<<<<<<<<<<<<
 * 
 *     cdef __create_sub_font(self, Font font):
*/
  __Pyx_INCREF((PyObject *)__pyx_v_face);
  __Pyx_GIVEREF((PyObject *)__pyx_v_face);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_face);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_face);
  __pyx_v_self->_face = __pyx_v_face;

  /* "src/uharfbuzz/_font.pxi":156
 *             self._face = Face()
 * 
 *     cdef __create(self, Face face):             # <<<<<<<<<<<<<<
 *         self._hb_font = hb_font_create(face._hb_face)
 *         self._face = face
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":160
 *         self._face = face
 * 
 *     cdef __create_sub_font(self, Font font):             # <<<<<<<<<<<<<<
 *         self._hb_font = hb_font_create_sub_font(font._hb_font)
 *         self._face = font._face
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create_sub_font(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  __Pyx_RefNannySetupContext("_Font__create_sub_font", 0);

  /* "src/uharfbuzz/_font.pxi":161
 * 
 *     cdef __create_sub_font(self, Font font):
 *         self._hb_font = hb_font_create_sub_font(font._hb_font)             # <<<<<<<<<<<<<<
 *         self._face = font._face
 * 
*/
  __pyx_v_self->_hb_font = hb_font_create_sub_font(__pyx_v_font->_hb_font);

  /* "src/uharfbuzz/_font.pxi":162
 *     cdef __create_sub_font(self, Font font):
 *         self._hb_font = hb_font_create_sub_font(font._hb_font)
 *         self._face = font._face             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font->_face);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_face);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_face);
  __pyx_v_self->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":160
 *         self._face = face
 * 
 *     cdef __create_sub_font(self, Font font):             # <<<<<<<<<<<<<<
 *         self._hb_font = hb_font_create_sub_font(font._hb_font)
 *         self._face = font._face
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":164
 *         self._face = font._face
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_font_destroy(self._hb_font)
 *         self._face = self._ffuncs = None
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);

  /* "src/uharfbuzz/_font.pxi":165
 * 
 *     def __dealloc__(self):
 *         hb_font_destroy(self._hb_font)             # <<<<<<<<<<<<<<
 *         self._face = self._ffuncs = None
 * 
*/
  hb_font_destroy(__pyx_v_self->_hb_font);

  /* "src/uharfbuzz/_font.pxi":166
 *     def __dealloc__(self):
 *         hb_font_destroy(self._hb_font)
 *         self._face = self._ffuncs = None             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_face);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_face);
  __pyx_v_self->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)Py_None);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_ffuncs);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_ffuncs);
  __pyx_v_self->_ffuncs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)Py_None);

  /* "src/uharfbuzz/_font.pxi":164
 *         self._face = font._face
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_font_destroy(self._hb_font)
 *         self._face = self._ffuncs = None
*/

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

/* "src/uharfbuzz/_font.pxi":168
 *         self._face = self._ffuncs = None
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Font from_ptr(hb_font_t* hb_font):
 *         """Create Font from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_f_9uharfbuzz_9_harfbuzz_4Font_from_ptr(hb_font_t *__pyx_v_hb_font) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_font.pxi":172
 *         """Create Font from a pointer, taking ownership of it."""
 * 
 *         cdef Font wrapper = Font.__new__(Font)             # <<<<<<<<<<<<<<
 *         wrapper._hb_font = hb_font
 *         wrapper._face = Face.from_ptr(hb_face_reference(hb_font_get_face(hb_font)))
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Font(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 172, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":173
 * 
 *         cdef Font wrapper = Font.__new__(Font)
 *         wrapper._hb_font = hb_font             # <<<<<<<<<<<<<<
 *         wrapper._face = Face.from_ptr(hb_face_reference(hb_font_get_face(hb_font)))
 *         return wrapper
*/
  __pyx_v_wrapper->_hb_font = __pyx_v_hb_font;

  /* "src/uharfbuzz/_font.pxi":174
 *         cdef Font wrapper = Font.__new__(Font)
 *         wrapper._hb_font = hb_font
 *         wrapper._face = Face.from_ptr(hb_face_reference(hb_font_get_face(hb_font)))             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(hb_face_reference(hb_font_get_face(__pyx_v_hb_font)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v_wrapper->_face);
  __Pyx_DECREF((PyObject *)__pyx_v_wrapper->_face);
  __pyx_v_wrapper->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":175
 *         wrapper._hb_font = hb_font
 *         wrapper._face = Face.from_ptr(hb_face_reference(hb_font_get_face(hb_font)))
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     # DEPRECATED: use the normal constructor
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":168
 *         self._face = self._ffuncs = None
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef Font from_ptr(hb_font_t* hb_font):
 *         """Create Font from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":178
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, face: Face) -> Font:
 *         cdef Font inst = cls(face)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_5create = {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 178, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 178, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "create", 0) < (0)) __PYX_ERR(3, 178, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("create", 1, 1, 1, i); __PYX_ERR(3, 178, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 178, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("create", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 178, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(3, 179, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4create(((PyTypeObject*)__pyx_v_cls), __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4create(PyTypeObject *__pyx_v_cls, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/uharfbuzz/_font.pxi":180
 *     @classmethod
 *     def create(cls, face: Face) -> Font:
 *         cdef Font inst = cls(face)             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, ((PyObject *)__pyx_v_face)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font))))) __PYX_ERR(3, 180, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":181
 *     def create(cls, face: Face) -> Font:
 *         cdef Font inst = cls(face)
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":178
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, face: Face) -> Font:
 *         cdef Font inst = cls(face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":183
 *         return inst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def face(self) -> Face:
 *         return self._face
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4face_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4face_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4face___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4face___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":185
 *     @property
 *     def face(self) -> Face:
 *         return self._face             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_face);
  __pyx_r = ((PyObject *)__pyx_v_self->_face);
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":183
 *         return inst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def face(self) -> Face:
 *         return self._face
*/

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

/* "src/uharfbuzz/_font.pxi":187
 *         return self._face
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def funcs(self) -> FontFuncs:
 *         return self._ffuncs
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":189
 *     @property
 *     def funcs(self) -> FontFuncs:
 *         return self._ffuncs             # <<<<<<<<<<<<<<
 * 
 *     @funcs.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_ffuncs);
  __pyx_r = ((PyObject *)__pyx_v_self->_ffuncs);
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":187
 *         return self._face
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def funcs(self) -> FontFuncs:
 *         return self._ffuncs
*/

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

/* "src/uharfbuzz/_font.pxi":191
 *         return self._ffuncs
 * 
 *     @funcs.setter             # <<<<<<<<<<<<<<
 *     def funcs(self, ffuncs: FontFuncs):
 *         hb_font_set_funcs(
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_ffuncs); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_ffuncs) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ffuncs), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, 0, "ffuncs", 0))) __PYX_ERR(3, 192, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_ffuncs));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5funcs_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_ffuncs) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_font.pxi":193
 *     @funcs.setter
 *     def funcs(self, ffuncs: FontFuncs):
 *         hb_font_set_funcs(             # <<<<<<<<<<<<<<
 *             self._hb_font, ffuncs._hb_ffuncs, <void*>self, NULL)
 *         self._ffuncs = ffuncs
*/
  hb_font_set_funcs(__pyx_v_self->_hb_font, __pyx_v_ffuncs->_hb_ffuncs, ((void *)__pyx_v_self), NULL);

  /* "src/uharfbuzz/_font.pxi":195
 *         hb_font_set_funcs(
 *             self._hb_font, ffuncs._hb_ffuncs, <void*>self, NULL)
 *         self._ffuncs = ffuncs             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_INCREF((PyObject *)__pyx_v_ffuncs);
  __Pyx_GIVEREF((PyObject *)__pyx_v_ffuncs);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_ffuncs);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_ffuncs);
  __pyx_v_self->_ffuncs = __pyx_v_ffuncs;

  /* "src/uharfbuzz/_font.pxi":191
 *         return self._ffuncs
 * 
 *     @funcs.setter             # <<<<<<<<<<<<<<
 *     def funcs(self, ffuncs: FontFuncs):
 *         hb_font_set_funcs(
*/

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

/* "src/uharfbuzz/_font.pxi":197
 *         self._ffuncs = ffuncs
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale(self) -> Tuple[int, int]:
 *         cdef int x, y
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  int __pyx_v_x;
  int __pyx_v_y;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":200
 *     def scale(self) -> Tuple[int, int]:
 *         cdef int x, y
 *         hb_font_get_scale(self._hb_font, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y)
 * 
*/
  hb_font_get_scale(__pyx_v_self->_hb_font, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_font.pxi":201
 *         cdef int x, y
 *         hb_font_get_scale(self._hb_font, &x, &y)
 *         return (x, y)             # <<<<<<<<<<<<<<
 * 
 *     @scale.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(3, 201, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(3, 201, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":197
 *         self._ffuncs = ffuncs
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale(self) -> Tuple[int, int]:
 *         cdef int x, y
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.scale.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":203
 *         return (x, y)
 * 
 *     @scale.setter             # <<<<<<<<<<<<<<
 *     def scale(self, value: Tuple[int, int]):
 *         x, y = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyTuple_Type), 0, "value", 2))) __PYX_ERR(3, 204, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_5scale_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_font.pxi":205
 *     @scale.setter
 *     def scale(self, value: Tuple[int, int]):
 *         x, y = value             # <<<<<<<<<<<<<<
 *         hb_font_set_scale(self._hb_font, x, y)
 * 
*/
  if (1) {
    PyObject* sequence = __pyx_v_value;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(3, 205, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  }
  __pyx_v_x = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_y = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":206
 *     def scale(self, value: Tuple[int, int]):
 *         x, y = value
 *         hb_font_set_scale(self._hb_font, x, y)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_3 = __Pyx_PyLong_As_int(__pyx_v_x); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 206, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyLong_As_int(__pyx_v_y); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 206, __pyx_L1_error)
  hb_font_set_scale(__pyx_v_self->_hb_font, __pyx_t_3, __pyx_t_4);

  /* "src/uharfbuzz/_font.pxi":203
 *         return (x, y)
 * 
 *     @scale.setter             # <<<<<<<<<<<<<<
 *     def scale(self, value: Tuple[int, int]):
 *         x, y = value
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.scale.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":208
 *         hb_font_set_scale(self._hb_font, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def ppem(self) -> Tuple[int, int]:
 *         cdef unsigned int x, y
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  unsigned int __pyx_v_x;
  unsigned int __pyx_v_y;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":211
 *     def ppem(self) -> Tuple[int, int]:
 *         cdef unsigned int x, y
 *         hb_font_get_ppem(self._hb_font, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y)
 * 
*/
  hb_font_get_ppem(__pyx_v_self->_hb_font, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_font.pxi":212
 *         cdef unsigned int x, y
 *         hb_font_get_ppem(self._hb_font, &x, &y)
 *         return (x, y)             # <<<<<<<<<<<<<<
 * 
 *     @ppem.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_From_unsigned_int(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(3, 212, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(3, 212, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":208
 *         hb_font_set_scale(self._hb_font, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def ppem(self) -> Tuple[int, int]:
 *         cdef unsigned int x, y
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.ppem.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":214
 *         return (x, y)
 * 
 *     @ppem.setter             # <<<<<<<<<<<<<<
 *     def ppem(self, value: Tuple[int, int]):
 *         x, y = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyTuple_Type), 0, "value", 2))) __PYX_ERR(3, 215, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ppem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_font.pxi":216
 *     @ppem.setter
 *     def ppem(self, value: Tuple[int, int]):
 *         x, y = value             # <<<<<<<<<<<<<<
 *         hb_font_set_ppem(self._hb_font, x, y)
 * 
*/
  if (1) {
    PyObject* sequence = __pyx_v_value;
    Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(3, 216, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0);
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  }
  __pyx_v_x = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_y = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":217
 *     def ppem(self, value: Tuple[int, int]):
 *         x, y = value
 *         hb_font_set_ppem(self._hb_font, x, y)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_x); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(3, 217, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_y); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(3, 217, __pyx_L1_error)
  hb_font_set_ppem(__pyx_v_self->_hb_font, __pyx_t_3, __pyx_t_4);

  /* "src/uharfbuzz/_font.pxi":214
 *         return (x, y)
 * 
 *     @ppem.setter             # <<<<<<<<<<<<<<
 *     def ppem(self, value: Tuple[int, int]):
 *         x, y = value
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.ppem.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":219
 *         hb_font_set_ppem(self._hb_font, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def ptem(self) -> float:
 *         return hb_font_get_ptem(self._hb_font)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":221
 *     @property
 *     def ptem(self) -> float:
 *         return hb_font_get_ptem(self._hb_font)             # <<<<<<<<<<<<<<
 * 
 *     @ptem.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(hb_font_get_ptem(__pyx_v_self->_hb_font)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":219
 *         hb_font_set_ppem(self._hb_font, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def ptem(self) -> float:
 *         return hb_font_get_ptem(self._hb_font)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.ptem.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":223
 *         return hb_font_get_ptem(self._hb_font)
 * 
 *     @ptem.setter             # <<<<<<<<<<<<<<
 *     def ptem(self, value: float):
 *         hb_font_set_ptem(self._hb_font, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  double __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __Pyx_PyFloat_AsDouble(__pyx_arg_value); if (unlikely((__pyx_v_value == (double)-1) && PyErr_Occurred())) __PYX_ERR(3, 224, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.ptem.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((double)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_4ptem_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, double __pyx_v_value) {
  int __pyx_r;

  /* "src/uharfbuzz/_font.pxi":225
 *     @ptem.setter
 *     def ptem(self, value: float):
 *         hb_font_set_ptem(self._hb_font, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_font_set_ptem(__pyx_v_self->_hb_font, __pyx_v_value);

  /* "src/uharfbuzz/_font.pxi":223
 *         return hb_font_get_ptem(self._hb_font)
 * 
 *     @ptem.setter             # <<<<<<<<<<<<<<
 *     def ptem(self, value: float):
 *         hb_font_set_ptem(self._hb_font, value)
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":227
 *         hb_font_set_ptem(self._hb_font, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def synthetic_slant(self) -> float:
 *         return hb_font_get_synthetic_slant(self._hb_font)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":229
 *     @property
 *     def synthetic_slant(self) -> float:
 *         return hb_font_get_synthetic_slant(self._hb_font)             # <<<<<<<<<<<<<<
 * 
 *     @synthetic_slant.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(hb_font_get_synthetic_slant(__pyx_v_self->_hb_font)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":227
 *         hb_font_set_ptem(self._hb_font, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def synthetic_slant(self) -> float:
 *         return hb_font_get_synthetic_slant(self._hb_font)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.synthetic_slant.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":231
 *         return hb_font_get_synthetic_slant(self._hb_font)
 * 
 *     @synthetic_slant.setter             # <<<<<<<<<<<<<<
 *     def synthetic_slant(self, value: float):
 *         hb_font_set_synthetic_slant(self._hb_font, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  double __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __Pyx_PyFloat_AsDouble(__pyx_arg_value); if (unlikely((__pyx_v_value == (double)-1) && PyErr_Occurred())) __PYX_ERR(3, 232, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.synthetic_slant.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((double)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, double __pyx_v_value) {
  int __pyx_r;

  /* "src/uharfbuzz/_font.pxi":233
 *     @synthetic_slant.setter
 *     def synthetic_slant(self, value: float):
 *         hb_font_set_synthetic_slant(self._hb_font, value)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_font_set_synthetic_slant(__pyx_v_self->_hb_font, __pyx_v_value);

  /* "src/uharfbuzz/_font.pxi":231
 *         return hb_font_get_synthetic_slant(self._hb_font)
 * 
 *     @synthetic_slant.setter             # <<<<<<<<<<<<<<
 *     def synthetic_slant(self, value: float):
 *         hb_font_set_synthetic_slant(self._hb_font, value)
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":235
 *         hb_font_set_synthetic_slant(self._hb_font, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def synthetic_bold(self) -> Tuple[float, float, bool]:
 *         cdef float x_embolden
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  float __pyx_v_x_embolden;
  float __pyx_v_y_embolden;
  hb_bool_t __pyx_v_in_place;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":240
 *         cdef float y_embolden
 *         cdef hb_bool_t in_place
 *         hb_font_get_synthetic_bold(self._hb_font, &x_embolden, &y_embolden, &in_place)             # <<<<<<<<<<<<<<
 *         return (x_embolden, y_embolden, bool(in_place))
 * 
*/
  hb_font_get_synthetic_bold(__pyx_v_self->_hb_font, (&__pyx_v_x_embolden), (&__pyx_v_y_embolden), (&__pyx_v_in_place));

  /* "src/uharfbuzz/_font.pxi":241
 *         cdef hb_bool_t in_place
 *         hb_font_get_synthetic_bold(self._hb_font, &x_embolden, &y_embolden, &in_place)
 *         return (x_embolden, y_embolden, bool(in_place))             # <<<<<<<<<<<<<<
 * 
 *     @synthetic_bold.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x_embolden); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_y_embolden); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyBool_FromLong((!(!(__pyx_v_in_place != 0)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1) != (0)) __PYX_ERR(3, 241, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2) != (0)) __PYX_ERR(3, 241, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3) != (0)) __PYX_ERR(3, 241, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":235
 *         hb_font_set_synthetic_slant(self._hb_font, value)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def synthetic_bold(self) -> Tuple[float, float, bool]:
 *         cdef float x_embolden
*/

  /* 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("uharfbuzz._harfbuzz.Font.synthetic_bold.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":243
 *         return (x_embolden, y_embolden, bool(in_place))
 * 
 *     @synthetic_bold.setter             # <<<<<<<<<<<<<<
 *     def synthetic_bold(self, value: float|tuple[float]|tuple[float,float]|tuple[float,float,bool]):
 *         cdef float x_embolden
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value) {
  float __pyx_v_x_embolden;
  float __pyx_v_y_embolden;
  hb_bool_t __pyx_v_in_place;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  float __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  float __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  hb_bool_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_font.pxi":247
 *         cdef float x_embolden
 *         cdef float y_embolden
 *         cdef hb_bool_t in_place = False             # <<<<<<<<<<<<<<
 *         if isinstance(value, tuple):
 *             if len(value) == 1:
*/
  __pyx_v_in_place = 0;

  /* "src/uharfbuzz/_font.pxi":248
 *         cdef float y_embolden
 *         cdef hb_bool_t in_place = False
 *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
 *             if len(value) == 1:
 *                 x_embolden = y_embolden = value[0]
*/
  __pyx_t_1 = PyTuple_Check(__pyx_v_value); 
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":249
 *         cdef hb_bool_t in_place = False
 *         if isinstance(value, tuple):
 *             if len(value) == 1:             # <<<<<<<<<<<<<<
 *                 x_embolden = y_embolden = value[0]
 *             elif len(value) == 2:
*/
    __pyx_t_2 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(3, 249, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_2 == 1);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_font.pxi":250
 *         if isinstance(value, tuple):
 *             if len(value) == 1:
 *                 x_embolden = y_embolden = value[0]             # <<<<<<<<<<<<<<
 *             elif len(value) == 2:
 *                 x_embolden, y_embolden = value
*/
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_value, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 250, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 250, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_v_x_embolden = __pyx_t_4;
      __pyx_v_y_embolden = __pyx_t_4;

      /* "src/uharfbuzz/_font.pxi":249
 *         cdef hb_bool_t in_place = False
 *         if isinstance(value, tuple):
 *             if len(value) == 1:             # <<<<<<<<<<<<<<
 *                 x_embolden = y_embolden = value[0]
 *             elif len(value) == 2:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_font.pxi":251
 *             if len(value) == 1:
 *                 x_embolden = y_embolden = value[0]
 *             elif len(value) == 2:             # <<<<<<<<<<<<<<
 *                 x_embolden, y_embolden = value
 *             else:
*/
    __pyx_t_2 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(3, 251, __pyx_L1_error)
    __pyx_t_1 = (__pyx_t_2 == 2);
    if (__pyx_t_1) {

      /* "src/uharfbuzz/_font.pxi":252
 *                 x_embolden = y_embolden = value[0]
 *             elif len(value) == 2:
 *                 x_embolden, y_embolden = value             # <<<<<<<<<<<<<<
 *             else:
 *                 x_embolden, y_embolden, in_place = value
*/
      if ((likely(PyTuple_CheckExact(__pyx_v_value))) || (PyList_CheckExact(__pyx_v_value))) {
        PyObject* sequence = __pyx_v_value;
        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(3, 252, __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_INCREF(__pyx_t_3);
          __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
          __Pyx_INCREF(__pyx_t_5);
        } else {
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 252, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 252, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_5);
        }
        #else
        __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 252, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 252, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_6 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 252, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
        index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_3);
        index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < (0)) __PYX_ERR(3, 252, __pyx_L1_error)
        __pyx_t_7 = NULL;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L6_unpacking_done;
        __pyx_L5_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(3, 252, __pyx_L1_error)
        __pyx_L6_unpacking_done:;
      }
      __pyx_t_4 = __Pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 252, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_8 = __Pyx_PyFloat_AsFloat(__pyx_t_5); if (unlikely((__pyx_t_8 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 252, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_v_x_embolden = __pyx_t_4;
      __pyx_v_y_embolden = __pyx_t_8;

      /* "src/uharfbuzz/_font.pxi":251
 *             if len(value) == 1:
 *                 x_embolden = y_embolden = value[0]
 *             elif len(value) == 2:             # <<<<<<<<<<<<<<
 *                 x_embolden, y_embolden = value
 *             else:
*/
      goto __pyx_L4;
    }

    /* "src/uharfbuzz/_font.pxi":254
 *                 x_embolden, y_embolden = value
 *             else:
 *                 x_embolden, y_embolden, in_place = value             # <<<<<<<<<<<<<<
 *         else:
 *             x_embolden = y_embolden = value
*/
    /*else*/ {
      if ((likely(PyTuple_CheckExact(__pyx_v_value))) || (PyList_CheckExact(__pyx_v_value))) {
        PyObject* sequence = __pyx_v_value;
        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(3, 254, __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_INCREF(__pyx_t_5);
          __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
          __Pyx_INCREF(__pyx_t_3);
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2);
          __Pyx_INCREF(__pyx_t_6);
        } else {
          __pyx_t_5 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 254, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_5);
          __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 254, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_3);
          __pyx_t_6 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
          if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 254, __pyx_L1_error)
          __Pyx_XGOTREF(__pyx_t_6);
        }
        #else
        __pyx_t_5 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 254, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 254, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_6 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 254, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        #endif
      } else {
        Py_ssize_t index = -1;
        __pyx_t_9 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 254, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_9);
        index = 0; __pyx_t_5 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L7_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_5);
        index = 1; __pyx_t_3 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_3);
        index = 2; __pyx_t_6 = __pyx_t_7(__pyx_t_9); if (unlikely(!__pyx_t_6)) goto __pyx_L7_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_9), 3) < (0)) __PYX_ERR(3, 254, __pyx_L1_error)
        __pyx_t_7 = 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_7 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(3, 254, __pyx_L1_error)
        __pyx_L8_unpacking_done:;
      }
      __pyx_t_8 = __Pyx_PyFloat_AsFloat(__pyx_t_5); if (unlikely((__pyx_t_8 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_4 = __Pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_10 = __Pyx_PyLong_As_hb_bool_t(__pyx_t_6); if (unlikely((__pyx_t_10 == ((hb_bool_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 254, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_v_x_embolden = __pyx_t_8;
      __pyx_v_y_embolden = __pyx_t_4;
      __pyx_v_in_place = __pyx_t_10;
    }
    __pyx_L4:;

    /* "src/uharfbuzz/_font.pxi":248
 *         cdef float y_embolden
 *         cdef hb_bool_t in_place = False
 *         if isinstance(value, tuple):             # <<<<<<<<<<<<<<
 *             if len(value) == 1:
 *                 x_embolden = y_embolden = value[0]
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":256
 *                 x_embolden, y_embolden, in_place = value
 *         else:
 *             x_embolden = y_embolden = value             # <<<<<<<<<<<<<<
 *         hb_font_set_synthetic_bold(self._hb_font, x_embolden, y_embolden, in_place)
 * 
*/
  /*else*/ {
    __pyx_t_4 = __Pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 256, __pyx_L1_error)
    __pyx_v_x_embolden = __pyx_t_4;
    __pyx_v_y_embolden = __pyx_t_4;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_font.pxi":257
 *         else:
 *             x_embolden = y_embolden = value
 *         hb_font_set_synthetic_bold(self._hb_font, x_embolden, y_embolden, in_place)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_font_set_synthetic_bold(__pyx_v_self->_hb_font, __pyx_v_x_embolden, __pyx_v_y_embolden, __pyx_v_in_place);

  /* "src/uharfbuzz/_font.pxi":243
 *         return (x_embolden, y_embolden, bool(in_place))
 * 
 *     @synthetic_bold.setter             # <<<<<<<<<<<<<<
 *     def synthetic_bold(self, value: float|tuple[float]|tuple[float,float]|tuple[float,float,bool]):
 *         cdef float x_embolden
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.synthetic_bold.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":259
 *         hb_font_set_synthetic_bold(self._hb_font, x_embolden, y_embolden, in_place)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def var_named_instance(self) -> int:
 *         return hb_font_get_var_named_instance(self._hb_font)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_font.pxi":261
 *     @property
 *     def var_named_instance(self) -> int:
 *         return hb_font_get_var_named_instance(self._hb_font)             # <<<<<<<<<<<<<<
 * 
 *     @var_named_instance.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_font_get_var_named_instance(__pyx_v_self->_hb_font)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":259
 *         hb_font_set_synthetic_bold(self._hb_font, x_embolden, y_embolden, in_place)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def var_named_instance(self) -> int:
 *         return hb_font_get_var_named_instance(self._hb_font)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.var_named_instance.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":263
 *         return hb_font_get_var_named_instance(self._hb_font)
 * 
 *     @var_named_instance.setter             # <<<<<<<<<<<<<<
 *     def var_named_instance(self, value: int):
 *         hb_font_set_var_named_instance(self._hb_font, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(3, 264, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  unsigned int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_font.pxi":265
 *     @var_named_instance.setter
 *     def var_named_instance(self, value: int):
 *         hb_font_set_var_named_instance(self._hb_font, value)             # <<<<<<<<<<<<<<
 * 
 *     def set_variations(self, variations: Dict[str, float]):
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(3, 265, __pyx_L1_error)
  hb_font_set_var_named_instance(__pyx_v_self->_hb_font, __pyx_t_1);

  /* "src/uharfbuzz/_font.pxi":263
 *         return hb_font_get_var_named_instance(self._hb_font)
 * 
 *     @var_named_instance.setter             # <<<<<<<<<<<<<<
 *     def var_named_instance(self, value: int):
 *         hb_font_set_var_named_instance(self._hb_font, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.var_named_instance.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":267
 *         hb_font_set_var_named_instance(self._hb_font, value)
 * 
 *     def set_variations(self, variations: Dict[str, float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int size
 *         cdef hb_variation_t* hb_variations
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_7set_variations(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_7set_variations = {"set_variations", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_7set_variations, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_7set_variations(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_variations = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_variations (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_variations,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 267, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 267, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_variations", 0) < (0)) __PYX_ERR(3, 267, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_variations", 1, 1, 1, i); __PYX_ERR(3, 267, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 267, __pyx_L3_error)
    }
    __pyx_v_variations = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_variations", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 267, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_variations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_variations), (&PyDict_Type), 0, "variations", 2))) __PYX_ERR(3, 267, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_6set_variations(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_variations);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_6set_variations(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_variations) {
  unsigned int __pyx_v_size;
  hb_variation_t *__pyx_v_hb_variations;
  PyObject *__pyx_v_packed = 0;
  hb_variation_t __pyx_v_variation;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_v_value = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  size_t __pyx_t_10;
  char const *__pyx_t_11;
  float __pyx_t_12;
  Py_ssize_t __pyx_t_13;
  char const *__pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_variations", 0);

  /* "src/uharfbuzz/_font.pxi":272
 *         cdef bytes packed
 *         cdef hb_variation_t variation
 *         size = len(variations)             # <<<<<<<<<<<<<<
 *         hb_variations = <hb_variation_t*>malloc(size * sizeof(hb_variation_t))
 *         if not hb_variations:
*/
  __pyx_t_1 = PyDict_Size(__pyx_v_variations); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(3, 272, __pyx_L1_error)
  __pyx_v_size = __pyx_t_1;

  /* "src/uharfbuzz/_font.pxi":273
 *         cdef hb_variation_t variation
 *         size = len(variations)
 *         hb_variations = <hb_variation_t*>malloc(size * sizeof(hb_variation_t))             # <<<<<<<<<<<<<<
 *         if not hb_variations:
 *             raise MemoryError()
*/
  __pyx_v_hb_variations = ((hb_variation_t *)malloc((__pyx_v_size * (sizeof(hb_variation_t)))));

  /* "src/uharfbuzz/_font.pxi":274
 *         size = len(variations)
 *         hb_variations = <hb_variation_t*>malloc(size * sizeof(hb_variation_t))
 *         if not hb_variations:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_2 = (!(__pyx_v_hb_variations != 0));
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_font.pxi":275
 *         hb_variations = <hb_variation_t*>malloc(size * sizeof(hb_variation_t))
 *         if not hb_variations:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *         try:
*/
    PyErr_NoMemory(); __PYX_ERR(3, 275, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":274
 *         size = len(variations)
 *         hb_variations = <hb_variation_t*>malloc(size * sizeof(hb_variation_t))
 *         if not hb_variations:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_font.pxi":277
 *             raise MemoryError()
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             for i, (name, value) in enumerate(variations.items()):
 *                 packed = name.encode()
*/
  /*try:*/ {

    /* "src/uharfbuzz/_font.pxi":278
 * 
 *         try:
 *             for i, (name, value) in enumerate(variations.items()):             # <<<<<<<<<<<<<<
 *                 packed = name.encode()
 *                 variation.tag = hb_tag_from_string(packed, -1)
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
    __pyx_t_3 = __pyx_mstate_global->__pyx_int_0;
    __pyx_t_1 = 0;
    __pyx_t_7 = __Pyx_dict_iterator(__pyx_v_variations, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_5), (&__pyx_t_6)); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 278, __pyx_L5_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_XDECREF(__pyx_t_4);
    __pyx_t_4 = __pyx_t_7;
    __pyx_t_7 = 0;
    while (1) {
      __pyx_t_9 = __Pyx_dict_iter_next(__pyx_t_4, __pyx_t_5, &__pyx_t_1, &__pyx_t_7, &__pyx_t_8, NULL, __pyx_t_6);
      if (unlikely(__pyx_t_9 == 0)) break;
      if (unlikely(__pyx_t_9 == -1)) __PYX_ERR(3, 278, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_8);
      __pyx_t_8 = 0;
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_3);
      __pyx_t_8 = __Pyx_PyLong_AddObjC(__pyx_t_3, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 278, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3);
      __pyx_t_3 = __pyx_t_8;
      __pyx_t_8 = 0;

      /* "src/uharfbuzz/_font.pxi":279
 *         try:
 *             for i, (name, value) in enumerate(variations.items()):
 *                 packed = name.encode()             # <<<<<<<<<<<<<<
 *                 variation.tag = hb_tag_from_string(packed, -1)
 *                 variation.value = value
*/
      __pyx_t_7 = __pyx_v_name;
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_10 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, NULL};
        __pyx_t_8 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 279, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      if (!(likely(PyBytes_CheckExact(__pyx_t_8))||((__pyx_t_8) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_8))) __PYX_ERR(3, 279, __pyx_L5_error)
      __Pyx_XDECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_8));
      __pyx_t_8 = 0;

      /* "src/uharfbuzz/_font.pxi":280
 *             for i, (name, value) in enumerate(variations.items()):
 *                 packed = name.encode()
 *                 variation.tag = hb_tag_from_string(packed, -1)             # <<<<<<<<<<<<<<
 *                 variation.value = value
 *                 hb_variations[i] = variation
*/
      if (unlikely(__pyx_v_packed == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
        __PYX_ERR(3, 280, __pyx_L5_error)
      }
      __pyx_t_11 = __Pyx_PyBytes_AsString(__pyx_v_packed); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(3, 280, __pyx_L5_error)
      __pyx_v_variation.tag = hb_tag_from_string(__pyx_t_11, -1);

      /* "src/uharfbuzz/_font.pxi":281
 *                 packed = name.encode()
 *                 variation.tag = hb_tag_from_string(packed, -1)
 *                 variation.value = value             # <<<<<<<<<<<<<<
 *                 hb_variations[i] = variation
 *             hb_font_set_variations(self._hb_font, hb_variations, size)
*/
      __pyx_t_12 = __Pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_12 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 281, __pyx_L5_error)
      __pyx_v_variation.value = __pyx_t_12;

      /* "src/uharfbuzz/_font.pxi":282
 *                 variation.tag = hb_tag_from_string(packed, -1)
 *                 variation.value = value
 *                 hb_variations[i] = variation             # <<<<<<<<<<<<<<
 *             hb_font_set_variations(self._hb_font, hb_variations, size)
 *         finally:
*/
      __pyx_t_13 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_13 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(3, 282, __pyx_L5_error)
      (__pyx_v_hb_variations[__pyx_t_13]) = __pyx_v_variation;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "src/uharfbuzz/_font.pxi":283
 *                 variation.value = value
 *                 hb_variations[i] = variation
 *             hb_font_set_variations(self._hb_font, hb_variations, size)             # <<<<<<<<<<<<<<
 *         finally:
 *             free(hb_variations)
*/
    hb_font_set_variations(__pyx_v_self->_hb_font, __pyx_v_hb_variations, __pyx_v_size);
  }

  /* "src/uharfbuzz/_font.pxi":285
 *             hb_font_set_variations(self._hb_font, hb_variations, size)
 *         finally:
 *             free(hb_variations)             # <<<<<<<<<<<<<<
 * 
 *     def set_variation(self, name: str, value: float):
*/
  /*finally:*/ {
    /*normal exit:*/{
      free(__pyx_v_hb_variations);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __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_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_18, &__pyx_t_19, &__pyx_t_20);
      if ( unlikely(__Pyx_GetException(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17) < 0)) __Pyx_ErrFetch(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __Pyx_XGOTREF(__pyx_t_20);
      __pyx_t_6 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_14 = __pyx_filename;
      {
        free(__pyx_v_hb_variations);
      }
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_20);
      __Pyx_ExceptionReset(__pyx_t_18, __pyx_t_19, __pyx_t_20);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_ErrRestore(__pyx_t_15, __pyx_t_16, __pyx_t_17);
      __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_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_14;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "src/uharfbuzz/_font.pxi":267
 *         hb_font_set_var_named_instance(self._hb_font, value)
 * 
 *     def set_variations(self, variations: Dict[str, float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int size
 *         cdef hb_variation_t* hb_variations
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_variations", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":287
 *             free(hb_variations)
 * 
 *     def set_variation(self, name: str, value: float):             # <<<<<<<<<<<<<<
 *         packed = name.encode()
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_9set_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_9set_variation = {"set_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_9set_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_9set_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  double __pyx_v_value;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_variation (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name_2,&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 287, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 287, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 287, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_variation", 0) < (0)) __PYX_ERR(3, 287, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_variation", 1, 2, 2, i); __PYX_ERR(3, 287, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 287, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 287, __pyx_L3_error)
    }
    __pyx_v_name = ((PyObject*)values[0]);
    __pyx_v_value = __Pyx_PyFloat_AsDouble(values[1]); if (unlikely((__pyx_v_value == (double)-1) && PyErr_Occurred())) __PYX_ERR(3, 287, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_variation", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 287, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 0, "name", 2))) __PYX_ERR(3, 287, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_8set_variation(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_name, __pyx_v_value);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_8set_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_name, double __pyx_v_value) {
  PyObject *__pyx_v_packed = NULL;
  hb_tag_t __pyx_v_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char const *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_variation", 0);

  /* "src/uharfbuzz/_font.pxi":288
 * 
 *     def set_variation(self, name: str, value: float):
 *         packed = name.encode()             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)
 *         hb_font_set_variation(self._hb_font, tag, value)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_name, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 288, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":289
 *     def set_variation(self, name: str, value: float):
 *         packed = name.encode()
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)             # <<<<<<<<<<<<<<
 *         hb_font_set_variation(self._hb_font, tag, value)
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 289, __pyx_L1_error)
  __pyx_v_tag = hb_tag_from_string(__pyx_t_2, -1);

  /* "src/uharfbuzz/_font.pxi":290
 *         packed = name.encode()
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)
 *         hb_font_set_variation(self._hb_font, tag, value)             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_name(self, gid: int) -> str | None:
*/
  hb_font_set_variation(__pyx_v_self->_hb_font, __pyx_v_tag, __pyx_v_value);

  /* "src/uharfbuzz/_font.pxi":287
 *             free(hb_variations)
 * 
 *     def set_variation(self, name: str, value: float):             # <<<<<<<<<<<<<<
 *         packed = name.encode()
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":292
 *         hb_font_set_variation(self._hb_font, tag, value)
 * 
 *     def get_glyph_name(self, gid: int) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name = {"get_glyph_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_name (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 292, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 292, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_name", 0) < (0)) __PYX_ERR(3, 292, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_name", 1, 1, 1, i); __PYX_ERR(3, 292, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 292, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 292, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_name", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 292, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 292, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_10get_glyph_name(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_10get_glyph_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  char __pyx_v_name[64];
  PyObject *__pyx_v_packed = 0;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_name", 0);

  /* "src/uharfbuzz/_font.pxi":295
 *         cdef char name[64]
 *         cdef bytes packed
 *         success = hb_font_get_glyph_name(self._hb_font, gid, name, 64)             # <<<<<<<<<<<<<<
 *         if success:
 *             packed = name
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 295, __pyx_L1_error)
  __pyx_v_success = hb_font_get_glyph_name(__pyx_v_self->_hb_font, __pyx_t_1, __pyx_v_name, 64);

  /* "src/uharfbuzz/_font.pxi":296
 *         cdef bytes packed
 *         success = hb_font_get_glyph_name(self._hb_font, gid, name, 64)
 *         if success:             # <<<<<<<<<<<<<<
 *             packed = name
 *             return packed.decode()
*/
  __pyx_t_2 = (__pyx_v_success != 0);
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_font.pxi":297
 *         success = hb_font_get_glyph_name(self._hb_font, gid, name, 64)
 *         if success:
 *             packed = name             # <<<<<<<<<<<<<<
 *             return packed.decode()
 *         else:
*/
    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_packed = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "src/uharfbuzz/_font.pxi":298
 *         if success:
 *             packed = name
 *             return packed.decode()             # <<<<<<<<<<<<<<
 *         else:
 *             return None
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":296
 *         cdef bytes packed
 *         success = hb_font_get_glyph_name(self._hb_font, gid, name, 64)
 *         if success:             # <<<<<<<<<<<<<<
 *             packed = name
 *             return packed.decode()
*/
  }

  /* "src/uharfbuzz/_font.pxi":300
 *             return packed.decode()
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_from_name(self, name: str) -> int | None:
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "src/uharfbuzz/_font.pxi":292
 *         hb_font_set_variation(self._hb_font, tag, value)
 * 
 *     def get_glyph_name(self, gid: int) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":302
 *             return None
 * 
 *     def get_glyph_from_name(self, name: str) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name = {"get_glyph_from_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_name = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_from_name (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_name_2,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 302, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 302, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_from_name", 0) < (0)) __PYX_ERR(3, 302, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_from_name", 1, 1, 1, i); __PYX_ERR(3, 302, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 302, __pyx_L3_error)
    }
    __pyx_v_name = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_from_name", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 302, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_from_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_name), (&PyUnicode_Type), 0, "name", 2))) __PYX_ERR(3, 302, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_12get_glyph_from_name(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_name);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_12get_glyph_from_name(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_name) {
  hb_codepoint_t __pyx_v_gid;
  PyObject *__pyx_v_packed = 0;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_from_name", 0);

  /* "src/uharfbuzz/_font.pxi":305
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
 *         packed = name.encode()             # <<<<<<<<<<<<<<
 *         success = hb_font_get_glyph_from_name(self._hb_font, <char*>packed, len(packed), &gid)
 *         return gid if success else None
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_name, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":306
 *         cdef bytes packed
 *         packed = name.encode()
 *         success = hb_font_get_glyph_from_name(self._hb_font, <char*>packed, len(packed), &gid)             # <<<<<<<<<<<<<<
 *         return gid if success else None
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 306, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBytes_GET_SIZE(__pyx_v_packed); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(3, 306, __pyx_L1_error)
  __pyx_v_success = hb_font_get_glyph_from_name(__pyx_v_self->_hb_font, ((char *)__pyx_t_2), __pyx_t_3, (&__pyx_v_gid));

  /* "src/uharfbuzz/_font.pxi":307
 *         packed = name.encode()
 *         success = hb_font_get_glyph_from_name(self._hb_font, <char*>packed, len(packed), &gid)
 *         return gid if success else None             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_extents(self, gid: int) -> GlyphExtents:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = (__pyx_v_success != 0);
  if (__pyx_t_4) {
    __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_gid); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_5, NULL, 0) < (0)) __PYX_ERR(3, 307, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(3, 307, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":302
 *             return None
 * 
 *     def get_glyph_from_name(self, name: str) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_from_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":309
 *         return gid if success else None
 * 
 *     def get_glyph_extents(self, gid: int) -> GlyphExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents = {"get_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_extents (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 309, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 309, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_extents", 0) < (0)) __PYX_ERR(3, 309, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_extents", 1, 1, 1, i); __PYX_ERR(3, 309, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 309, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 309, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_extents", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 309, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 309, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14get_glyph_extents(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_14get_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  hb_glyph_extents_t __pyx_v_extents;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_extents", 0);

  /* "src/uharfbuzz/_font.pxi":311
 *     def get_glyph_extents(self, gid: int) -> GlyphExtents:
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)             # <<<<<<<<<<<<<<
 *         if success:
 *             return GlyphExtents(
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 311, __pyx_L1_error)
  __pyx_v_success = hb_font_get_glyph_extents(__pyx_v_self->_hb_font, __pyx_t_1, (&__pyx_v_extents));

  /* "src/uharfbuzz/_font.pxi":312
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
 *         if success:             # <<<<<<<<<<<<<<
 *             return GlyphExtents(
 *                 extents.x_bearing,
*/
  __pyx_t_2 = (__pyx_v_success != 0);
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_font.pxi":313
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
 *         if success:
 *             return GlyphExtents(             # <<<<<<<<<<<<<<
 *                 extents.x_bearing,
 *                 extents.y_bearing,
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_GlyphExtents); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);

    /* "src/uharfbuzz/_font.pxi":314
 *         if success:
 *             return GlyphExtents(
 *                 extents.x_bearing,             # <<<<<<<<<<<<<<
 *                 extents.y_bearing,
 *                 extents.width,
*/
    __pyx_t_6 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.x_bearing); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 314, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);

    /* "src/uharfbuzz/_font.pxi":315
 *             return GlyphExtents(
 *                 extents.x_bearing,
 *                 extents.y_bearing,             # <<<<<<<<<<<<<<
 *                 extents.width,
 *                 extents.height,
*/
    __pyx_t_7 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.y_bearing); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 315, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);

    /* "src/uharfbuzz/_font.pxi":316
 *                 extents.x_bearing,
 *                 extents.y_bearing,
 *                 extents.width,             # <<<<<<<<<<<<<<
 *                 extents.height,
 *             )
*/
    __pyx_t_8 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.width); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 316, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    /* "src/uharfbuzz/_font.pxi":317
 *                 extents.y_bearing,
 *                 extents.width,
 *                 extents.height,             # <<<<<<<<<<<<<<
 *             )
 *         else:
*/
    __pyx_t_9 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.height); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 317, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      assert(__pyx_t_4);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[5] = {__pyx_t_4, __pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (5-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 313, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":312
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
 *         if success:             # <<<<<<<<<<<<<<
 *             return GlyphExtents(
 *                 extents.x_bearing,
*/
  }

  /* "src/uharfbuzz/_font.pxi":320
 *             )
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_h_advance(self, gid: int) -> int:
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "src/uharfbuzz/_font.pxi":309
 *         return gid if success else None
 * 
 *     def get_glyph_extents(self, gid: int) -> GlyphExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
*/

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":322
 *             return None
 * 
 *     def get_glyph_h_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance = {"get_glyph_h_advance", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_h_advance (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 322, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 322, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_h_advance", 0) < (0)) __PYX_ERR(3, 322, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_h_advance", 1, 1, 1, i); __PYX_ERR(3, 322, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 322, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 322, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_h_advance", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 322, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_h_advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 322, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_16get_glyph_h_advance(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_16get_glyph_h_advance(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_h_advance", 0);

  /* "src/uharfbuzz/_font.pxi":323
 * 
 *     def get_glyph_h_advance(self, gid: int) -> int:
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_v_advance(self, gid: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 323, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_font_get_glyph_h_advance(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 323, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":322
 *             return None
 * 
 *     def get_glyph_h_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_h_advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":325
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
 *     def get_glyph_v_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance = {"get_glyph_v_advance", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_v_advance (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 325, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 325, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_v_advance", 0) < (0)) __PYX_ERR(3, 325, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_v_advance", 1, 1, 1, i); __PYX_ERR(3, 325, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 325, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 325, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_v_advance", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 325, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_v_advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 325, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18get_glyph_v_advance(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_18get_glyph_v_advance(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_v_advance", 0);

  /* "src/uharfbuzz/_font.pxi":326
 * 
 *     def get_glyph_v_advance(self, gid: int) -> int:
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_h_origin(self, gid: int) -> Tuple[int, int] | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 326, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_font_get_glyph_v_advance(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 326, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":325
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
 *     def get_glyph_v_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_v_advance", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":328
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
 *     def get_glyph_h_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_h_origin(self._hb_font, gid, &x, &y)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin = {"get_glyph_h_origin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_h_origin (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 328, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 328, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_h_origin", 0) < (0)) __PYX_ERR(3, 328, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_h_origin", 1, 1, 1, i); __PYX_ERR(3, 328, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 328, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 328, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_h_origin", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 328, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_h_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 328, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_20get_glyph_h_origin(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_20get_glyph_h_origin(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  hb_position_t __pyx_v_x;
  hb_position_t __pyx_v_y;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_h_origin", 0);

  /* "src/uharfbuzz/_font.pxi":330
 *     def get_glyph_h_origin(self, gid: int) -> Tuple[int, int] | None:
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_h_origin(self._hb_font, gid, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y) if success else None
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 330, __pyx_L1_error)
  __pyx_v_success = hb_font_get_glyph_h_origin(__pyx_v_self->_hb_font, __pyx_t_1, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_font.pxi":331
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_h_origin(self._hb_font, gid, &x, &y)
 *         return (x, y) if success else None             # <<<<<<<<<<<<<<
 * 
 *     def get_glyph_v_origin(self, gid: int) -> Tuple[int, int] | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_success != 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __Pyx_PyLong_From_hb_position_t(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyLong_From_hb_position_t(__pyx_v_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 331, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 331, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_5);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 331, __pyx_L1_error);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_2))) __PYX_ERR(3, 331, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":328
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
 *     def get_glyph_h_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_h_origin(self._hb_font, gid, &x, &y)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_h_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":333
 *         return (x, y) if success else None
 * 
 *     def get_glyph_v_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_v_origin(self._hb_font, gid, &x, &y)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin = {"get_glyph_v_origin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_v_origin (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 333, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 333, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_v_origin", 0) < (0)) __PYX_ERR(3, 333, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_v_origin", 1, 1, 1, i); __PYX_ERR(3, 333, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 333, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 333, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_v_origin", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 333, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_v_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 333, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_22get_glyph_v_origin(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_22get_glyph_v_origin(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  hb_position_t __pyx_v_x;
  hb_position_t __pyx_v_y;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_v_origin", 0);

  /* "src/uharfbuzz/_font.pxi":335
 *     def get_glyph_v_origin(self, gid: int) -> Tuple[int, int] | None:
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_v_origin(self._hb_font, gid, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y) if success else None
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 335, __pyx_L1_error)
  __pyx_v_success = hb_font_get_glyph_v_origin(__pyx_v_self->_hb_font, __pyx_t_1, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_font.pxi":336
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_v_origin(self._hb_font, gid, &x, &y)
 *         return (x, y) if success else None             # <<<<<<<<<<<<<<
 * 
 *     def get_font_extents(self, direction: str) -> FontExtents:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_success != 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __Pyx_PyLong_From_hb_position_t(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyLong_From_hb_position_t(__pyx_v_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 336, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_5);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 336, __pyx_L1_error);
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_2 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  if (!(likely(PyTuple_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_2))) __PYX_ERR(3, 336, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":333
 *         return (x, y) if success else None
 * 
 *     def get_glyph_v_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_v_origin(self._hb_font, gid, &x, &y)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_v_origin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":338
 *         return (x, y) if success else None
 * 
 *     def get_font_extents(self, direction: str) -> FontExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_font_extents_t extents
 *         cdef hb_direction_t hb_direction
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents = {"get_font_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_font_extents (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 338, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 338, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_font_extents", 0) < (0)) __PYX_ERR(3, 338, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_font_extents", 1, 1, 1, i); __PYX_ERR(3, 338, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 338, __pyx_L3_error)
    }
    __pyx_v_direction = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_font_extents", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 338, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_font_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(3, 338, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_24get_font_extents(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_24get_font_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_direction) {
  hb_font_extents_t __pyx_v_extents;
  hb_direction_t __pyx_v_hb_direction;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_font_extents", 0);

  /* "src/uharfbuzz/_font.pxi":342
 *         cdef hb_direction_t hb_direction
 *         cdef bytes packed
 *         packed = direction.encode()             # <<<<<<<<<<<<<<
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
 *         hb_font_get_extents_for_direction(
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_direction, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":343
 *         cdef bytes packed
 *         packed = direction.encode()
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         hb_font_get_extents_for_direction(
 *             self._hb_font, hb_direction, &extents
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 343, __pyx_L1_error)
  __pyx_v_hb_direction = hb_direction_from_string(((char *)__pyx_t_2), -1);

  /* "src/uharfbuzz/_font.pxi":344
 *         packed = direction.encode()
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
 *         hb_font_get_extents_for_direction(             # <<<<<<<<<<<<<<
 *             self._hb_font, hb_direction, &extents
 *         )
*/
  hb_font_get_extents_for_direction(__pyx_v_self->_hb_font, __pyx_v_hb_direction, (&__pyx_v_extents));

  /* "src/uharfbuzz/_font.pxi":347
 *             self._hb_font, hb_direction, &extents
 *         )
 *         return FontExtents(             # <<<<<<<<<<<<<<
 *             extents.ascender,
 *             extents.descender,
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FontExtents); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "src/uharfbuzz/_font.pxi":348
 *         )
 *         return FontExtents(
 *             extents.ascender,             # <<<<<<<<<<<<<<
 *             extents.descender,
 *             extents.line_gap
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.ascender); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "src/uharfbuzz/_font.pxi":349
 *         return FontExtents(
 *             extents.ascender,
 *             extents.descender,             # <<<<<<<<<<<<<<
 *             extents.line_gap
 *         )
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.descender); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "src/uharfbuzz/_font.pxi":350
 *             extents.ascender,
 *             extents.descender,
 *             extents.line_gap             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_position_t(__pyx_v_extents.line_gap); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_3, __pyx_t_5, __pyx_t_6, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (4-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __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_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 347, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":338
 *         return (x, y) if success else None
 * 
 *     def get_font_extents(self, direction: str) -> FontExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_font_extents_t extents
 *         cdef hb_direction_t hb_direction
*/

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_font_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":353
 *         )
 * 
 *     def get_variation_glyph(self, unicode: int, variation_selector: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_variation_glyph(self._hb_font, unicode, variation_selector, &gid)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph = {"get_variation_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_unicode = 0;
  PyObject *__pyx_v_variation_selector = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_variation_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_unicode,&__pyx_mstate_global->__pyx_n_u_variation_selector,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 353, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 353, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 353, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_variation_glyph", 0) < (0)) __PYX_ERR(3, 353, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_variation_glyph", 1, 2, 2, i); __PYX_ERR(3, 353, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 353, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 353, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "unicode", 0) < (0)) __PYX_ERR(3, 353, __pyx_L3_error)
    __pyx_v_unicode = ((PyObject*)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "variation_selector", 0) < (0)) __PYX_ERR(3, 353, __pyx_L3_error)
    __pyx_v_variation_selector = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_variation_glyph", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 353, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_variation_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_unicode), (&PyLong_Type), 0, "unicode", 2))) __PYX_ERR(3, 353, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_variation_selector), (&PyLong_Type), 0, "variation_selector", 2))) __PYX_ERR(3, 353, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_26get_variation_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_unicode, __pyx_v_variation_selector);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_26get_variation_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_unicode, PyObject *__pyx_v_variation_selector) {
  hb_codepoint_t __pyx_v_gid;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  hb_codepoint_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_variation_glyph", 0);

  /* "src/uharfbuzz/_font.pxi":355
 *     def get_variation_glyph(self, unicode: int, variation_selector: int) -> int | None:
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_variation_glyph(self._hb_font, unicode, variation_selector, &gid)             # <<<<<<<<<<<<<<
 *         return gid if success else None
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_unicode); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 355, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_variation_selector); if (unlikely((__pyx_t_2 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 355, __pyx_L1_error)
  __pyx_v_success = hb_font_get_variation_glyph(__pyx_v_self->_hb_font, __pyx_t_1, __pyx_t_2, (&__pyx_v_gid));

  /* "src/uharfbuzz/_font.pxi":356
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_variation_glyph(self._hb_font, unicode, variation_selector, &gid)
 *         return gid if success else None             # <<<<<<<<<<<<<<
 * 
 *     def get_nominal_glyph(self, unicode: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = (__pyx_v_success != 0);
  if (__pyx_t_4) {
    __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_gid); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 356, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_5, NULL, 0) < (0)) __PYX_ERR(3, 356, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_3 = Py_None;
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 1) < (0)) __PYX_ERR(3, 356, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":353
 *         )
 * 
 *     def get_variation_glyph(self, unicode: int, variation_selector: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_variation_glyph(self._hb_font, unicode, variation_selector, &gid)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_variation_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":358
 *         return gid if success else None
 * 
 *     def get_nominal_glyph(self, unicode: int) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_nominal_glyph(self._hb_font, unicode, &gid)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph = {"get_nominal_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_unicode = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_nominal_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_unicode,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 358, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 358, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_nominal_glyph", 0) < (0)) __PYX_ERR(3, 358, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_nominal_glyph", 1, 1, 1, i); __PYX_ERR(3, 358, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 358, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "unicode", 0) < (0)) __PYX_ERR(3, 358, __pyx_L3_error)
    __pyx_v_unicode = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_nominal_glyph", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 358, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_nominal_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_unicode), (&PyLong_Type), 0, "unicode", 2))) __PYX_ERR(3, 358, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_28get_nominal_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_unicode);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_28get_nominal_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_unicode) {
  hb_codepoint_t __pyx_v_gid;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_nominal_glyph", 0);

  /* "src/uharfbuzz/_font.pxi":360
 *     def get_nominal_glyph(self, unicode: int) -> int:
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_nominal_glyph(self._hb_font, unicode, &gid)             # <<<<<<<<<<<<<<
 *         return gid if success else None
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_unicode); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 360, __pyx_L1_error)
  __pyx_v_success = hb_font_get_nominal_glyph(__pyx_v_self->_hb_font, __pyx_t_1, (&__pyx_v_gid));

  /* "src/uharfbuzz/_font.pxi":361
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_nominal_glyph(self._hb_font, unicode, &gid)
 *         return gid if success else None             # <<<<<<<<<<<<<<
 * 
 *     def get_var_coords_normalized(self) -> List[float]:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (__pyx_v_success != 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_gid); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(3, 361, __pyx_L1_error)
    __pyx_t_2 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 1) < (0)) __PYX_ERR(3, 361, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":358
 *         return gid if success else None
 * 
 *     def get_nominal_glyph(self, unicode: int) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_nominal_glyph(self._hb_font, unicode, &gid)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_nominal_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":363
 *         return gid if success else None
 * 
 *     def get_var_coords_normalized(self) -> List[float]:             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const int *coords
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized = {"get_var_coords_normalized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_var_coords_normalized (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("get_var_coords_normalized", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("get_var_coords_normalized", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_30get_var_coords_normalized(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_30get_var_coords_normalized(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  unsigned int __pyx_v_length;
  int const *__pyx_v_coords;
  unsigned int __pyx_8genexpr5__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_var_coords_normalized", 0);

  /* "src/uharfbuzz/_font.pxi":366
 *         cdef unsigned int length
 *         cdef const int *coords
 *         coords = hb_font_get_var_coords_normalized(self._hb_font, &length)             # <<<<<<<<<<<<<<
 *         # Convert from 2.14 fixed to float: divide by 1 << 14
 *         return [coords[i] / 0x4000 for i in range(length)]
*/
  __pyx_v_coords = hb_font_get_var_coords_normalized(__pyx_v_self->_hb_font, (&__pyx_v_length));

  /* "src/uharfbuzz/_font.pxi":368
 *         coords = hb_font_get_var_coords_normalized(self._hb_font, &length)
 *         # Convert from 2.14 fixed to float: divide by 1 << 14
 *         return [coords[i] / 0x4000 for i in range(length)]             # <<<<<<<<<<<<<<
 * 
 *     def set_var_coords_normalized(self, coords: List[float]):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 368, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_length;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_8genexpr5__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = PyFloat_FromDouble((((double)(__pyx_v_coords[__pyx_8genexpr5__pyx_v_i])) / 16384.0)); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 368, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(3, 368, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":363
 *         return gid if success else None
 * 
 *     def get_var_coords_normalized(self) -> List[float]:             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const int *coords
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_var_coords_normalized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":370
 *         return [coords[i] / 0x4000 for i in range(length)]
 * 
 *     def set_var_coords_normalized(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef int *coords_2dot14
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized = {"set_var_coords_normalized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_coords = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_var_coords_normalized (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_coords,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 370, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 370, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_var_coords_normalized", 0) < (0)) __PYX_ERR(3, 370, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_var_coords_normalized", 1, 1, 1, i); __PYX_ERR(3, 370, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 370, __pyx_L3_error)
    }
    __pyx_v_coords = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_var_coords_normalized", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 370, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_var_coords_normalized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coords), (&PyList_Type), 0, "coords", 2))) __PYX_ERR(3, 370, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_32set_var_coords_normalized(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_coords);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_32set_var_coords_normalized(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_coords) {
  unsigned int __pyx_v_length;
  int *__pyx_v_coords_2dot14;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  char const *__pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_var_coords_normalized", 0);

  /* "src/uharfbuzz/_font.pxi":373
 *         cdef unsigned int length
 *         cdef int *coords_2dot14
 *         length = len(coords)             # <<<<<<<<<<<<<<
 *         coords_2dot14 = <int *>malloc(length * sizeof(int))
 *         if coords_2dot14 is NULL:
*/
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_coords); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(3, 373, __pyx_L1_error)
  __pyx_v_length = __pyx_t_1;

  /* "src/uharfbuzz/_font.pxi":374
 *         cdef int *coords_2dot14
 *         length = len(coords)
 *         coords_2dot14 = <int *>malloc(length * sizeof(int))             # <<<<<<<<<<<<<<
 *         if coords_2dot14 is NULL:
 *             raise MemoryError()
*/
  __pyx_v_coords_2dot14 = ((int *)malloc((__pyx_v_length * (sizeof(int)))));

  /* "src/uharfbuzz/_font.pxi":375
 *         length = len(coords)
 *         coords_2dot14 = <int *>malloc(length * sizeof(int))
 *         if coords_2dot14 is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  __pyx_t_2 = (__pyx_v_coords_2dot14 == NULL);
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_font.pxi":376
 *         coords_2dot14 = <int *>malloc(length * sizeof(int))
 *         if coords_2dot14 is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         try:
 *             for i in range(length):
*/
    PyErr_NoMemory(); __PYX_ERR(3, 376, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":375
 *         length = len(coords)
 *         coords_2dot14 = <int *>malloc(length * sizeof(int))
 *         if coords_2dot14 is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  }

  /* "src/uharfbuzz/_font.pxi":377
 *         if coords_2dot14 is NULL:
 *             raise MemoryError()
 *         try:             # <<<<<<<<<<<<<<
 *             for i in range(length):
 *                 # Convert from float to 2.14 fixed: multiply by 1 << 14
*/
  /*try:*/ {

    /* "src/uharfbuzz/_font.pxi":378
 *             raise MemoryError()
 *         try:
 *             for i in range(length):             # <<<<<<<<<<<<<<
 *                 # Convert from float to 2.14 fixed: multiply by 1 << 14
 *                 coords_2dot14[i] = round(coords[i] * 0x4000)
*/
    __pyx_t_3 = __pyx_v_length;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "src/uharfbuzz/_font.pxi":380
 *             for i in range(length):
 *                 # Convert from float to 2.14 fixed: multiply by 1 << 14
 *                 coords_2dot14[i] = round(coords[i] * 0x4000)             # <<<<<<<<<<<<<<
 *             hb_font_set_var_coords_normalized(self._hb_font, coords_2dot14, length)
 *         finally:
*/
      __pyx_t_7 = NULL;
      __pyx_t_8 = __Pyx_GetItemInt_List(__pyx_v_coords, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 380, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyLong_MultiplyObjC(__pyx_t_8, __pyx_mstate_global->__pyx_int_16384, 0x4000, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 380, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_9};
        __pyx_t_6 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_round, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 380, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_6);
      }
      __pyx_t_11 = __Pyx_PyLong_As_int(__pyx_t_6); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(3, 380, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      (__pyx_v_coords_2dot14[__pyx_v_i]) = __pyx_t_11;
    }

    /* "src/uharfbuzz/_font.pxi":381
 *                 # Convert from float to 2.14 fixed: multiply by 1 << 14
 *                 coords_2dot14[i] = round(coords[i] * 0x4000)
 *             hb_font_set_var_coords_normalized(self._hb_font, coords_2dot14, length)             # <<<<<<<<<<<<<<
 *         finally:
 *             free(coords_2dot14)
*/
    hb_font_set_var_coords_normalized(__pyx_v_self->_hb_font, __pyx_v_coords_2dot14, __pyx_v_length);
  }

  /* "src/uharfbuzz/_font.pxi":383
 *             hb_font_set_var_coords_normalized(self._hb_font, coords_2dot14, length)
 *         finally:
 *             free(coords_2dot14)             # <<<<<<<<<<<<<<
 * 
 *     def get_var_coords_design(self):
*/
  /*finally:*/ {
    /*normal exit:*/{
      free(__pyx_v_coords_2dot14);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __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_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_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ( unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        free(__pyx_v_coords_2dot14);
      }
      __Pyx_XGIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_18);
      __Pyx_XGIVEREF(__pyx_t_19);
      __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __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_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "src/uharfbuzz/_font.pxi":370
 *         return [coords[i] / 0x4000 for i in range(length)]
 * 
 *     def set_var_coords_normalized(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef int *coords_2dot14
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_var_coords_normalized", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":385
 *             free(coords_2dot14)
 * 
 *     def get_var_coords_design(self):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const float *coords
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design = {"get_var_coords_design", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_var_coords_design (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("get_var_coords_design", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("get_var_coords_design", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_34get_var_coords_design(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_34get_var_coords_design(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  unsigned int __pyx_v_length;
  float const *__pyx_v_coords;
  unsigned int __pyx_8genexpr6__pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_var_coords_design", 0);

  /* "src/uharfbuzz/_font.pxi":388
 *         cdef unsigned int length
 *         cdef const float *coords
 *         coords = hb_font_get_var_coords_design(self._hb_font, &length)             # <<<<<<<<<<<<<<
 *         return [coords[i] for i in range(length)]
 * 
*/
  __pyx_v_coords = hb_font_get_var_coords_design(__pyx_v_self->_hb_font, (&__pyx_v_length));

  /* "src/uharfbuzz/_font.pxi":389
 *         cdef const float *coords
 *         coords = hb_font_get_var_coords_design(self._hb_font, &length)
 *         return [coords[i] for i in range(length)]             # <<<<<<<<<<<<<<
 * 
 *     def set_var_coords_design(self, coords: List[float]):
*/
  __Pyx_XDECREF(__pyx_r);
  { /* enter inner scope */
    __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_v_length;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_8genexpr6__pyx_v_i = __pyx_t_4;
      __pyx_t_5 = PyFloat_FromDouble((__pyx_v_coords[__pyx_8genexpr6__pyx_v_i])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 389, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(3, 389, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  } /* exit inner scope */
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":385
 *             free(coords_2dot14)
 * 
 *     def get_var_coords_design(self):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const float *coords
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_var_coords_design", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":391
 *         return [coords[i] for i in range(length)]
 * 
 *     def set_var_coords_design(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef cython.float *c_coords
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design = {"set_var_coords_design", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_coords = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_var_coords_design (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_coords,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 391, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 391, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_var_coords_design", 0) < (0)) __PYX_ERR(3, 391, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_var_coords_design", 1, 1, 1, i); __PYX_ERR(3, 391, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 391, __pyx_L3_error)
    }
    __pyx_v_coords = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_var_coords_design", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 391, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_var_coords_design", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coords), (&PyList_Type), 0, "coords", 2))) __PYX_ERR(3, 391, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_36set_var_coords_design(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_coords);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_36set_var_coords_design(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_coords) {
  unsigned int __pyx_v_length;
  float *__pyx_v_c_coords;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  float __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  char const *__pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_var_coords_design", 0);

  /* "src/uharfbuzz/_font.pxi":394
 *         cdef unsigned int length
 *         cdef cython.float *c_coords
 *         length = len(coords)             # <<<<<<<<<<<<<<
 *         c_coords = <cython.float*>malloc(length * sizeof(cython.float))
 *         if c_coords is NULL:
*/
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_coords); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(3, 394, __pyx_L1_error)
  __pyx_v_length = __pyx_t_1;

  /* "src/uharfbuzz/_font.pxi":395
 *         cdef cython.float *c_coords
 *         length = len(coords)
 *         c_coords = <cython.float*>malloc(length * sizeof(cython.float))             # <<<<<<<<<<<<<<
 *         if c_coords is NULL:
 *             raise MemoryError()
*/
  __pyx_v_c_coords = ((float *)malloc((__pyx_v_length * (sizeof(float)))));

  /* "src/uharfbuzz/_font.pxi":396
 *         length = len(coords)
 *         c_coords = <cython.float*>malloc(length * sizeof(cython.float))
 *         if c_coords is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  __pyx_t_2 = (__pyx_v_c_coords == NULL);
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_font.pxi":397
 *         c_coords = <cython.float*>malloc(length * sizeof(cython.float))
 *         if c_coords is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         try:
 *             for i in range(length):
*/
    PyErr_NoMemory(); __PYX_ERR(3, 397, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":396
 *         length = len(coords)
 *         c_coords = <cython.float*>malloc(length * sizeof(cython.float))
 *         if c_coords is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         try:
*/
  }

  /* "src/uharfbuzz/_font.pxi":398
 *         if c_coords is NULL:
 *             raise MemoryError()
 *         try:             # <<<<<<<<<<<<<<
 *             for i in range(length):
 *                 c_coords[i] = coords[i]
*/
  /*try:*/ {

    /* "src/uharfbuzz/_font.pxi":399
 *             raise MemoryError()
 *         try:
 *             for i in range(length):             # <<<<<<<<<<<<<<
 *                 c_coords[i] = coords[i]
 *             hb_font_set_var_coords_design(self._hb_font, c_coords, length)
*/
    __pyx_t_3 = __pyx_v_length;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "src/uharfbuzz/_font.pxi":400
 *         try:
 *             for i in range(length):
 *                 c_coords[i] = coords[i]             # <<<<<<<<<<<<<<
 *             hb_font_set_var_coords_design(self._hb_font, c_coords, length)
 *         finally:
*/
      __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_coords, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 400, __pyx_L5_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyFloat_AsFloat(__pyx_t_6); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(3, 400, __pyx_L5_error)
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      (__pyx_v_c_coords[__pyx_v_i]) = __pyx_t_7;
    }

    /* "src/uharfbuzz/_font.pxi":401
 *             for i in range(length):
 *                 c_coords[i] = coords[i]
 *             hb_font_set_var_coords_design(self._hb_font, c_coords, length)             # <<<<<<<<<<<<<<
 *         finally:
 *             free(c_coords)
*/
    hb_font_set_var_coords_design(__pyx_v_self->_hb_font, __pyx_v_c_coords, __pyx_v_length);
  }

  /* "src/uharfbuzz/_font.pxi":403
 *             hb_font_set_var_coords_design(self._hb_font, c_coords, length)
 *         finally:
 *             free(c_coords)             # <<<<<<<<<<<<<<
 * 
 *     def glyph_to_string(self, gid: int) -> str:
*/
  /*finally:*/ {
    /*normal exit:*/{
      free(__pyx_v_c_coords);
      goto __pyx_L6;
    }
    __pyx_L5_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ( unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        free(__pyx_v_c_coords);
      }
      __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);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __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_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_9; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
    }
    __pyx_L6:;
  }

  /* "src/uharfbuzz/_font.pxi":391
 *         return [coords[i] for i in range(length)]
 * 
 *     def set_var_coords_design(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef cython.float *c_coords
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.set_var_coords_design", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":405
 *             free(c_coords)
 * 
 *     def glyph_to_string(self, gid: int) -> str:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string = {"glyph_to_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("glyph_to_string (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 405, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 405, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "glyph_to_string", 0) < (0)) __PYX_ERR(3, 405, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("glyph_to_string", 1, 1, 1, i); __PYX_ERR(3, 405, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 405, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 405, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("glyph_to_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 405, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.glyph_to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 405, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_38glyph_to_string(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_38glyph_to_string(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid) {
  char __pyx_v_name[64];
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("glyph_to_string", 0);

  /* "src/uharfbuzz/_font.pxi":408
 *         cdef char name[64]
 *         cdef bytes packed
 *         hb_font_glyph_to_string(self._hb_font, gid, name, 64)             # <<<<<<<<<<<<<<
 *         packed = name
 *         return packed.decode()
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 408, __pyx_L1_error)
  hb_font_glyph_to_string(__pyx_v_self->_hb_font, __pyx_t_1, __pyx_v_name, 64);

  /* "src/uharfbuzz/_font.pxi":409
 *         cdef bytes packed
 *         hb_font_glyph_to_string(self._hb_font, gid, name, 64)
 *         packed = name             # <<<<<<<<<<<<<<
 *         return packed.decode()
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 409, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_packed = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":410
 *         hb_font_glyph_to_string(self._hb_font, gid, name, 64)
 *         packed = name
 *         return packed.decode()             # <<<<<<<<<<<<<<
 * 
 *     def glyph_from_string(self, string: str) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":405
 *             free(c_coords)
 * 
 *     def glyph_to_string(self, gid: int) -> str:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.glyph_to_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":412
 *         return packed.decode()
 * 
 *     def glyph_from_string(self, string: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string = {"glyph_from_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_string = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("glyph_from_string (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_string,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 412, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 412, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "glyph_from_string", 0) < (0)) __PYX_ERR(3, 412, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("glyph_from_string", 1, 1, 1, i); __PYX_ERR(3, 412, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 412, __pyx_L3_error)
    }
    __pyx_v_string = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("glyph_from_string", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 412, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.glyph_from_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_string), (&PyUnicode_Type), 0, "string", 2))) __PYX_ERR(3, 412, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_40glyph_from_string(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_string);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_40glyph_from_string(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_string) {
  hb_codepoint_t __pyx_v_gid;
  PyObject *__pyx_v_packed = 0;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("glyph_from_string", 0);

  /* "src/uharfbuzz/_font.pxi":415
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
 *         packed = string.encode()             # <<<<<<<<<<<<<<
 *         success = hb_font_glyph_from_string(self._hb_font, <char*>packed, len(packed), &gid)
 *         return gid if success else None
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_string, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 415, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":416
 *         cdef bytes packed
 *         packed = string.encode()
 *         success = hb_font_glyph_from_string(self._hb_font, <char*>packed, len(packed), &gid)             # <<<<<<<<<<<<<<
 *         return gid if success else None
 * 
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 416, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBytes_GET_SIZE(__pyx_v_packed); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(3, 416, __pyx_L1_error)
  __pyx_v_success = hb_font_glyph_from_string(__pyx_v_self->_hb_font, ((char *)__pyx_t_2), __pyx_t_3, (&__pyx_v_gid));

  /* "src/uharfbuzz/_font.pxi":417
 *         packed = string.encode()
 *         success = hb_font_glyph_from_string(self._hb_font, <char*>packed, len(packed), &gid)
 *         return gid if success else None             # <<<<<<<<<<<<<<
 * 
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = (__pyx_v_success != 0);
  if (__pyx_t_4) {
    __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_gid); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_5, NULL, 0) < (0)) __PYX_ERR(3, 417, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(3, 417, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":412
 *         return packed.decode()
 * 
 *     def glyph_from_string(self, string: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.glyph_from_string", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":419
 *         return gid if success else None
 * 
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):             # <<<<<<<<<<<<<<
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph = {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_draw_funcs = 0;
  PyObject *__pyx_v_draw_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,&__pyx_mstate_global->__pyx_n_u_draw_funcs,&__pyx_mstate_global->__pyx_n_u_draw_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 419, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 419, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 419, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 419, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "draw_glyph", 0) < (0)) __PYX_ERR(3, 419, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("draw_glyph", 0, 2, 3, i); __PYX_ERR(3, 419, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 419, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 419, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 419, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 419, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
    __pyx_v_draw_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)values[1]);
    __pyx_v_draw_state = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_glyph", 0, 2, 3, __pyx_nargs); __PYX_ERR(3, 419, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 419, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_draw_funcs), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, 0, "draw_funcs", 0))) __PYX_ERR(3, 419, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_42draw_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid, __pyx_v_draw_funcs, __pyx_v_draw_state);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_42draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *__pyx_v_draw_funcs, PyObject *__pyx_v_draw_state) {
  void *__pyx_v_draw_state_p;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  void *__pyx_t_2;
  hb_codepoint_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_glyph", 0);

  /* "src/uharfbuzz/_font.pxi":420
 * 
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):
 *         cdef void *draw_state_p = <void *>draw_state             # <<<<<<<<<<<<<<
 *         if PyCapsule_IsValid(draw_state, NULL):
 *             draw_state_p = <void *>PyCapsule_GetPointer(draw_state, NULL)
*/
  __pyx_v_draw_state_p = ((void *)__pyx_v_draw_state);

  /* "src/uharfbuzz/_font.pxi":421
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):             # <<<<<<<<<<<<<<
 *             draw_state_p = <void *>PyCapsule_GetPointer(draw_state, NULL)
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
*/
  __pyx_t_1 = PyCapsule_IsValid(__pyx_v_draw_state, NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":422
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):
 *             draw_state_p = <void *>PyCapsule_GetPointer(draw_state, NULL)             # <<<<<<<<<<<<<<
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
*/
    __pyx_t_2 = PyCapsule_GetPointer(__pyx_v_draw_state, NULL); if (unlikely(__pyx_t_2 == ((void *)NULL) && PyErr_Occurred())) __PYX_ERR(3, 422, __pyx_L1_error)
    __pyx_v_draw_state_p = ((void *)__pyx_t_2);

    /* "src/uharfbuzz/_font.pxi":421
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):             # <<<<<<<<<<<<<<
 *             draw_state_p = <void *>PyCapsule_GetPointer(draw_state, NULL)
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
*/
  }

  /* "src/uharfbuzz/_font.pxi":423
 *         if PyCapsule_IsValid(draw_state, NULL):
 *             draw_state_p = <void *>PyCapsule_GetPointer(draw_state, NULL)
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);             # <<<<<<<<<<<<<<
 * 
 *     def paint_glyph(self, gid: int,
*/
  __pyx_t_3 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_3 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 423, __pyx_L1_error)
  hb_font_draw_glyph(__pyx_v_self->_hb_font, __pyx_t_3, __pyx_v_draw_funcs->_hb_drawfuncs, __pyx_v_draw_state_p);

  /* "src/uharfbuzz/_font.pxi":419
 *         return gid if success else None
 * 
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):             # <<<<<<<<<<<<<<
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":425
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
 *     def paint_glyph(self, gid: int,             # <<<<<<<<<<<<<<
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph = {"paint_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_paint_funcs = 0;
  PyObject *__pyx_v_paint_state = 0;
  PyObject *__pyx_v_palette_index = 0;
  PyObject *__pyx_v_foreground = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("paint_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,&__pyx_mstate_global->__pyx_n_u_paint_funcs,&__pyx_mstate_global->__pyx_n_u_paint_state,&__pyx_mstate_global->__pyx_n_u_palette_index,&__pyx_mstate_global->__pyx_n_u_foreground,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 425, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "paint_glyph", 0) < (0)) __PYX_ERR(3, 425, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":427
 *     def paint_glyph(self, gid: int,
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,             # <<<<<<<<<<<<<<
 *                     palette_index: int = 0,
 *                     foreground: Color | None = None):
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));

      /* "src/uharfbuzz/_font.pxi":429
 *                     paint_state: object = None,
 *                     palette_index: int = 0,
 *                     foreground: Color | None = None):             # <<<<<<<<<<<<<<
 *         cdef void *paint_state_p = <void *>paint_state
 *         cdef hb_color_t c_foreground = 0x000000FF
*/
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("paint_glyph", 0, 2, 5, i); __PYX_ERR(3, 425, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 425, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 425, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 425, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "src/uharfbuzz/_font.pxi":427
 *     def paint_glyph(self, gid: int,
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,             # <<<<<<<<<<<<<<
 *                     palette_index: int = 0,
 *                     foreground: Color | None = None):
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)__pyx_mstate_global->__pyx_int_0));

      /* "src/uharfbuzz/_font.pxi":429
 *                     paint_state: object = None,
 *                     palette_index: int = 0,
 *                     foreground: Color | None = None):             # <<<<<<<<<<<<<<
 *         cdef void *paint_state_p = <void *>paint_state
 *         cdef hb_color_t c_foreground = 0x000000FF
*/
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 425, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
    __pyx_v_paint_funcs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)values[1]);
    __pyx_v_paint_state = values[2];
    if (__Pyx_PyInt_FromNumber(&values[3], "palette_index", 0) < (0)) __PYX_ERR(3, 428, __pyx_L3_error)
    __pyx_v_palette_index = ((PyObject*)values[3]);
    __pyx_v_foreground = values[4];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("paint_glyph", 0, 2, 5, __pyx_nargs); __PYX_ERR(3, 425, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.paint_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 425, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_paint_funcs), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, 0, "paint_funcs", 0))) __PYX_ERR(3, 426, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_palette_index), (&PyLong_Type), 0, "palette_index", 2))) __PYX_ERR(3, 428, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_44paint_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid, __pyx_v_paint_funcs, __pyx_v_paint_state, __pyx_v_palette_index, __pyx_v_foreground);

  /* "src/uharfbuzz/_font.pxi":425
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
 *     def paint_glyph(self, gid: int,             # <<<<<<<<<<<<<<
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,
*/

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_44paint_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *__pyx_v_paint_funcs, PyObject *__pyx_v_paint_state, PyObject *__pyx_v_palette_index, PyObject *__pyx_v_foreground) {
  void *__pyx_v_paint_state_p;
  hb_color_t __pyx_v_c_foreground;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  hb_color_t __pyx_t_5;
  hb_codepoint_t __pyx_t_6;
  unsigned int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("paint_glyph", 0);

  /* "src/uharfbuzz/_font.pxi":430
 *                     palette_index: int = 0,
 *                     foreground: Color | None = None):
 *         cdef void *paint_state_p = <void *>paint_state             # <<<<<<<<<<<<<<
 *         cdef hb_color_t c_foreground = 0x000000FF
 *         if foreground is not None:
*/
  __pyx_v_paint_state_p = ((void *)__pyx_v_paint_state);

  /* "src/uharfbuzz/_font.pxi":431
 *                     foreground: Color | None = None):
 *         cdef void *paint_state_p = <void *>paint_state
 *         cdef hb_color_t c_foreground = 0x000000FF             # <<<<<<<<<<<<<<
 *         if foreground is not None:
 *             c_foreground = foreground.to_int()
*/
  __pyx_v_c_foreground = 0x000000FF;

  /* "src/uharfbuzz/_font.pxi":432
 *         cdef void *paint_state_p = <void *>paint_state
 *         cdef hb_color_t c_foreground = 0x000000FF
 *         if foreground is not None:             # <<<<<<<<<<<<<<
 *             c_foreground = foreground.to_int()
 *         hb_font_paint_glyph(self._hb_font,
*/
  __pyx_t_1 = (__pyx_v_foreground != Py_None);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":433
 *         cdef hb_color_t c_foreground = 0x000000FF
 *         if foreground is not None:
 *             c_foreground = foreground.to_int()             # <<<<<<<<<<<<<<
 *         hb_font_paint_glyph(self._hb_font,
 *                             gid,
*/
    __pyx_t_3 = __pyx_v_foreground;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
      __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_int, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 433, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __pyx_t_5 = __Pyx_PyLong_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_5 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 433, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_foreground = __pyx_t_5;

    /* "src/uharfbuzz/_font.pxi":432
 *         cdef void *paint_state_p = <void *>paint_state
 *         cdef hb_color_t c_foreground = 0x000000FF
 *         if foreground is not None:             # <<<<<<<<<<<<<<
 *             c_foreground = foreground.to_int()
 *         hb_font_paint_glyph(self._hb_font,
*/
  }

  /* "src/uharfbuzz/_font.pxi":435
 *             c_foreground = foreground.to_int()
 *         hb_font_paint_glyph(self._hb_font,
 *                             gid,             # <<<<<<<<<<<<<<
 *                             paint_funcs._hb_paintfuncs,
 *                             paint_state_p,
*/
  __pyx_t_6 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_6 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 435, __pyx_L1_error)

  /* "src/uharfbuzz/_font.pxi":438
 *                             paint_funcs._hb_paintfuncs,
 *                             paint_state_p,
 *                             palette_index,             # <<<<<<<<<<<<<<
 *                             c_foreground)
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_7 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(3, 438, __pyx_L1_error)

  /* "src/uharfbuzz/_font.pxi":434
 *         if foreground is not None:
 *             c_foreground = foreground.to_int()
 *         hb_font_paint_glyph(self._hb_font,             # <<<<<<<<<<<<<<
 *                             gid,
 *                             paint_funcs._hb_paintfuncs,
*/
  hb_font_paint_glyph(__pyx_v_self->_hb_font, __pyx_t_6, __pyx_v_paint_funcs->_hb_paintfuncs, __pyx_v_paint_state_p, __pyx_t_7, __pyx_v_c_foreground);

  /* "src/uharfbuzz/_font.pxi":425
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
 *     def paint_glyph(self, gid: int,             # <<<<<<<<<<<<<<
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.paint_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":441
 *                             c_foreground)
 * 
 *     def draw_glyph_with_pen(self, gid: int, pen):             # <<<<<<<<<<<<<<
 *         global drawfuncs
 *         if drawfuncs == NULL:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen = {"draw_glyph_with_pen", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_gid = 0;
  PyObject *__pyx_v_pen = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_glyph_with_pen (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_gid,&__pyx_mstate_global->__pyx_n_u_pen,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 441, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 441, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 441, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "draw_glyph_with_pen", 0) < (0)) __PYX_ERR(3, 441, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("draw_glyph_with_pen", 1, 2, 2, i); __PYX_ERR(3, 441, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 441, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 441, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "gid", 0) < (0)) __PYX_ERR(3, 441, __pyx_L3_error)
    __pyx_v_gid = ((PyObject*)values[0]);
    __pyx_v_pen = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_glyph_with_pen", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 441, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.draw_glyph_with_pen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gid), (&PyLong_Type), 0, "gid", 2))) __PYX_ERR(3, 441, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_46draw_glyph_with_pen(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_gid, __pyx_v_pen);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_46draw_glyph_with_pen(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_gid, PyObject *__pyx_v_pen) {
  PyObject *__pyx_v_moveTo = NULL;
  PyObject *__pyx_v_lineTo = NULL;
  PyObject *__pyx_v_curveTo = NULL;
  PyObject *__pyx_v_qCurveTo = NULL;
  PyObject *__pyx_v_closePath = NULL;
  struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods __pyx_v_methods;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  hb_codepoint_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_glyph_with_pen", 0);

  /* "src/uharfbuzz/_font.pxi":443
 *     def draw_glyph_with_pen(self, gid: int, pen):
 *         global drawfuncs
 *         if drawfuncs == NULL:             # <<<<<<<<<<<<<<
 *             drawfuncs = hb_draw_funcs_create()
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)
*/
  __pyx_t_1 = (__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":444
 *         global drawfuncs
 *         if drawfuncs == NULL:
 *             drawfuncs = hb_draw_funcs_create()             # <<<<<<<<<<<<<<
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)
 *             hb_draw_funcs_set_line_to_func(drawfuncs, _pen_line_to_func, NULL, NULL)
*/
    __pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs = hb_draw_funcs_create();

    /* "src/uharfbuzz/_font.pxi":445
 *         if drawfuncs == NULL:
 *             drawfuncs = hb_draw_funcs_create()
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)             # <<<<<<<<<<<<<<
 *             hb_draw_funcs_set_line_to_func(drawfuncs, _pen_line_to_func, NULL, NULL)
 *             hb_draw_funcs_set_cubic_to_func(drawfuncs, _pen_cubic_to_func, NULL, NULL)
*/
    hb_draw_funcs_set_move_to_func(__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__pen_move_to_func, NULL, NULL);

    /* "src/uharfbuzz/_font.pxi":446
 *             drawfuncs = hb_draw_funcs_create()
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)
 *             hb_draw_funcs_set_line_to_func(drawfuncs, _pen_line_to_func, NULL, NULL)             # <<<<<<<<<<<<<<
 *             hb_draw_funcs_set_cubic_to_func(drawfuncs, _pen_cubic_to_func, NULL, NULL)
 *             hb_draw_funcs_set_quadratic_to_func(drawfuncs, _pen_quadratic_to_func, NULL, NULL)
*/
    hb_draw_funcs_set_line_to_func(__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__pen_line_to_func, NULL, NULL);

    /* "src/uharfbuzz/_font.pxi":447
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)
 *             hb_draw_funcs_set_line_to_func(drawfuncs, _pen_line_to_func, NULL, NULL)
 *             hb_draw_funcs_set_cubic_to_func(drawfuncs, _pen_cubic_to_func, NULL, NULL)             # <<<<<<<<<<<<<<
 *             hb_draw_funcs_set_quadratic_to_func(drawfuncs, _pen_quadratic_to_func, NULL, NULL)
 *             hb_draw_funcs_set_close_path_func(drawfuncs, _pen_close_path_func, NULL, NULL)
*/
    hb_draw_funcs_set_cubic_to_func(__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__pen_cubic_to_func, NULL, NULL);

    /* "src/uharfbuzz/_font.pxi":448
 *             hb_draw_funcs_set_line_to_func(drawfuncs, _pen_line_to_func, NULL, NULL)
 *             hb_draw_funcs_set_cubic_to_func(drawfuncs, _pen_cubic_to_func, NULL, NULL)
 *             hb_draw_funcs_set_quadratic_to_func(drawfuncs, _pen_quadratic_to_func, NULL, NULL)             # <<<<<<<<<<<<<<
 *             hb_draw_funcs_set_close_path_func(drawfuncs, _pen_close_path_func, NULL, NULL)
 * 
*/
    hb_draw_funcs_set_quadratic_to_func(__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__pen_quadratic_to_func, NULL, NULL);

    /* "src/uharfbuzz/_font.pxi":449
 *             hb_draw_funcs_set_cubic_to_func(drawfuncs, _pen_cubic_to_func, NULL, NULL)
 *             hb_draw_funcs_set_quadratic_to_func(drawfuncs, _pen_quadratic_to_func, NULL, NULL)
 *             hb_draw_funcs_set_close_path_func(drawfuncs, _pen_close_path_func, NULL, NULL)             # <<<<<<<<<<<<<<
 * 
 *         # Keep local copy so they are not GC'ed before the call completes
*/
    hb_draw_funcs_set_close_path_func(__pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, __pyx_f_9uharfbuzz_9_harfbuzz__pen_close_path_func, NULL, NULL);

    /* "src/uharfbuzz/_font.pxi":443
 *     def draw_glyph_with_pen(self, gid: int, pen):
 *         global drawfuncs
 *         if drawfuncs == NULL:             # <<<<<<<<<<<<<<
 *             drawfuncs = hb_draw_funcs_create()
 *             hb_draw_funcs_set_move_to_func(drawfuncs, _pen_move_to_func, NULL, NULL)
*/
  }

  /* "src/uharfbuzz/_font.pxi":452
 * 
 *         # Keep local copy so they are not GC'ed before the call completes
 *         moveTo = pen.moveTo             # <<<<<<<<<<<<<<
 *         lineTo = pen.lineTo
 *         curveTo = pen.curveTo
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pen, __pyx_mstate_global->__pyx_n_u_moveTo); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_moveTo = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":453
 *         # Keep local copy so they are not GC'ed before the call completes
 *         moveTo = pen.moveTo
 *         lineTo = pen.lineTo             # <<<<<<<<<<<<<<
 *         curveTo = pen.curveTo
 *         qCurveTo = pen.qCurveTo
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pen, __pyx_mstate_global->__pyx_n_u_lineTo); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_lineTo = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":454
 *         moveTo = pen.moveTo
 *         lineTo = pen.lineTo
 *         curveTo = pen.curveTo             # <<<<<<<<<<<<<<
 *         qCurveTo = pen.qCurveTo
 *         closePath = pen.closePath
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pen, __pyx_mstate_global->__pyx_n_u_curveTo); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_curveTo = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":455
 *         lineTo = pen.lineTo
 *         curveTo = pen.curveTo
 *         qCurveTo = pen.qCurveTo             # <<<<<<<<<<<<<<
 *         closePath = pen.closePath
 * 
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pen, __pyx_mstate_global->__pyx_n_u_qCurveTo); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_qCurveTo = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":456
 *         curveTo = pen.curveTo
 *         qCurveTo = pen.qCurveTo
 *         closePath = pen.closePath             # <<<<<<<<<<<<<<
 * 
 *         cdef _pen_methods methods
*/
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_pen, __pyx_mstate_global->__pyx_n_u_closePath); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_closePath = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":459
 * 
 *         cdef _pen_methods methods
 *         methods.moveTo = <void*>moveTo             # <<<<<<<<<<<<<<
 *         methods.lineTo = <void*>lineTo
 *         methods.curveTo = <void*>curveTo
*/
  __pyx_v_methods.moveTo = ((void *)__pyx_v_moveTo);

  /* "src/uharfbuzz/_font.pxi":460
 *         cdef _pen_methods methods
 *         methods.moveTo = <void*>moveTo
 *         methods.lineTo = <void*>lineTo             # <<<<<<<<<<<<<<
 *         methods.curveTo = <void*>curveTo
 *         methods.qCurveTo = <void*>qCurveTo
*/
  __pyx_v_methods.lineTo = ((void *)__pyx_v_lineTo);

  /* "src/uharfbuzz/_font.pxi":461
 *         methods.moveTo = <void*>moveTo
 *         methods.lineTo = <void*>lineTo
 *         methods.curveTo = <void*>curveTo             # <<<<<<<<<<<<<<
 *         methods.qCurveTo = <void*>qCurveTo
 *         methods.closePath = <void*>closePath
*/
  __pyx_v_methods.curveTo = ((void *)__pyx_v_curveTo);

  /* "src/uharfbuzz/_font.pxi":462
 *         methods.lineTo = <void*>lineTo
 *         methods.curveTo = <void*>curveTo
 *         methods.qCurveTo = <void*>qCurveTo             # <<<<<<<<<<<<<<
 *         methods.closePath = <void*>closePath
 * 
*/
  __pyx_v_methods.qCurveTo = ((void *)__pyx_v_qCurveTo);

  /* "src/uharfbuzz/_font.pxi":463
 *         methods.curveTo = <void*>curveTo
 *         methods.qCurveTo = <void*>qCurveTo
 *         methods.closePath = <void*>closePath             # <<<<<<<<<<<<<<
 * 
 *         hb_font_draw_glyph(self._hb_font, gid, drawfuncs, <void*>&methods)
*/
  __pyx_v_methods.closePath = ((void *)__pyx_v_closePath);

  /* "src/uharfbuzz/_font.pxi":465
 *         methods.closePath = <void*>closePath
 * 
 *         hb_font_draw_glyph(self._hb_font, gid, drawfuncs, <void*>&methods)             # <<<<<<<<<<<<<<
 * 
 *     # math
*/
  __pyx_t_3 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_gid); if (unlikely((__pyx_t_3 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 465, __pyx_L1_error)
  hb_font_draw_glyph(__pyx_v_self->_hb_font, __pyx_t_3, __pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs, ((void *)(&__pyx_v_methods)));

  /* "src/uharfbuzz/_font.pxi":441
 *                             c_foreground)
 * 
 *     def draw_glyph_with_pen(self, gid: int, pen):             # <<<<<<<<<<<<<<
 *         global drawfuncs
 *         if drawfuncs == NULL:
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.draw_glyph_with_pen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_moveTo);
  __Pyx_XDECREF(__pyx_v_lineTo);
  __Pyx_XDECREF(__pyx_v_curveTo);
  __Pyx_XDECREF(__pyx_v_qCurveTo);
  __Pyx_XDECREF(__pyx_v_closePath);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":468
 * 
 *     # math
 *     def get_math_constant(self, constant: OTMathConstant) -> int:             # <<<<<<<<<<<<<<
 *         if constant >= len(OTMathConstant):
 *             raise ValueError("invalid constant")
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant = {"get_math_constant", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_constant = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_constant (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_constant,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 468, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 468, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_constant", 0) < (0)) __PYX_ERR(3, 468, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_constant", 1, 1, 1, i); __PYX_ERR(3, 468, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 468, __pyx_L3_error)
    }
    __pyx_v_constant = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_constant", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 468, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_constant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_48get_math_constant(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_constant);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_48get_math_constant(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_constant) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  size_t __pyx_t_5;
  hb_ot_math_constant_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_constant", 0);

  /* "src/uharfbuzz/_font.pxi":469
 *     # math
 *     def get_math_constant(self, constant: OTMathConstant) -> int:
 *         if constant >= len(OTMathConstant):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid constant")
 *         return hb_ot_math_get_constant(self._hb_font, constant)
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_OTMathConstant); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(3, 469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 469, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_constant, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(3, 469, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_4)) {

    /* "src/uharfbuzz/_font.pxi":470
 *     def get_math_constant(self, constant: OTMathConstant) -> int:
 *         if constant >= len(OTMathConstant):
 *             raise ValueError("invalid constant")             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_constant(self._hb_font, constant)
 * 
*/
    __pyx_t_1 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_invalid_constant};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 470, __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(3, 470, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":469
 *     # math
 *     def get_math_constant(self, constant: OTMathConstant) -> int:
 *         if constant >= len(OTMathConstant):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid constant")
 *         return hb_ot_math_get_constant(self._hb_font, constant)
*/
  }

  /* "src/uharfbuzz/_font.pxi":471
 *         if constant >= len(OTMathConstant):
 *             raise ValueError("invalid constant")
 *         return hb_ot_math_get_constant(self._hb_font, constant)             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_italics_correction(self, glyph: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = ((hb_ot_math_constant_t)__Pyx_PyLong_As_hb_ot_math_constant_t(__pyx_v_constant)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 471, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_From_hb_position_t(hb_ot_math_get_constant(__pyx_v_self->_hb_font, __pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 0) < (0)) __PYX_ERR(3, 471, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":468
 * 
 *     # math
 *     def get_math_constant(self, constant: OTMathConstant) -> int:             # <<<<<<<<<<<<<<
 *         if constant >= len(OTMathConstant):
 *             raise ValueError("invalid constant")
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_constant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":473
 *         return hb_ot_math_get_constant(self._hb_font, constant)
 * 
 *     def get_math_glyph_italics_correction(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction = {"get_math_glyph_italics_correction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_italics_correction (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 473, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 473, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_italics_correction", 0) < (0)) __PYX_ERR(3, 473, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_italics_correction", 1, 1, 1, i); __PYX_ERR(3, 473, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 473, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 473, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_italics_correction", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 473, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_italics_correction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 473, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_50get_math_glyph_italics_correction(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_50get_math_glyph_italics_correction(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_italics_correction", 0);

  /* "src/uharfbuzz/_font.pxi":474
 * 
 *     def get_math_glyph_italics_correction(self, glyph: int) -> int:
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_top_accent_attachment(self, glyph: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 474, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_ot_math_get_glyph_italics_correction(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 474, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":473
 *         return hb_ot_math_get_constant(self._hb_font, constant)
 * 
 *     def get_math_glyph_italics_correction(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_italics_correction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":476
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
 *     def get_math_glyph_top_accent_attachment(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment = {"get_math_glyph_top_accent_attachment", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_top_accent_attachment (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 476, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 476, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_top_accent_attachment", 0) < (0)) __PYX_ERR(3, 476, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_top_accent_attachment", 1, 1, 1, i); __PYX_ERR(3, 476, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 476, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 476, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_top_accent_attachment", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 476, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_top_accent_attachment", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 476, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_52get_math_glyph_top_accent_attachment(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_52get_math_glyph_top_accent_attachment(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_top_accent_attachment", 0);

  /* "src/uharfbuzz/_font.pxi":477
 * 
 *     def get_math_glyph_top_accent_attachment(self, glyph: int) -> int:
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def get_math_min_connector_overlap(self, direction: str) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 477, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_ot_math_get_glyph_top_accent_attachment(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 477, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 477, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":476
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
 *     def get_math_glyph_top_accent_attachment(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_top_accent_attachment", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":479
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
 *     def get_math_min_connector_overlap(self, direction: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap = {"get_math_min_connector_overlap", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_min_connector_overlap (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 479, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 479, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_min_connector_overlap", 0) < (0)) __PYX_ERR(3, 479, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_min_connector_overlap", 1, 1, 1, i); __PYX_ERR(3, 479, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 479, __pyx_L3_error)
    }
    __pyx_v_direction = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_min_connector_overlap", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 479, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_min_connector_overlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(3, 479, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_54get_math_min_connector_overlap(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_54get_math_min_connector_overlap(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_direction) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  hb_direction_t __pyx_v_hb_direction;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_min_connector_overlap", 0);

  /* "src/uharfbuzz/_font.pxi":480
 * 
 *     def get_math_min_connector_overlap(self, direction: str) -> int:
 *         cdef bytes packed = direction.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_direction, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":481
 *     def get_math_min_connector_overlap(self, direction: str) -> int:
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 481, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_font.pxi":482
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)
 * 
*/
  __pyx_v_hb_direction = hb_direction_from_string(__pyx_v_cstr, -1);

  /* "src/uharfbuzz/_font.pxi":483
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(hb_ot_math_get_min_connector_overlap(__pyx_v_self->_hb_font, __pyx_v_hb_direction)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 483, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 0) < (0)) __PYX_ERR(3, 483, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":479
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
 *     def get_math_min_connector_overlap(self, direction: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_min_connector_overlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":485
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning = {"get_math_glyph_kerning", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_kern = 0;
  PyObject *__pyx_v_correction_height = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_kerning (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_kern,&__pyx_mstate_global->__pyx_n_u_correction_height,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 485, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 485, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 485, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 485, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_kerning", 0) < (0)) __PYX_ERR(3, 485, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_kerning", 1, 3, 3, i); __PYX_ERR(3, 485, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 485, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 485, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 485, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 485, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
    __pyx_v_kern = values[1];
    if (__Pyx_PyInt_FromNumber(&values[2], "correction_height", 0) < (0)) __PYX_ERR(3, 485, __pyx_L3_error)
    __pyx_v_correction_height = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_kerning", 1, 3, 3, __pyx_nargs); __PYX_ERR(3, 485, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_kerning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 485, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_correction_height), (&PyLong_Type), 0, "correction_height", 2))) __PYX_ERR(3, 485, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_56get_math_glyph_kerning(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph, __pyx_v_kern, __pyx_v_correction_height);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_56get_math_glyph_kerning(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern, PyObject *__pyx_v_correction_height) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  size_t __pyx_t_5;
  hb_codepoint_t __pyx_t_6;
  hb_ot_math_kern_t __pyx_t_7;
  hb_position_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_kerning", 0);

  /* "src/uharfbuzz/_font.pxi":486
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:
 *         if kern >= len(OTMathKern):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid kern")
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_OTMathKern); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(3, 486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_kern, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(3, 486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_4)) {

    /* "src/uharfbuzz/_font.pxi":487
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
 * 
*/
    __pyx_t_1 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_invalid_kern};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 487, __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(3, 487, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":486
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:
 *         if kern >= len(OTMathKern):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid kern")
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
*/
  }

  /* "src/uharfbuzz/_font.pxi":488
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_6 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 488, __pyx_L1_error)
  __pyx_t_7 = ((hb_ot_math_kern_t)__Pyx_PyLong_As_hb_ot_math_kern_t(__pyx_v_kern)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 488, __pyx_L1_error)
  __pyx_t_8 = __Pyx_PyLong_As_hb_position_t(__pyx_v_correction_height); if (unlikely((__pyx_t_8 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 488, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_From_hb_position_t(hb_ot_math_get_glyph_kerning(__pyx_v_self->_hb_font, __pyx_t_6, __pyx_t_7, __pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 0) < (0)) __PYX_ERR(3, 488, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":485
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_kerning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":490
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings = {"get_math_glyph_kernings", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_kern = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_kernings (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_kern,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 490, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 490, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 490, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_kernings", 0) < (0)) __PYX_ERR(3, 490, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_kernings", 1, 2, 2, i); __PYX_ERR(3, 490, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 490, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 490, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 490, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
    __pyx_v_kern = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_kernings", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 490, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_kernings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 490, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_58get_math_glyph_kernings(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph, __pyx_v_kern);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_58get_math_glyph_kernings(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern) {
  unsigned int __pyx_v_count;
  hb_ot_math_kern_entry_t __pyx_v_kerns_array[128];
  PyObject *__pyx_v_kerns = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  size_t __pyx_t_5;
  hb_codepoint_t __pyx_t_6;
  hb_ot_math_kern_t __pyx_t_7;
  unsigned int __pyx_t_8;
  unsigned int __pyx_t_9;
  unsigned int __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_kernings", 0);

  /* "src/uharfbuzz/_font.pxi":491
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:
 *         if kern >= len(OTMathKern):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid kern")
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_OTMathKern); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(3, 491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyLong_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_kern, __pyx_t_1, Py_GE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(3, 491, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_t_4)) {

    /* "src/uharfbuzz/_font.pxi":492
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")             # <<<<<<<<<<<<<<
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_kern_entry_t kerns_array[STATIC_ARRAY_SIZE]
*/
    __pyx_t_1 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_mstate_global->__pyx_kp_u_invalid_kern};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 492, __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(3, 492, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":491
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:
 *         if kern >= len(OTMathKern):             # <<<<<<<<<<<<<<
 *             raise ValueError("invalid kern")
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
*/
  }

  /* "src/uharfbuzz/_font.pxi":493
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
 *         cdef unsigned int count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_ot_math_kern_entry_t kerns_array[STATIC_ARRAY_SIZE]
 *         cdef list kerns = []
*/
  __pyx_v_count = 0x80;

  /* "src/uharfbuzz/_font.pxi":495
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_kern_entry_t kerns_array[STATIC_ARRAY_SIZE]
 *         cdef list kerns = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_kerns = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":497
 *         cdef list kerns = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_kernings(self._hb_font, glyph, kern, start_offset,
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_font.pxi":498
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_math_get_glyph_kernings(self._hb_font, glyph, kern, start_offset,
 *                 &count, kerns_array)
*/
  while (1) {
    __pyx_t_4 = (__pyx_v_count == 0x80);
    if (!__pyx_t_4) break;

    /* "src/uharfbuzz/_font.pxi":499
 *         cdef unsigned int start_offset = 0
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_kernings(self._hb_font, glyph, kern, start_offset,             # <<<<<<<<<<<<<<
 *                 &count, kerns_array)
 *             for i in range(count):
*/
    __pyx_t_6 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_6 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 499, __pyx_L1_error)
    __pyx_t_7 = ((hb_ot_math_kern_t)__Pyx_PyLong_As_hb_ot_math_kern_t(__pyx_v_kern)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 499, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":500
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_kernings(self._hb_font, glyph, kern, start_offset,
 *                 &count, kerns_array)             # <<<<<<<<<<<<<<
 *             for i in range(count):
 *                 kerns.append(OTMathKernEntry(kerns_array[i].max_correction_height, kerns_array[i].kern_value))
*/
    (void)(hb_ot_math_get_glyph_kernings(__pyx_v_self->_hb_font, __pyx_t_6, __pyx_t_7, __pyx_v_start_offset, (&__pyx_v_count), __pyx_v_kerns_array));

    /* "src/uharfbuzz/_font.pxi":501
 *             hb_ot_math_get_glyph_kernings(self._hb_font, glyph, kern, start_offset,
 *                 &count, kerns_array)
 *             for i in range(count):             # <<<<<<<<<<<<<<
 *                 kerns.append(OTMathKernEntry(kerns_array[i].max_correction_height, kerns_array[i].kern_value))
 *             start_offset += count
*/
    __pyx_t_8 = __pyx_v_count;
    __pyx_t_9 = __pyx_t_8;
    for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
      __pyx_v_i = __pyx_t_10;

      /* "src/uharfbuzz/_font.pxi":502
 *                 &count, kerns_array)
 *             for i in range(count):
 *                 kerns.append(OTMathKernEntry(kerns_array[i].max_correction_height, kerns_array[i].kern_value))             # <<<<<<<<<<<<<<
 *             start_offset += count
 *         return kerns
*/
      __pyx_t_1 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_11, __pyx_mstate_global->__pyx_n_u_OTMathKernEntry); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = __Pyx_PyLong_From_hb_position_t((__pyx_v_kerns_array[__pyx_v_i]).max_correction_height); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_13 = __Pyx_PyLong_From_hb_position_t((__pyx_v_kerns_array[__pyx_v_i]).kern_value); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 502, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_5 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_11))) {
        __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_11);
        assert(__pyx_t_1);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_11, __pyx__function);
        __pyx_t_5 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_1, __pyx_t_12, __pyx_t_13};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_11, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 502, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      __pyx_t_14 = __Pyx_PyList_Append(__pyx_v_kerns, __pyx_t_3); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(3, 502, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }

    /* "src/uharfbuzz/_font.pxi":503
 *             for i in range(count):
 *                 kerns.append(OTMathKernEntry(kerns_array[i].max_correction_height, kerns_array[i].kern_value))
 *             start_offset += count             # <<<<<<<<<<<<<<
 *         return kerns
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_count);
  }

  /* "src/uharfbuzz/_font.pxi":504
 *                 kerns.append(OTMathKernEntry(kerns_array[i].max_correction_height, kerns_array[i].kern_value))
 *             start_offset += count
 *         return kerns             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_kerns);
  __pyx_r = __pyx_v_kerns;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":490
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_kernings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_kerns);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":506
 *         return kerns
 * 
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants = {"get_math_glyph_variants", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_variants (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 506, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 506, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 506, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_variants", 0) < (0)) __PYX_ERR(3, 506, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_variants", 1, 2, 2, i); __PYX_ERR(3, 506, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 506, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 506, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 506, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
    __pyx_v_direction = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_variants", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 506, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_variants", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 506, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(3, 506, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_60get_math_glyph_variants(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph, __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_60get_math_glyph_variants(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  hb_direction_t __pyx_v_hb_direction;
  unsigned int __pyx_v_count;
  hb_ot_math_glyph_variant_t __pyx_v_variants_array[128];
  PyObject *__pyx_v_variants = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  hb_codepoint_t __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  unsigned int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  size_t __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_variants", 0);

  /* "src/uharfbuzz/_font.pxi":507
 * 
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *         cdef bytes packed = direction.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_direction, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":508
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 508, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_font.pxi":509
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)             # <<<<<<<<<<<<<<
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_glyph_variant_t variants_array[STATIC_ARRAY_SIZE]
*/
  __pyx_v_hb_direction = hb_direction_from_string(__pyx_v_cstr, -1);

  /* "src/uharfbuzz/_font.pxi":510
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         cdef unsigned int count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_ot_math_glyph_variant_t variants_array[STATIC_ARRAY_SIZE]
 *         cdef list variants = []
*/
  __pyx_v_count = 0x80;

  /* "src/uharfbuzz/_font.pxi":512
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_glyph_variant_t variants_array[STATIC_ARRAY_SIZE]
 *         cdef list variants = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_variants = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":514
 *         cdef list variants = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_variants(self._hb_font, glyph, hb_direction, start_offset,
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_font.pxi":515
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         while count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_math_get_glyph_variants(self._hb_font, glyph, hb_direction, start_offset,
 *                 &count, variants_array)
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_font.pxi":516
 *         cdef unsigned int start_offset = 0
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_variants(self._hb_font, glyph, hb_direction, start_offset,             # <<<<<<<<<<<<<<
 *                 &count, variants_array)
 *             for i in range(count):
*/
    __pyx_t_4 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_4 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 516, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":517
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_variants(self._hb_font, glyph, hb_direction, start_offset,
 *                 &count, variants_array)             # <<<<<<<<<<<<<<
 *             for i in range(count):
 *                 variants.append(OTMathGlyphVariant(variants_array[i].glyph, variants_array[i].advance))
*/
    (void)(hb_ot_math_get_glyph_variants(__pyx_v_self->_hb_font, __pyx_t_4, __pyx_v_hb_direction, __pyx_v_start_offset, (&__pyx_v_count), __pyx_v_variants_array));

    /* "src/uharfbuzz/_font.pxi":518
 *             hb_ot_math_get_glyph_variants(self._hb_font, glyph, hb_direction, start_offset,
 *                 &count, variants_array)
 *             for i in range(count):             # <<<<<<<<<<<<<<
 *                 variants.append(OTMathGlyphVariant(variants_array[i].glyph, variants_array[i].advance))
 *             start_offset += count
*/
    __pyx_t_5 = __pyx_v_count;
    __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;

      /* "src/uharfbuzz/_font.pxi":519
 *                 &count, variants_array)
 *             for i in range(count):
 *                 variants.append(OTMathGlyphVariant(variants_array[i].glyph, variants_array[i].advance))             # <<<<<<<<<<<<<<
 *             start_offset += count
 *         return variants
*/
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathGlyphVariant); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 519, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyLong_From_hb_codepoint_t((__pyx_v_variants_array[__pyx_v_i]).glyph); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 519, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyLong_From_hb_position_t((__pyx_v_variants_array[__pyx_v_i]).advance); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 519, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_12 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[3] = {__pyx_t_8, __pyx_t_10, __pyx_t_11};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_12, (3-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 519, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_13 = __Pyx_PyList_Append(__pyx_v_variants, __pyx_t_1); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(3, 519, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_font.pxi":520
 *             for i in range(count):
 *                 variants.append(OTMathGlyphVariant(variants_array[i].glyph, variants_array[i].advance))
 *             start_offset += count             # <<<<<<<<<<<<<<
 *         return variants
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_count);
  }

  /* "src/uharfbuzz/_font.pxi":521
 *                 variants.append(OTMathGlyphVariant(variants_array[i].glyph, variants_array[i].advance))
 *             start_offset += count
 *         return variants             # <<<<<<<<<<<<<<
 * 
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_variants);
  __pyx_r = __pyx_v_variants;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":506
 *         return kerns
 * 
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_variants", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_variants);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":523
 *         return variants
 * 
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly = {"get_math_glyph_assembly", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_math_glyph_assembly (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 523, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 523, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 523, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_math_glyph_assembly", 0) < (0)) __PYX_ERR(3, 523, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_math_glyph_assembly", 1, 2, 2, i); __PYX_ERR(3, 523, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 523, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 523, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 523, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
    __pyx_v_direction = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_math_glyph_assembly", 1, 2, 2, __pyx_nargs); __PYX_ERR(3, 523, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_assembly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 523, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(3, 523, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_62get_math_glyph_assembly(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph, __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_62get_math_glyph_assembly(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction) {
  PyObject *__pyx_v_packed = 0;
  char *__pyx_v_cstr;
  hb_direction_t __pyx_v_hb_direction;
  unsigned int __pyx_v_count;
  hb_ot_math_glyph_part_t __pyx_v_assembly_array[128];
  PyObject *__pyx_v_assembly = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  hb_position_t __pyx_v_italics_correction;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  hb_codepoint_t __pyx_t_4;
  unsigned int __pyx_t_5;
  unsigned int __pyx_t_6;
  unsigned int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  size_t __pyx_t_18;
  int __pyx_t_19;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_math_glyph_assembly", 0);

  /* "src/uharfbuzz/_font.pxi":524
 * 
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:
 *         cdef bytes packed = direction.encode()             # <<<<<<<<<<<<<<
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_direction, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":525
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed             # <<<<<<<<<<<<<<
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(3, 525, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_2;

  /* "src/uharfbuzz/_font.pxi":526
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)             # <<<<<<<<<<<<<<
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_glyph_part_t assembly_array[STATIC_ARRAY_SIZE]
*/
  __pyx_v_hb_direction = hb_direction_from_string(__pyx_v_cstr, -1);

  /* "src/uharfbuzz/_font.pxi":527
 *         cdef char* cstr = packed
 *         cdef hb_direction_t hb_direction = hb_direction_from_string(cstr, -1)
 *         cdef unsigned int count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *         cdef hb_ot_math_glyph_part_t assembly_array[STATIC_ARRAY_SIZE]
 *         cdef list assembly = []
*/
  __pyx_v_count = 0x80;

  /* "src/uharfbuzz/_font.pxi":529
 *         cdef unsigned int count = STATIC_ARRAY_SIZE
 *         cdef hb_ot_math_glyph_part_t assembly_array[STATIC_ARRAY_SIZE]
 *         cdef list assembly = []             # <<<<<<<<<<<<<<
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_assembly = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":531
 *         cdef list assembly = []
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *         cdef hb_position_t italics_correction = 0
 *         while count == STATIC_ARRAY_SIZE:
*/
  __pyx_v_start_offset = 0;

  /* "src/uharfbuzz/_font.pxi":532
 *         cdef unsigned int i
 *         cdef unsigned int start_offset = 0
 *         cdef hb_position_t italics_correction = 0             # <<<<<<<<<<<<<<
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_assembly(self._hb_font,
*/
  __pyx_v_italics_correction = 0;

  /* "src/uharfbuzz/_font.pxi":533
 *         cdef unsigned int start_offset = 0
 *         cdef hb_position_t italics_correction = 0
 *         while count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *             hb_ot_math_get_glyph_assembly(self._hb_font,
 *                 glyph, hb_direction, start_offset,
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_count == 0x80);
    if (!__pyx_t_3) break;

    /* "src/uharfbuzz/_font.pxi":535
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_assembly(self._hb_font,
 *                 glyph, hb_direction, start_offset,             # <<<<<<<<<<<<<<
 *                 &count, assembly_array, &italics_correction)
 *             for i in range(count):
*/
    __pyx_t_4 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_4 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 535, __pyx_L1_error)

    /* "src/uharfbuzz/_font.pxi":534
 *         cdef hb_position_t italics_correction = 0
 *         while count == STATIC_ARRAY_SIZE:
 *             hb_ot_math_get_glyph_assembly(self._hb_font,             # <<<<<<<<<<<<<<
 *                 glyph, hb_direction, start_offset,
 *                 &count, assembly_array, &italics_correction)
*/
    (void)(hb_ot_math_get_glyph_assembly(__pyx_v_self->_hb_font, __pyx_t_4, __pyx_v_hb_direction, __pyx_v_start_offset, (&__pyx_v_count), __pyx_v_assembly_array, (&__pyx_v_italics_correction)));

    /* "src/uharfbuzz/_font.pxi":537
 *                 glyph, hb_direction, start_offset,
 *                 &count, assembly_array, &italics_correction)
 *             for i in range(count):             # <<<<<<<<<<<<<<
 *                 assembly.append(
 *                     OTMathGlyphPart(assembly_array[i].glyph, assembly_array[i].start_connector_length,
*/
    __pyx_t_5 = __pyx_v_count;
    __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;

      /* "src/uharfbuzz/_font.pxi":539
 *             for i in range(count):
 *                 assembly.append(
 *                     OTMathGlyphPart(assembly_array[i].glyph, assembly_array[i].start_connector_length,             # <<<<<<<<<<<<<<
 *                         assembly_array[i].end_connector_length, assembly_array[i].full_advance,
 *                         OTMathGlyphPartFlags(assembly_array[i].flags)))
*/
      __pyx_t_8 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPart); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyLong_From_hb_codepoint_t((__pyx_v_assembly_array[__pyx_v_i]).glyph); if (unlikely(!__pyx_t_10)) __PYX_ERR(3, 539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyLong_From_hb_position_t((__pyx_v_assembly_array[__pyx_v_i]).start_connector_length); if (unlikely(!__pyx_t_11)) __PYX_ERR(3, 539, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);

      /* "src/uharfbuzz/_font.pxi":540
 *                 assembly.append(
 *                     OTMathGlyphPart(assembly_array[i].glyph, assembly_array[i].start_connector_length,
 *                         assembly_array[i].end_connector_length, assembly_array[i].full_advance,             # <<<<<<<<<<<<<<
 *                         OTMathGlyphPartFlags(assembly_array[i].flags)))
 *             start_offset += count
*/
      __pyx_t_12 = __Pyx_PyLong_From_hb_position_t((__pyx_v_assembly_array[__pyx_v_i]).end_connector_length); if (unlikely(!__pyx_t_12)) __PYX_ERR(3, 540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_13 = __Pyx_PyLong_From_hb_position_t((__pyx_v_assembly_array[__pyx_v_i]).full_advance); if (unlikely(!__pyx_t_13)) __PYX_ERR(3, 540, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);

      /* "src/uharfbuzz/_font.pxi":541
 *                     OTMathGlyphPart(assembly_array[i].glyph, assembly_array[i].start_connector_length,
 *                         assembly_array[i].end_connector_length, assembly_array[i].full_advance,
 *                         OTMathGlyphPartFlags(assembly_array[i].flags)))             # <<<<<<<<<<<<<<
 *             start_offset += count
 *         return assembly, italics_correction
*/
      __pyx_t_15 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_16, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags); if (unlikely(!__pyx_t_16)) __PYX_ERR(3, 541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_16);
      __pyx_t_17 = __Pyx_PyLong_From_hb_ot_math_glyph_part_flags_t((__pyx_v_assembly_array[__pyx_v_i]).flags); if (unlikely(!__pyx_t_17)) __PYX_ERR(3, 541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_17);
      __pyx_t_18 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_16))) {
        __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_16);
        assert(__pyx_t_15);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_16);
        __Pyx_INCREF(__pyx_t_15);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_16, __pyx__function);
        __pyx_t_18 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_17};
        __pyx_t_14 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_16, __pyx_callargs+__pyx_t_18, (2-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        if (unlikely(!__pyx_t_14)) __PYX_ERR(3, 541, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
      }
      __pyx_t_18 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_9))) {
        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_9);
        assert(__pyx_t_8);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
        __pyx_t_18 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[6] = {__pyx_t_8, __pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13, __pyx_t_14};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_18, (6-__pyx_t_18) | (__pyx_t_18*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 539, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }

      /* "src/uharfbuzz/_font.pxi":538
 *                 &count, assembly_array, &italics_correction)
 *             for i in range(count):
 *                 assembly.append(             # <<<<<<<<<<<<<<
 *                     OTMathGlyphPart(assembly_array[i].glyph, assembly_array[i].start_connector_length,
 *                         assembly_array[i].end_connector_length, assembly_array[i].full_advance,
*/
      __pyx_t_19 = __Pyx_PyList_Append(__pyx_v_assembly, __pyx_t_1); if (unlikely(__pyx_t_19 == ((int)-1))) __PYX_ERR(3, 538, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }

    /* "src/uharfbuzz/_font.pxi":542
 *                         assembly_array[i].end_connector_length, assembly_array[i].full_advance,
 *                         OTMathGlyphPartFlags(assembly_array[i].flags)))
 *             start_offset += count             # <<<<<<<<<<<<<<
 *         return assembly, italics_correction
 * 
*/
    __pyx_v_start_offset = (__pyx_v_start_offset + __pyx_v_count);
  }

  /* "src/uharfbuzz/_font.pxi":543
 *                         OTMathGlyphPartFlags(assembly_array[i].flags)))
 *             start_offset += count
 *         return assembly, italics_correction             # <<<<<<<<<<<<<<
 * 
 *     # metrics
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_position_t(__pyx_v_italics_correction); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 543, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_INCREF(__pyx_v_assembly);
  __Pyx_GIVEREF(__pyx_v_assembly);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_assembly) != (0)) __PYX_ERR(3, 543, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_1) != (0)) __PYX_ERR(3, 543, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_9);
  __pyx_t_9 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":523
 *         return variants
 * 
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __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_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_math_glyph_assembly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_assembly);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":546
 * 
 *     # metrics
 *     def get_metric_position(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position = {"get_metric_position", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metric_position (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 546, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 546, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_metric_position", 0) < (0)) __PYX_ERR(3, 546, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_metric_position", 1, 1, 1, i); __PYX_ERR(3, 546, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 546, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metric_position", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 546, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_position", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_64get_metric_position(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_64get_metric_position(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag) {
  hb_position_t __pyx_v_position;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_ot_metrics_tag_t __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_metric_position", 0);

  /* "src/uharfbuzz/_font.pxi":548
 *     def get_metric_position(self, tag: OTMetricsTag) -> int:
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):             # <<<<<<<<<<<<<<
 *             return position
 *         return None
*/
  __pyx_t_1 = ((hb_ot_metrics_tag_t)__Pyx_PyLong_As_hb_ot_metrics_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 548, __pyx_L1_error)
  __pyx_t_2 = (hb_ot_metrics_get_position(__pyx_v_self->_hb_font, __pyx_t_1, (&__pyx_v_position)) != 0);
  if (__pyx_t_2) {

    /* "src/uharfbuzz/_font.pxi":549
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):
 *             return position             # <<<<<<<<<<<<<<
 *         return None
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyLong_From_hb_position_t(__pyx_v_position); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 0) < (0)) __PYX_ERR(3, 549, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":548
 *     def get_metric_position(self, tag: OTMetricsTag) -> int:
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):             # <<<<<<<<<<<<<<
 *             return position
 *         return None
*/
  }

  /* "src/uharfbuzz/_font.pxi":550
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):
 *             return position
 *         return None             # <<<<<<<<<<<<<<
 * 
 *     def get_metric_position_with_fallback(font, tag: OTMetricsTag) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":546
 * 
 *     # metrics
 *     def get_metric_position(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_position", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":552
 *         return None
 * 
 *     def get_metric_position_with_fallback(font, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         hb_ot_metrics_get_position_with_fallback(font._hb_font, tag, &position)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback(PyObject *__pyx_v_font, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback = {"get_metric_position_with_fallback", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback(PyObject *__pyx_v_font, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metric_position_with_fallback (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 552, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 552, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_metric_position_with_fallback", 0) < (0)) __PYX_ERR(3, 552, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_metric_position_with_fallback", 1, 1, 1, i); __PYX_ERR(3, 552, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 552, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metric_position_with_fallback", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 552, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_position_with_fallback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_66get_metric_position_with_fallback(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_font), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_66get_metric_position_with_fallback(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_tag) {
  hb_position_t __pyx_v_position;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_ot_metrics_tag_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_metric_position_with_fallback", 0);

  /* "src/uharfbuzz/_font.pxi":554
 *     def get_metric_position_with_fallback(font, tag: OTMetricsTag) -> int:
 *         cdef hb_position_t position
 *         hb_ot_metrics_get_position_with_fallback(font._hb_font, tag, &position)             # <<<<<<<<<<<<<<
 *         return position
 * 
*/
  __pyx_t_1 = ((hb_ot_metrics_tag_t)__Pyx_PyLong_As_hb_ot_metrics_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 554, __pyx_L1_error)
  hb_ot_metrics_get_position_with_fallback(__pyx_v_font->_hb_font, __pyx_t_1, (&__pyx_v_position));

  /* "src/uharfbuzz/_font.pxi":555
 *         cdef hb_position_t position
 *         hb_ot_metrics_get_position_with_fallback(font._hb_font, tag, &position)
 *         return position             # <<<<<<<<<<<<<<
 * 
 *     def get_metric_variation(self, tag: OTMetricsTag) -> float:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(__pyx_v_position); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 555, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":552
 *         return None
 * 
 *     def get_metric_position_with_fallback(font, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         hb_ot_metrics_get_position_with_fallback(font._hb_font, tag, &position)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_position_with_fallback", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":557
 *         return position
 * 
 *     def get_metric_variation(self, tag: OTMetricsTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation = {"get_metric_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metric_variation (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 557, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 557, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_metric_variation", 0) < (0)) __PYX_ERR(3, 557, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_metric_variation", 1, 1, 1, i); __PYX_ERR(3, 557, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 557, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metric_variation", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 557, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_68get_metric_variation(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_68get_metric_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_ot_metrics_tag_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_metric_variation", 0);

  /* "src/uharfbuzz/_font.pxi":558
 * 
 *     def get_metric_variation(self, tag: OTMetricsTag) -> float:
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)             # <<<<<<<<<<<<<<
 * 
 *     def get_metric_x_variation(self, tag: OTMetricsTag) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((hb_ot_metrics_tag_t)__Pyx_PyLong_As_hb_ot_metrics_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 558, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(hb_ot_metrics_get_variation(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":557
 *         return position
 * 
 *     def get_metric_variation(self, tag: OTMetricsTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":560
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
 *     def get_metric_x_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation = {"get_metric_x_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metric_x_variation (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 560, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 560, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_metric_x_variation", 0) < (0)) __PYX_ERR(3, 560, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_metric_x_variation", 1, 1, 1, i); __PYX_ERR(3, 560, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 560, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metric_x_variation", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 560, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_x_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_70get_metric_x_variation(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_70get_metric_x_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_ot_metrics_tag_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_metric_x_variation", 0);

  /* "src/uharfbuzz/_font.pxi":561
 * 
 *     def get_metric_x_variation(self, tag: OTMetricsTag) -> int:
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)             # <<<<<<<<<<<<<<
 * 
 *     def get_metric_y_variation(self, tag: OTMetricsTag) -> int:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((hb_ot_metrics_tag_t)__Pyx_PyLong_As_hb_ot_metrics_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 561, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_ot_metrics_get_x_variation(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 561, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":560
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
 *     def get_metric_x_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_x_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":563
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
 *     def get_metric_y_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_y_variation(self._hb_font, tag)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation = {"get_metric_y_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_metric_y_variation (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 563, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 563, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_metric_y_variation", 0) < (0)) __PYX_ERR(3, 563, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_metric_y_variation", 1, 1, 1, i); __PYX_ERR(3, 563, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 563, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_metric_y_variation", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 563, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_y_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_72get_metric_y_variation(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_72get_metric_y_variation(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_ot_metrics_tag_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_metric_y_variation", 0);

  /* "src/uharfbuzz/_font.pxi":564
 * 
 *     def get_metric_y_variation(self, tag: OTMetricsTag) -> int:
 *         return hb_ot_metrics_get_y_variation(self._hb_font, tag)             # <<<<<<<<<<<<<<
 * 
 *     # color
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((hb_ot_metrics_tag_t)__Pyx_PyLong_As_hb_ot_metrics_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 564, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(hb_ot_metrics_get_y_variation(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 564, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":563
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
 *     def get_metric_y_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_y_variation(self._hb_font, tag)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_metric_y_variation", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":567
 * 
 *     # color
 *     def get_glyph_color_png(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_png(self._hb_font, glyph)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png = {"get_glyph_color_png", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_glyph_color_png (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 567, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 567, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_glyph_color_png", 0) < (0)) __PYX_ERR(3, 567, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_glyph_color_png", 1, 1, 1, i); __PYX_ERR(3, 567, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 567, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "glyph", 0) < (0)) __PYX_ERR(3, 567, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_glyph_color_png", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 567, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_color_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(3, 567, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_74get_glyph_color_png(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_74get_glyph_color_png(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_glyph) {
  hb_blob_t *__pyx_v_blob;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_glyph_color_png", 0);

  /* "src/uharfbuzz/_font.pxi":569
 *     def get_glyph_color_png(self, glyph: int) -> Blob:
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_png(self._hb_font, glyph)             # <<<<<<<<<<<<<<
 *         return Blob.from_ptr(blob)
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 569, __pyx_L1_error)
  __pyx_v_blob = hb_ot_color_glyph_reference_png(__pyx_v_self->_hb_font, __pyx_t_1);

  /* "src/uharfbuzz/_font.pxi":570
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_png(self._hb_font, glyph)
 *         return Blob.from_ptr(blob)             # <<<<<<<<<<<<<<
 * 
 *     #layout
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr(__pyx_v_blob)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":567
 * 
 *     # color
 *     def get_glyph_color_png(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_png(self._hb_font, glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_glyph_color_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":573
 * 
 *     #layout
 *     def get_layout_baseline(self,             # <<<<<<<<<<<<<<
 *                            baseline_tag: str,
 *                            direction: str,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline = {"get_layout_baseline", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_baseline_tag = 0;
  PyObject *__pyx_v_direction = 0;
  PyObject *__pyx_v_script_tag = 0;
  PyObject *__pyx_v_language_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_layout_baseline (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_baseline_tag,&__pyx_mstate_global->__pyx_n_u_direction,&__pyx_mstate_global->__pyx_n_u_script_tag,&__pyx_mstate_global->__pyx_n_u_language_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 573, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(3, 573, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 573, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 573, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 573, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_layout_baseline", 0) < (0)) __PYX_ERR(3, 573, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_layout_baseline", 1, 4, 4, i); __PYX_ERR(3, 573, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 573, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 573, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(3, 573, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(3, 573, __pyx_L3_error)
    }
    __pyx_v_baseline_tag = ((PyObject*)values[0]);
    __pyx_v_direction = ((PyObject*)values[1]);
    __pyx_v_script_tag = ((PyObject*)values[2]);
    __pyx_v_language_tag = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_layout_baseline", 1, 4, 4, __pyx_nargs); __PYX_ERR(3, 573, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_layout_baseline", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_baseline_tag), (&PyUnicode_Type), 0, "baseline_tag", 2))) __PYX_ERR(3, 574, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(3, 575, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_tag), (&PyUnicode_Type), 0, "script_tag", 2))) __PYX_ERR(3, 576, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_language_tag), (&PyUnicode_Type), 0, "language_tag", 2))) __PYX_ERR(3, 577, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_76get_layout_baseline(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_baseline_tag, __pyx_v_direction, __pyx_v_script_tag, __pyx_v_language_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_76get_layout_baseline(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_baseline_tag, PyObject *__pyx_v_direction, PyObject *__pyx_v_script_tag, PyObject *__pyx_v_language_tag) {
  hb_ot_layout_baseline_tag_t __pyx_v_hb_baseline_tag;
  hb_direction_t __pyx_v_hb_direction;
  hb_tag_t __pyx_v_hb_script_tag;
  hb_tag_t __pyx_v_hb_language_tag;
  hb_position_t __pyx_v_hb_position;
  hb_bool_t __pyx_v_success;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4[3];
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  char *__pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_layout_baseline", 0);

  /* "src/uharfbuzz/_font.pxi":586
 *         cdef bytes packed
 * 
 *         if baseline_tag == "romn":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN
 *         elif baseline_tag == "hang":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_romn, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 586, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":587
 * 
 *         if baseline_tag == "romn":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "hang":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN;

    /* "src/uharfbuzz/_font.pxi":586
 *         cdef bytes packed
 * 
 *         if baseline_tag == "romn":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN
 *         elif baseline_tag == "hang":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":588
 *         if baseline_tag == "romn":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN
 *         elif baseline_tag == "hang":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
 *         elif baseline_tag == "icfb":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_hang, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 588, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":589
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN
 *         elif baseline_tag == "hang":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "icfb":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING;

    /* "src/uharfbuzz/_font.pxi":588
 *         if baseline_tag == "romn":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_ROMAN
 *         elif baseline_tag == "hang":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
 *         elif baseline_tag == "icfb":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":590
 *         elif baseline_tag == "hang":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
 *         elif baseline_tag == "icfb":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
 *         elif baseline_tag == "icft":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_icfb, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 590, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":591
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
 *         elif baseline_tag == "icfb":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "icft":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT;

    /* "src/uharfbuzz/_font.pxi":590
 *         elif baseline_tag == "hang":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_HANGING
 *         elif baseline_tag == "icfb":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
 *         elif baseline_tag == "icft":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":592
 *         elif baseline_tag == "icfb":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
 *         elif baseline_tag == "icft":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
 *         elif baseline_tag == "ideo":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_icft, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 592, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":593
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
 *         elif baseline_tag == "icft":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "ideo":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT;

    /* "src/uharfbuzz/_font.pxi":592
 *         elif baseline_tag == "icfb":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT
 *         elif baseline_tag == "icft":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
 *         elif baseline_tag == "ideo":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":594
 *         elif baseline_tag == "icft":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
 *         elif baseline_tag == "ideo":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
 *         elif baseline_tag == "idtp":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_ideo, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 594, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":595
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
 *         elif baseline_tag == "ideo":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "idtp":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT;

    /* "src/uharfbuzz/_font.pxi":594
 *         elif baseline_tag == "icft":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT
 *         elif baseline_tag == "ideo":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
 *         elif baseline_tag == "idtp":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":596
 *         elif baseline_tag == "ideo":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
 *         elif baseline_tag == "idtp":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
 *         elif baseline_tag == "math":
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_idtp, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 596, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":597
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
 *         elif baseline_tag == "idtp":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT             # <<<<<<<<<<<<<<
 *         elif baseline_tag == "math":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT;

    /* "src/uharfbuzz/_font.pxi":596
 *         elif baseline_tag == "ideo":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT
 *         elif baseline_tag == "idtp":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
 *         elif baseline_tag == "math":
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":598
 *         elif baseline_tag == "idtp":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
 *         elif baseline_tag == "math":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH
 *         else:
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_baseline_tag, __pyx_mstate_global->__pyx_n_u_math, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(3, 598, __pyx_L1_error)
  if (likely(__pyx_t_1)) {

    /* "src/uharfbuzz/_font.pxi":599
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
 *         elif baseline_tag == "math":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError(f"invalid baseline tag '{baseline_tag}'")
*/
    __pyx_v_hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH;

    /* "src/uharfbuzz/_font.pxi":598
 *         elif baseline_tag == "idtp":
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT
 *         elif baseline_tag == "math":             # <<<<<<<<<<<<<<
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_font.pxi":601
 *             hb_baseline_tag = HB_OT_LAYOUT_BASELINE_TAG_MATH
 *         else:
 *             raise ValueError(f"invalid baseline tag '{baseline_tag}'")             # <<<<<<<<<<<<<<
 *         packed = direction.encode()
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
*/
  /*else*/ {
    __pyx_t_3 = NULL;
    __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_invalid_baseline_tag;
    __pyx_t_4[1] = __pyx_v_baseline_tag;
    __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u__8;
    __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 22 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_baseline_tag) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_baseline_tag));
    if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 601, __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(3, 601, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_font.pxi":602
 *         else:
 *             raise ValueError(f"invalid baseline tag '{baseline_tag}'")
 *         packed = direction.encode()             # <<<<<<<<<<<<<<
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
 *         packed = script_tag.encode()
*/
  __pyx_t_2 = PyUnicode_AsEncodedString(__pyx_v_direction, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_packed = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":603
 *             raise ValueError(f"invalid baseline tag '{baseline_tag}'")
 *         packed = direction.encode()
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         packed = script_tag.encode()
 *         hb_script_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(3, 603, __pyx_L1_error)
  __pyx_v_hb_direction = hb_direction_from_string(((char *)__pyx_t_7), -1);

  /* "src/uharfbuzz/_font.pxi":604
 *         packed = direction.encode()
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
 *         packed = script_tag.encode()             # <<<<<<<<<<<<<<
 *         hb_script_tag = hb_tag_from_string(<char*>packed, -1)
 *         packed = language_tag.encode()
*/
  __pyx_t_2 = PyUnicode_AsEncodedString(__pyx_v_script_tag, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":605
 *         hb_direction = hb_direction_from_string(<char*>packed, -1)
 *         packed = script_tag.encode()
 *         hb_script_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         packed = language_tag.encode()
 *         hb_language_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(3, 605, __pyx_L1_error)
  __pyx_v_hb_script_tag = hb_tag_from_string(((char *)__pyx_t_7), -1);

  /* "src/uharfbuzz/_font.pxi":606
 *         packed = script_tag.encode()
 *         hb_script_tag = hb_tag_from_string(<char*>packed, -1)
 *         packed = language_tag.encode()             # <<<<<<<<<<<<<<
 *         hb_language_tag = hb_tag_from_string(<char*>packed, -1)
 *         success = hb_ot_layout_get_baseline(self._hb_font,
*/
  __pyx_t_2 = PyUnicode_AsEncodedString(__pyx_v_language_tag, NULL, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":607
 *         hb_script_tag = hb_tag_from_string(<char*>packed, -1)
 *         packed = language_tag.encode()
 *         hb_language_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *         success = hb_ot_layout_get_baseline(self._hb_font,
 *                                             hb_baseline_tag,
*/
  __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(3, 607, __pyx_L1_error)
  __pyx_v_hb_language_tag = hb_tag_from_string(((char *)__pyx_t_7), -1);

  /* "src/uharfbuzz/_font.pxi":608
 *         packed = language_tag.encode()
 *         hb_language_tag = hb_tag_from_string(<char*>packed, -1)
 *         success = hb_ot_layout_get_baseline(self._hb_font,             # <<<<<<<<<<<<<<
 *                                             hb_baseline_tag,
 *                                             hb_direction,
*/
  __pyx_v_success = hb_ot_layout_get_baseline(__pyx_v_self->_hb_font, __pyx_v_hb_baseline_tag, __pyx_v_hb_direction, __pyx_v_hb_script_tag, __pyx_v_hb_language_tag, (&__pyx_v_hb_position));

  /* "src/uharfbuzz/_font.pxi":614
 *                                             hb_language_tag,
 *                                             &hb_position)
 *         if success:             # <<<<<<<<<<<<<<
 *             return hb_position
 *         else:
*/
  __pyx_t_1 = (__pyx_v_success != 0);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_font.pxi":615
 *                                             &hb_position)
 *         if success:
 *             return hb_position             # <<<<<<<<<<<<<<
 *         else:
 *             return None
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __Pyx_PyLong_From_hb_position_t(__pyx_v_hb_position); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 615, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_PyInt_FromNumber(&__pyx_t_2, NULL, 0) < (0)) __PYX_ERR(3, 615, __pyx_L1_error)
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":614
 *                                             hb_language_tag,
 *                                             &hb_position)
 *         if success:             # <<<<<<<<<<<<<<
 *             return hb_position
 *         else:
*/
  }

  /* "src/uharfbuzz/_font.pxi":617
 *             return hb_position
 *         else:
 *             return None             # <<<<<<<<<<<<<<
 * 
 *     # style
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }

  /* "src/uharfbuzz/_font.pxi":573
 * 
 *     #layout
 *     def get_layout_baseline(self,             # <<<<<<<<<<<<<<
 *                            baseline_tag: str,
 *                            direction: str,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_layout_baseline", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":620
 * 
 *     # style
 *     def get_style_value(self, tag: StyleTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_style_get_value(self._hb_font, tag)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_79get_style_value(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_79get_style_value = {"get_style_value", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_79get_style_value, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_79get_style_value(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_style_value (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 620, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 620, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_style_value", 0) < (0)) __PYX_ERR(3, 620, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_style_value", 1, 1, 1, i); __PYX_ERR(3, 620, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 620, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_style_value", 1, 1, 1, __pyx_nargs); __PYX_ERR(3, 620, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_style_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_78get_style_value(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_78get_style_value(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_style_tag_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_style_value", 0);

  /* "src/uharfbuzz/_font.pxi":621
 *     # style
 *     def get_style_value(self, tag: StyleTag) -> float:
 *         return hb_style_get_value(self._hb_font, tag)             # <<<<<<<<<<<<<<
 * 
 * cdef struct _pen_methods:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((hb_style_tag_t)__Pyx_PyLong_As_hb_style_tag_t(__pyx_v_tag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(3, 621, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(hb_style_get_value(__pyx_v_self->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 621, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":620
 * 
 *     # style
 *     def get_style_value(self, tag: StyleTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_style_get_value(self._hb_font, tag)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.get_style_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_80__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_80__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4Font_82__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4Font_82__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.Font.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":632
 * cdef hb_draw_funcs_t* drawfuncs = NULL
 * 
 * cdef void _pen_move_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                             void *draw_data,
 *                             hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_move_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_to_x, float __pyx_v_to_y, CYTHON_UNUSED void *__pyx_v_user_data) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_pen_move_to_func", 0);

  /* "src/uharfbuzz/_font.pxi":638
 *                             float to_y,
 *                             void *user_data) noexcept:
 *     (<object>((<_pen_methods*>draw_data).moveTo))((to_x, to_y))             # <<<<<<<<<<<<<<
 * 
 * cdef void _pen_line_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->moveTo));
  __pyx_t_3 = ((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->moveTo); 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 638, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 638, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 638, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 638, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":632
 * cdef hb_draw_funcs_t* drawfuncs = NULL
 * 
 * cdef void _pen_move_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                             void *draw_data,
 *                             hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._pen_move_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_font.pxi":640
 *     (<object>((<_pen_methods*>draw_data).moveTo))((to_x, to_y))
 * 
 * cdef void _pen_line_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                             void *draw_data,
 *                             hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_line_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_to_x, float __pyx_v_to_y, CYTHON_UNUSED void *__pyx_v_user_data) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_pen_line_to_func", 0);

  /* "src/uharfbuzz/_font.pxi":646
 *                             float to_y,
 *                             void *user_data) noexcept:
 *     (<object>((<_pen_methods*>draw_data).lineTo))((to_x, to_y))             # <<<<<<<<<<<<<<
 * 
 * cdef void _pen_close_path_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->lineTo));
  __pyx_t_3 = ((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->lineTo); 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 646, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 646, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_6};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":640
 *     (<object>((<_pen_methods*>draw_data).moveTo))((to_x, to_y))
 * 
 * cdef void _pen_line_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                             void *draw_data,
 *                             hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._pen_line_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_font.pxi":648
 *     (<object>((<_pen_methods*>draw_data).lineTo))((to_x, to_y))
 * 
 * cdef void _pen_close_path_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                                void *draw_data,
 *                                hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_close_path_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, CYTHON_UNUSED void *__pyx_v_user_data) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_pen_close_path_func", 0);

  /* "src/uharfbuzz/_font.pxi":652
 *                                hb_draw_state_t *st,
 *                                void *user_data) noexcept:
 *     (<object>((<_pen_methods*>draw_data).closePath))()             # <<<<<<<<<<<<<<
 * 
 * cdef void _pen_quadratic_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->closePath));
  __pyx_t_3 = ((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->closePath); 
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 652, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":648
 *     (<object>((<_pen_methods*>draw_data).lineTo))((to_x, to_y))
 * 
 * cdef void _pen_close_path_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                                void *draw_data,
 *                                hb_draw_state_t *st,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._pen_close_path_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_font.pxi":654
 *     (<object>((<_pen_methods*>draw_data).closePath))()
 * 
 * cdef void _pen_quadratic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                                  void *draw_data,
 *                                  hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_quadratic_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_c1_x, float __pyx_v_c1_y, float __pyx_v_to_x, float __pyx_v_to_y, CYTHON_UNUSED void *__pyx_v_user_data) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_pen_quadratic_to_func", 0);

  /* "src/uharfbuzz/_font.pxi":662
 *                                  float to_y,
 *                                  void *user_data) noexcept:
 *     (<object>((<_pen_methods*>draw_data).qCurveTo))((c1_x, c1_y), (to_x, to_y))             # <<<<<<<<<<<<<<
 * 
 * cdef void _pen_cubic_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->qCurveTo));
  __pyx_t_3 = ((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->qCurveTo); 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_c1_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_c1_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 662, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 662, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5) != (0)) __PYX_ERR(3, 662, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4) != (0)) __PYX_ERR(3, 662, __pyx_L1_error);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_8 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_8 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_t_6, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_8, (3-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 662, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":654
 *     (<object>((<_pen_methods*>draw_data).closePath))()
 * 
 * cdef void _pen_quadratic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                                  void *draw_data,
 *                                  hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._pen_quadratic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_font.pxi":664
 *     (<object>((<_pen_methods*>draw_data).qCurveTo))((c1_x, c1_y), (to_x, to_y))
 * 
 * cdef void _pen_cubic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                              void *draw_data,
 *                              hb_draw_state_t *st,
*/

static void __pyx_f_9uharfbuzz_9_harfbuzz__pen_cubic_to_func(CYTHON_UNUSED hb_draw_funcs_t *__pyx_v_dfuncs, void *__pyx_v_draw_data, CYTHON_UNUSED hb_draw_state_t *__pyx_v_st, float __pyx_v_c1_x, float __pyx_v_c1_y, float __pyx_v_c2_x, float __pyx_v_c2_y, float __pyx_v_to_x, float __pyx_v_to_y, CYTHON_UNUSED void *__pyx_v_user_data) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_pen_cubic_to_func", 0);

  /* "src/uharfbuzz/_font.pxi":674
 *                              float to_y,
 *                              void *user_data) noexcept:
 *     (<object>((<_pen_methods*>draw_data).curveTo))((c1_x, c1_y), (c2_x, c2_y), (to_x, to_y))             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __Pyx_INCREF(((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->curveTo));
  __pyx_t_3 = ((PyObject *)((struct __pyx_t_9uharfbuzz_9_harfbuzz__pen_methods *)__pyx_v_draw_data)->curveTo); 
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_c1_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_c1_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_c2_x); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_c2_y); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __pyx_t_5 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_to_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_to_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(3, 674, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5) != (0)) __PYX_ERR(3, 674, __pyx_L1_error);
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_t_6, __pyx_t_7, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (4-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 674, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":664
 *     (<object>((<_pen_methods*>draw_data).qCurveTo))((c1_x, c1_y), (to_x, to_y))
 * 
 * cdef void _pen_cubic_to_func(hb_draw_funcs_t *dfuncs,             # <<<<<<<<<<<<<<
 *                              void *draw_data,
 *                              hb_draw_state_t *st,
*/

  /* 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_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._pen_cubic_to_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}

/* "src/uharfbuzz/_font.pxi":677
 * 
 * 
 * cdef hb_position_t _glyph_h_advance_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
*/

static hb_position_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_h_advance_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_glyph, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  hb_position_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  hb_position_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_glyph_h_advance_func", 0);

  /* "src/uharfbuzz/_font.pxi":680
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     return (<FontFuncs>py_font.funcs)._glyph_h_advance_func(
 *         py_font, glyph, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":681
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_h_advance_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 681, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_h_advance_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_h_advance_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":682
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_h_advance_func(
 *         py_font, glyph, <object>user_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), __pyx_t_3, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 681, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }

  /* "src/uharfbuzz/_font.pxi":681
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_h_advance_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 * 
*/
  __pyx_t_6 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 681, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":677
 * 
 * 
 * cdef hb_position_t _glyph_h_advance_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._glyph_h_advance_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":685
 * 
 * 
 * cdef hb_position_t _glyph_v_advance_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
*/

static hb_position_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_advance_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_glyph, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  hb_position_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  hb_position_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_glyph_v_advance_func", 0);

  /* "src/uharfbuzz/_font.pxi":688
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     return (<FontFuncs>py_font.funcs)._glyph_v_advance_func(
 *         py_font, glyph, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":689
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_v_advance_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 689, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_v_advance_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_v_advance_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":690
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_v_advance_func(
 *         py_font, glyph, <object>user_data)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), __pyx_t_3, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 689, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }

  /* "src/uharfbuzz/_font.pxi":689
 *                                          void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     return (<FontFuncs>py_font.funcs)._glyph_v_advance_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 * 
*/
  __pyx_t_6 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 689, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":685
 * 
 * 
 * cdef hb_position_t _glyph_v_advance_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                          hb_codepoint_t glyph,
 *                                          void* user_data) noexcept:
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._glyph_v_advance_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":693
 * 
 * 
 * cdef hb_bool_t _glyph_v_origin_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_codepoint_t glyph,
 *                                     hb_position_t* x, hb_position_t* y,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_origin_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_glyph, hb_position_t *__pyx_v_x, hb_position_t *__pyx_v_y, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  hb_bool_t __pyx_v_success;
  hb_position_t __pyx_v_px;
  hb_position_t __pyx_v_py;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  hb_bool_t __pyx_t_8;
  hb_position_t __pyx_t_9;
  hb_position_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_glyph_v_origin_func", 0);

  /* "src/uharfbuzz/_font.pxi":697
 *                                     hb_position_t* x, hb_position_t* y,
 *                                     void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     cdef hb_bool_t success
 *     cdef hb_position_t px
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":701
 *     cdef hb_position_t px
 *     cdef hb_position_t py
 *     success, px, py = (<FontFuncs>py_font.funcs)._glyph_v_origin_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 *     x[0] = px
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 701, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_v_origin_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_glyph_v_origin_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":702
 *     cdef hb_position_t py
 *     success, px, py = (<FontFuncs>py_font.funcs)._glyph_v_origin_func(
 *         py_font, glyph, <object>user_data)             # <<<<<<<<<<<<<<
 *     x[0] = px
 *     y[0] = py
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 702, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), __pyx_t_3, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 701, __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 != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(3, 701, __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_INCREF(__pyx_t_4);
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 2);
      __Pyx_INCREF(__pyx_t_2);
    } else {
      __pyx_t_4 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 701, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 701, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
      if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 701, __pyx_L1_error)
      __Pyx_XGOTREF(__pyx_t_2);
    }
    #else
    __pyx_t_4 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(3, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 701, __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_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(3, 701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6);
    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_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 2; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 3) < (0)) __PYX_ERR(3, 701, __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(3, 701, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }

  /* "src/uharfbuzz/_font.pxi":701
 *     cdef hb_position_t px
 *     cdef hb_position_t py
 *     success, px, py = (<FontFuncs>py_font.funcs)._glyph_v_origin_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data)
 *     x[0] = px
*/
  __pyx_t_8 = __Pyx_PyLong_As_hb_bool_t(__pyx_t_4); if (unlikely((__pyx_t_8 == ((hb_bool_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 701, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_9 = __Pyx_PyLong_As_hb_position_t(__pyx_t_3); if (unlikely((__pyx_t_9 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 701, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_10 = __Pyx_PyLong_As_hb_position_t(__pyx_t_2); if (unlikely((__pyx_t_10 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 701, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_success = __pyx_t_8;
  __pyx_v_px = __pyx_t_9;
  __pyx_v_py = __pyx_t_10;

  /* "src/uharfbuzz/_font.pxi":703
 *     success, px, py = (<FontFuncs>py_font.funcs)._glyph_v_origin_func(
 *         py_font, glyph, <object>user_data)
 *     x[0] = px             # <<<<<<<<<<<<<<
 *     y[0] = py
 *     return success
*/
  (__pyx_v_x[0]) = __pyx_v_px;

  /* "src/uharfbuzz/_font.pxi":704
 *         py_font, glyph, <object>user_data)
 *     x[0] = px
 *     y[0] = py             # <<<<<<<<<<<<<<
 *     return success
 * 
*/
  (__pyx_v_y[0]) = __pyx_v_py;

  /* "src/uharfbuzz/_font.pxi":705
 *     x[0] = px
 *     y[0] = py
 *     return success             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __pyx_v_success;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":693
 * 
 * 
 * cdef hb_bool_t _glyph_v_origin_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_codepoint_t glyph,
 *                                     hb_position_t* x, hb_position_t* y,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._glyph_v_origin_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":708
 * 
 * 
 * cdef hb_bool_t _glyph_name_func(hb_font_t *font, void *font_data,             # <<<<<<<<<<<<<<
 *                                 hb_codepoint_t glyph,
 *                                 char *name, unsigned int size,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__glyph_name_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_glyph, char *__pyx_v_name, CYTHON_UNUSED unsigned int __pyx_v_size, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  PyObject *__pyx_v_ret = 0;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  char __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_glyph_name_func", 0);

  /* "src/uharfbuzz/_font.pxi":712
 *                                 char *name, unsigned int size,
 *                                 void *user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     cdef bytes ret = (<FontFuncs>py_font.funcs)._glyph_name_func(
 *         py_font, glyph, <object>user_data).encode()
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":713
 *                                 void *user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     cdef bytes ret = (<FontFuncs>py_font.funcs)._glyph_name_func(             # <<<<<<<<<<<<<<
 *         py_font, glyph, <object>user_data).encode()
 *     name[0] = ret
*/
  __pyx_t_4 = NULL;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_5)->_glyph_name_func);
  __pyx_t_6 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_5)->_glyph_name_func; 
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":714
 *     cdef Font py_font = <Font>font_data
 *     cdef bytes ret = (<FontFuncs>py_font.funcs)._glyph_name_func(
 *         py_font, glyph, <object>user_data).encode()             # <<<<<<<<<<<<<<
 *     name[0] = ret
 *     return 1
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_6))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
    assert(__pyx_t_4);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_6);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_6, __pyx__function);
    __pyx_t_7 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_4, ((PyObject *)__pyx_v_py_font), __pyx_t_5, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_6, __pyx_callargs+__pyx_t_7, (4-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 713, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
  }
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_7 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_7, (1-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(3, 714, __pyx_L1_error)
  __pyx_v_ret = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":715
 *     cdef bytes ret = (<FontFuncs>py_font.funcs)._glyph_name_func(
 *         py_font, glyph, <object>user_data).encode()
 *     name[0] = ret             # <<<<<<<<<<<<<<
 *     return 1
 * 
*/
  __pyx_t_8 = __Pyx_PyLong_As_char(__pyx_v_ret); if (unlikely((__pyx_t_8 == (char)-1) && PyErr_Occurred())) __PYX_ERR(3, 715, __pyx_L1_error)
  (__pyx_v_name[0]) = __pyx_t_8;

  /* "src/uharfbuzz/_font.pxi":716
 *         py_font, glyph, <object>user_data).encode()
 *     name[0] = ret
 *     return 1             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":708
 * 
 * 
 * cdef hb_bool_t _glyph_name_func(hb_font_t *font, void *font_data,             # <<<<<<<<<<<<<<
 *                                 hb_codepoint_t glyph,
 *                                 char *name, unsigned int size,
*/

  /* 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_6);
  __Pyx_WriteUnraisable("uharfbuzz._harfbuzz._glyph_name_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":719
 * 
 * 
 * cdef hb_bool_t _nominal_glyph_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                    hb_codepoint_t unicode,
 *                                    hb_codepoint_t* glyph,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__nominal_glyph_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_unicode, hb_codepoint_t *__pyx_v_glyph, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  hb_codepoint_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_nominal_glyph_func", 0);

  /* "src/uharfbuzz/_font.pxi":723
 *                                    hb_codepoint_t* glyph,
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     glyph[0] = (<FontFuncs>py_font.funcs)._nominal_glyph_func(
 *         py_font, unicode, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":724
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._nominal_glyph_func(             # <<<<<<<<<<<<<<
 *         py_font, unicode, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_nominal_glyph_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_nominal_glyph_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":725
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._nominal_glyph_func(
 *         py_font, unicode, <object>user_data)             # <<<<<<<<<<<<<<
 *     # If the glyph is .notdef, return false, else return true
 *     return int(glyph[0] != 0)
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), __pyx_t_3, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (4-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 724, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }

  /* "src/uharfbuzz/_font.pxi":724
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._nominal_glyph_func(             # <<<<<<<<<<<<<<
 *         py_font, unicode, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
*/
  __pyx_t_6 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_t_1); if (unlikely((__pyx_t_6 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 724, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_glyph[0]) = __pyx_t_6;

  /* "src/uharfbuzz/_font.pxi":727
 *         py_font, unicode, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
 *     return int(glyph[0] != 0)             # <<<<<<<<<<<<<<
 * 
 * cdef hb_bool_t _variation_glyph_func(hb_font_t* font, void* font_data,
*/
  __pyx_r = ((hb_bool_t)((__pyx_v_glyph[0]) != 0));
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":719
 * 
 * 
 * cdef hb_bool_t _nominal_glyph_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                    hb_codepoint_t unicode,
 *                                    hb_codepoint_t* glyph,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._nominal_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":729
 *     return int(glyph[0] != 0)
 * 
 * cdef hb_bool_t _variation_glyph_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                    hb_codepoint_t unicode,
 *                                    hb_codepoint_t variation_selector,
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__variation_glyph_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_codepoint_t __pyx_v_unicode, hb_codepoint_t __pyx_v_variation_selector, hb_codepoint_t *__pyx_v_glyph, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  hb_codepoint_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_variation_glyph_func", 0);

  /* "src/uharfbuzz/_font.pxi":734
 *                                    hb_codepoint_t* glyph,
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     glyph[0] = (<FontFuncs>py_font.funcs)._variation_glyph_func(
 *         py_font, unicode, variation_selector, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":735
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._variation_glyph_func(             # <<<<<<<<<<<<<<
 *         py_font, unicode, variation_selector, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 735, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_variation_glyph_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_variation_glyph_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":736
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._variation_glyph_func(
 *         py_font, unicode, variation_selector, <object>user_data)             # <<<<<<<<<<<<<<
 *     # If the glyph is .notdef, return false, else return true
 *     return int(glyph[0] != 0)
*/
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_variation_selector); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 736, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), __pyx_t_3, __pyx_t_5, ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (5-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 735, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }

  /* "src/uharfbuzz/_font.pxi":735
 *                                    void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     glyph[0] = (<FontFuncs>py_font.funcs)._variation_glyph_func(             # <<<<<<<<<<<<<<
 *         py_font, unicode, variation_selector, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
*/
  __pyx_t_7 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 735, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  (__pyx_v_glyph[0]) = __pyx_t_7;

  /* "src/uharfbuzz/_font.pxi":738
 *         py_font, unicode, variation_selector, <object>user_data)
 *     # If the glyph is .notdef, return false, else return true
 *     return int(glyph[0] != 0)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((hb_bool_t)((__pyx_v_glyph[0]) != 0));
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":729
 *     return int(glyph[0] != 0)
 * 
 * cdef hb_bool_t _variation_glyph_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                    hb_codepoint_t unicode,
 *                                    hb_codepoint_t variation_selector,
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._variation_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":741
 * 
 * 
 * cdef hb_bool_t _font_h_extents_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__font_h_extents_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_font_extents_t *__pyx_v_extents, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  PyObject *__pyx_v_font_extents = NULL;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_t_6;
  hb_position_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_font_h_extents_func", 0);

  /* "src/uharfbuzz/_font.pxi":744
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     font_extents = (<FontFuncs>py_font.funcs)._font_h_extents_func(
 *         py_font, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":745
 *                                     void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     font_extents = (<FontFuncs>py_font.funcs)._font_h_extents_func(             # <<<<<<<<<<<<<<
 *         py_font, <object>user_data)
 *     if font_extents is not None:
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 745, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_font_h_extents_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_font_h_extents_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":746
 *     cdef Font py_font = <Font>font_data
 *     font_extents = (<FontFuncs>py_font.funcs)._font_h_extents_func(
 *         py_font, <object>user_data)             # <<<<<<<<<<<<<<
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:
*/
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 745, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_font_extents = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":747
 *     font_extents = (<FontFuncs>py_font.funcs)._font_h_extents_func(
 *         py_font, <object>user_data)
 *     if font_extents is not None:             # <<<<<<<<<<<<<<
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
*/
  __pyx_t_6 = (__pyx_v_font_extents != Py_None);
  if (__pyx_t_6) {

    /* "src/uharfbuzz/_font.pxi":748
 *         py_font, <object>user_data)
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:             # <<<<<<<<<<<<<<
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_ascender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 748, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":749
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender             # <<<<<<<<<<<<<<
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_ascender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 749, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 749, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->ascender = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":748
 *         py_font, <object>user_data)
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:             # <<<<<<<<<<<<<<
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
*/
    }

    /* "src/uharfbuzz/_font.pxi":750
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:             # <<<<<<<<<<<<<<
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_descender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 750, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":751
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender             # <<<<<<<<<<<<<<
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_descender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 751, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 751, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->descender = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":750
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:             # <<<<<<<<<<<<<<
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
*/
    }

    /* "src/uharfbuzz/_font.pxi":752
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:             # <<<<<<<<<<<<<<
 *             extents.line_gap = font_extents.line_gap
 *         return 1
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_line_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 752, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":753
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_line_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 753, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 753, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->line_gap = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":752
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:             # <<<<<<<<<<<<<<
 *             extents.line_gap = font_extents.line_gap
 *         return 1
*/
    }

    /* "src/uharfbuzz/_font.pxi":754
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":747
 *     font_extents = (<FontFuncs>py_font.funcs)._font_h_extents_func(
 *         py_font, <object>user_data)
 *     if font_extents is not None:             # <<<<<<<<<<<<<<
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
*/
  }

  /* "src/uharfbuzz/_font.pxi":755
 *             extents.line_gap = font_extents.line_gap
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":741
 * 
 * 
 * cdef hb_bool_t _font_h_extents_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._font_h_extents_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_XDECREF(__pyx_v_font_extents);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":758
 * 
 * 
 * cdef hb_bool_t _font_v_extents_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
*/

static hb_bool_t __pyx_f_9uharfbuzz_9_harfbuzz__font_v_extents_func(CYTHON_UNUSED hb_font_t *__pyx_v_font, void *__pyx_v_font_data, hb_font_extents_t *__pyx_v_extents, void *__pyx_v_user_data) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_py_font = 0;
  PyObject *__pyx_v_font_extents = NULL;
  hb_bool_t __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_t_6;
  hb_position_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_font_v_extents_func", 0);

  /* "src/uharfbuzz/_font.pxi":761
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data             # <<<<<<<<<<<<<<
 *     font_extents = (<FontFuncs>py_font.funcs)._font_v_extents_func(
 *         py_font, <object>user_data)
*/
  __pyx_t_1 = ((PyObject *)__pyx_v_font_data);
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_py_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":762
 *                                     void* user_data) noexcept:
 *     cdef Font py_font = <Font>font_data
 *     font_extents = (<FontFuncs>py_font.funcs)._font_v_extents_func(             # <<<<<<<<<<<<<<
 *         py_font, <object>user_data)
 *     if font_extents is not None:
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_py_font), __pyx_mstate_global->__pyx_n_u_funcs); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 762, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_font_v_extents_func);
  __pyx_t_4 = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_3)->_font_v_extents_func; 
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "src/uharfbuzz/_font.pxi":763
 *     cdef Font py_font = <Font>font_data
 *     font_extents = (<FontFuncs>py_font.funcs)._font_v_extents_func(
 *         py_font, <object>user_data)             # <<<<<<<<<<<<<<
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:
*/
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_v_py_font), ((PyObject *)__pyx_v_user_data)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (3-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 762, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_v_font_extents = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":764
 *     font_extents = (<FontFuncs>py_font.funcs)._font_v_extents_func(
 *         py_font, <object>user_data)
 *     if font_extents is not None:             # <<<<<<<<<<<<<<
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
*/
  __pyx_t_6 = (__pyx_v_font_extents != Py_None);
  if (__pyx_t_6) {

    /* "src/uharfbuzz/_font.pxi":765
 *         py_font, <object>user_data)
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:             # <<<<<<<<<<<<<<
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_ascender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 765, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":766
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender             # <<<<<<<<<<<<<<
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_ascender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 766, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 766, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->ascender = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":765
 *         py_font, <object>user_data)
 *     if font_extents is not None:
 *         if font_extents.ascender is not None:             # <<<<<<<<<<<<<<
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
*/
    }

    /* "src/uharfbuzz/_font.pxi":767
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:             # <<<<<<<<<<<<<<
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_descender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":768
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender             # <<<<<<<<<<<<<<
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_descender); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 768, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 768, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->descender = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":767
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
 *         if font_extents.descender is not None:             # <<<<<<<<<<<<<<
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
*/
    }

    /* "src/uharfbuzz/_font.pxi":769
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:             # <<<<<<<<<<<<<<
 *             extents.line_gap = font_extents.line_gap
 *         return 1
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_line_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 769, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = (__pyx_t_1 != Py_None);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_6) {

      /* "src/uharfbuzz/_font.pxi":770
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap             # <<<<<<<<<<<<<<
 *         return 1
 *     return 0
*/
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_font_extents, __pyx_mstate_global->__pyx_n_u_line_gap); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_7 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_7 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(3, 770, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_extents->line_gap = __pyx_t_7;

      /* "src/uharfbuzz/_font.pxi":769
 *         if font_extents.descender is not None:
 *             extents.descender = font_extents.descender
 *         if font_extents.line_gap is not None:             # <<<<<<<<<<<<<<
 *             extents.line_gap = font_extents.line_gap
 *         return 1
*/
    }

    /* "src/uharfbuzz/_font.pxi":771
 *         if font_extents.line_gap is not None:
 *             extents.line_gap = font_extents.line_gap
 *         return 1             # <<<<<<<<<<<<<<
 *     return 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "src/uharfbuzz/_font.pxi":764
 *     font_extents = (<FontFuncs>py_font.funcs)._font_v_extents_func(
 *         py_font, <object>user_data)
 *     if font_extents is not None:             # <<<<<<<<<<<<<<
 *         if font_extents.ascender is not None:
 *             extents.ascender = font_extents.ascender
*/
  }

  /* "src/uharfbuzz/_font.pxi":772
 *             extents.line_gap = font_extents.line_gap
 *         return 1
 *     return 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":758
 * 
 * 
 * cdef hb_bool_t _font_v_extents_func(hb_font_t* font, void* font_data,             # <<<<<<<<<<<<<<
 *                                     hb_font_extents_t *extents,
 *                                     void* user_data) noexcept:
*/

  /* 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_WriteUnraisable("uharfbuzz._harfbuzz._font_v_extents_func", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_py_font);
  __Pyx_XDECREF(__pyx_v_font_extents);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":786
 *     cdef object _font_v_extents_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_ffuncs = hb_font_funcs_create()
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_font.pxi":787
 * 
 *     def __cinit__(self):
 *         self._hb_ffuncs = hb_font_funcs_create()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_v_self->_hb_ffuncs = hb_font_funcs_create();

  /* "src/uharfbuzz/_font.pxi":786
 *     cdef object _font_v_extents_func
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_ffuncs = hb_font_funcs_create()
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":789
 *         self._hb_ffuncs = hb_font_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_destroy(self._hb_ffuncs)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self) {

  /* "src/uharfbuzz/_font.pxi":790
 * 
 *     def __dealloc__(self):
 *         hb_font_funcs_destroy(self._hb_ffuncs)             # <<<<<<<<<<<<<<
 * 
 *     # DEPRECATED: use the normal constructor
*/
  hb_font_funcs_destroy(__pyx_v_self->_hb_ffuncs);

  /* "src/uharfbuzz/_font.pxi":789
 *         self._hb_ffuncs = hb_font_funcs_create()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_destroy(self._hb_ffuncs)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_font.pxi":793
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> FontFuncs:
 *         cdef FontFuncs inst = cls()
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_5create = {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_5create(PyObject *__pyx_v_cls, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("create (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("create", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("create", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_4create(((PyTypeObject*)__pyx_v_cls));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_4create(PyTypeObject *__pyx_v_cls) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_inst = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("create", 0);

  /* "src/uharfbuzz/_font.pxi":795
 *     @classmethod
 *     def create(cls) -> FontFuncs:
 *         cdef FontFuncs inst = cls()             # <<<<<<<<<<<<<<
 *         return inst
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_3 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (__pyx_t_3*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs))))) __PYX_ERR(3, 795, __pyx_L1_error)
  __pyx_v_inst = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_font.pxi":796
 *     def create(cls) -> FontFuncs:
 *         cdef FontFuncs inst = cls()
 *         return inst             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_h_advance_func(self,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_inst);
  __pyx_r = __pyx_v_inst;
  goto __pyx_L0;

  /* "src/uharfbuzz/_font.pxi":793
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> FontFuncs:
 *         cdef FontFuncs inst = cls()
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_inst);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":798
 *         return inst
 * 
 *     def set_glyph_h_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func = {"set_glyph_h_advance_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_h_advance_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 798, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 798, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 798, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_h_advance_func", 0) < (0)) __PYX_ERR(3, 798, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":804
 *                                      object,  # user_data
 *                                  ], int],  # h_advance
 *                                  user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_glyph_h_advance_func(
 *             self._hb_ffuncs, _glyph_h_advance_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_h_advance_func", 0, 1, 2, i); __PYX_ERR(3, 798, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 798, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 798, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_h_advance_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 798, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_glyph_h_advance_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_6set_glyph_h_advance_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":798
 *         return inst
 * 
 *     def set_glyph_h_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_6set_glyph_h_advance_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_h_advance_func", 0);

  /* "src/uharfbuzz/_font.pxi":805
 *                                  ], int],  # h_advance
 *                                  user_data: object = None):
 *         hb_font_funcs_set_glyph_h_advance_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _glyph_h_advance_func, <void*>user_data, NULL)
 *         self._glyph_h_advance_func = func
*/
  hb_font_funcs_set_glyph_h_advance_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__glyph_h_advance_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":807
 *         hb_font_funcs_set_glyph_h_advance_func(
 *             self._hb_ffuncs, _glyph_h_advance_func, <void*>user_data, NULL)
 *         self._glyph_h_advance_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_v_advance_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_glyph_h_advance_func);
  __Pyx_DECREF(__pyx_v_self->_glyph_h_advance_func);
  __pyx_v_self->_glyph_h_advance_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":798
 *         return inst
 * 
 *     def set_glyph_h_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":809
 *         self._glyph_h_advance_func = func
 * 
 *     def set_glyph_v_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func = {"set_glyph_v_advance_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_v_advance_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 809, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 809, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 809, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_v_advance_func", 0) < (0)) __PYX_ERR(3, 809, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":815
 *                                      object,  # user_data
 *                                  ], int],  # v_advance
 *                                  user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_glyph_v_advance_func(
 *             self._hb_ffuncs, _glyph_v_advance_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_v_advance_func", 0, 1, 2, i); __PYX_ERR(3, 809, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 809, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 809, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_v_advance_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 809, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_glyph_v_advance_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_8set_glyph_v_advance_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":809
 *         self._glyph_h_advance_func = func
 * 
 *     def set_glyph_v_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_8set_glyph_v_advance_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_v_advance_func", 0);

  /* "src/uharfbuzz/_font.pxi":816
 *                                  ], int],  # v_advance
 *                                  user_data: object = None):
 *         hb_font_funcs_set_glyph_v_advance_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _glyph_v_advance_func, <void*>user_data, NULL)
 *         self._glyph_v_advance_func = func
*/
  hb_font_funcs_set_glyph_v_advance_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_advance_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":818
 *         hb_font_funcs_set_glyph_v_advance_func(
 *             self._hb_ffuncs, _glyph_v_advance_func, <void*>user_data, NULL)
 *         self._glyph_v_advance_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_v_origin_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_glyph_v_advance_func);
  __Pyx_DECREF(__pyx_v_self->_glyph_v_advance_func);
  __pyx_v_self->_glyph_v_advance_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":809
 *         self._glyph_h_advance_func = func
 * 
 *     def set_glyph_v_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":820
 *         self._glyph_v_advance_func = func
 * 
 *     def set_glyph_v_origin_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func = {"set_glyph_v_origin_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_v_origin_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 820, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 820, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 820, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_v_origin_func", 0) < (0)) __PYX_ERR(3, 820, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":826
 *                                     object,  # user_data
 *                                 ], (int, int, int)],  # success, v_origin_x, v_origin_y
 *                                 user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_glyph_v_origin_func(
 *             self._hb_ffuncs, _glyph_v_origin_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_v_origin_func", 0, 1, 2, i); __PYX_ERR(3, 820, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 820, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 820, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_v_origin_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 820, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_glyph_v_origin_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_10set_glyph_v_origin_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":820
 *         self._glyph_v_advance_func = func
 * 
 *     def set_glyph_v_origin_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_10set_glyph_v_origin_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_v_origin_func", 0);

  /* "src/uharfbuzz/_font.pxi":827
 *                                 ], (int, int, int)],  # success, v_origin_x, v_origin_y
 *                                 user_data: object = None):
 *         hb_font_funcs_set_glyph_v_origin_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _glyph_v_origin_func, <void*>user_data, NULL)
 *         self._glyph_v_origin_func = func
*/
  hb_font_funcs_set_glyph_v_origin_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__glyph_v_origin_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":829
 *         hb_font_funcs_set_glyph_v_origin_func(
 *             self._hb_ffuncs, _glyph_v_origin_func, <void*>user_data, NULL)
 *         self._glyph_v_origin_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_name_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_glyph_v_origin_func);
  __Pyx_DECREF(__pyx_v_self->_glyph_v_origin_func);
  __pyx_v_self->_glyph_v_origin_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":820
 *         self._glyph_v_advance_func = func
 * 
 *     def set_glyph_v_origin_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":831
 *         self._glyph_v_origin_func = func
 * 
 *     def set_glyph_name_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func = {"set_glyph_name_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_name_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 831, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 831, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 831, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_name_func", 0) < (0)) __PYX_ERR(3, 831, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":837
 *                                 object,  # user_data
 *                             ], str],  # name
 *                             user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_glyph_name_func(
 *             self._hb_ffuncs, _glyph_name_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_name_func", 0, 1, 2, i); __PYX_ERR(3, 831, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 831, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 831, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_name_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 831, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_glyph_name_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_12set_glyph_name_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":831
 *         self._glyph_v_origin_func = func
 * 
 *     def set_glyph_name_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_12set_glyph_name_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_name_func", 0);

  /* "src/uharfbuzz/_font.pxi":838
 *                             ], str],  # name
 *                             user_data: object = None):
 *         hb_font_funcs_set_glyph_name_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _glyph_name_func, <void*>user_data, NULL)
 *         self._glyph_name_func = func
*/
  hb_font_funcs_set_glyph_name_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__glyph_name_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":840
 *         hb_font_funcs_set_glyph_name_func(
 *             self._hb_ffuncs, _glyph_name_func, <void*>user_data, NULL)
 *         self._glyph_name_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_nominal_glyph_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_glyph_name_func);
  __Pyx_DECREF(__pyx_v_self->_glyph_name_func);
  __pyx_v_self->_glyph_name_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":831
 *         self._glyph_v_origin_func = func
 * 
 *     def set_glyph_name_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":842
 *         self._glyph_name_func = func
 * 
 *     def set_nominal_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func = {"set_nominal_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_nominal_glyph_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 842, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 842, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 842, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_nominal_glyph_func", 0) < (0)) __PYX_ERR(3, 842, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":848
 *                                    object,  # user_data
 *                                ], int],  # gid
 *                                user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_nominal_glyph_func(
 *             self._hb_ffuncs, _nominal_glyph_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_nominal_glyph_func", 0, 1, 2, i); __PYX_ERR(3, 842, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 842, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 842, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_nominal_glyph_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 842, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_nominal_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_14set_nominal_glyph_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":842
 *         self._glyph_name_func = func
 * 
 *     def set_nominal_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_14set_nominal_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_nominal_glyph_func", 0);

  /* "src/uharfbuzz/_font.pxi":849
 *                                ], int],  # gid
 *                                user_data: object = None):
 *         hb_font_funcs_set_nominal_glyph_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _nominal_glyph_func, <void*>user_data, NULL)
 *         self._nominal_glyph_func = func
*/
  hb_font_funcs_set_nominal_glyph_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__nominal_glyph_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":851
 *         hb_font_funcs_set_nominal_glyph_func(
 *             self._hb_ffuncs, _nominal_glyph_func, <void*>user_data, NULL)
 *         self._nominal_glyph_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_variation_glyph_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_nominal_glyph_func);
  __Pyx_DECREF(__pyx_v_self->_nominal_glyph_func);
  __pyx_v_self->_nominal_glyph_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":842
 *         self._glyph_name_func = func
 * 
 *     def set_nominal_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":853
 *         self._nominal_glyph_func = func
 * 
 *     def set_variation_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func = {"set_variation_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_variation_glyph_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 853, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 853, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 853, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_variation_glyph_func", 0) < (0)) __PYX_ERR(3, 853, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":860
 *                                    object,  # user_data
 *                                ], int],  # gid
 *                                user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_variation_glyph_func(
 *             self._hb_ffuncs, _variation_glyph_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_variation_glyph_func", 0, 1, 2, i); __PYX_ERR(3, 853, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 853, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 853, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_variation_glyph_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 853, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_variation_glyph_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_16set_variation_glyph_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":853
 *         self._nominal_glyph_func = func
 * 
 *     def set_variation_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_16set_variation_glyph_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_variation_glyph_func", 0);

  /* "src/uharfbuzz/_font.pxi":861
 *                                ], int],  # gid
 *                                user_data: object = None):
 *         hb_font_funcs_set_variation_glyph_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _variation_glyph_func, <void*>user_data, NULL)
 *         self._variation_glyph_func = func
*/
  hb_font_funcs_set_variation_glyph_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__variation_glyph_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":863
 *         hb_font_funcs_set_variation_glyph_func(
 *             self._hb_ffuncs, _variation_glyph_func, <void*>user_data, NULL)
 *         self._variation_glyph_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_font_h_extents_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_variation_glyph_func);
  __Pyx_DECREF(__pyx_v_self->_variation_glyph_func);
  __pyx_v_self->_variation_glyph_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":853
 *         self._nominal_glyph_func = func
 * 
 *     def set_variation_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":865
 *         self._variation_glyph_func = func
 * 
 *     def set_font_h_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func = {"set_font_h_extents_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_font_h_extents_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 865, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 865, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 865, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_font_h_extents_func", 0) < (0)) __PYX_ERR(3, 865, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":870
 *                                     object,  # user_data
 *                                 ], FontExtents],  # extents
 *                                 user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_font_h_extents_func(
 *             self._hb_ffuncs, _font_h_extents_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_font_h_extents_func", 0, 1, 2, i); __PYX_ERR(3, 865, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 865, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 865, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_font_h_extents_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 865, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_font_h_extents_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_18set_font_h_extents_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":865
 *         self._variation_glyph_func = func
 * 
 *     def set_font_h_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_18set_font_h_extents_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_font_h_extents_func", 0);

  /* "src/uharfbuzz/_font.pxi":871
 *                                 ], FontExtents],  # extents
 *                                 user_data: object = None):
 *         hb_font_funcs_set_font_h_extents_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _font_h_extents_func, <void*>user_data, NULL)
 *         self._font_h_extents_func = func
*/
  hb_font_funcs_set_font_h_extents_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__font_h_extents_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":873
 *         hb_font_funcs_set_font_h_extents_func(
 *             self._hb_ffuncs, _font_h_extents_func, <void*>user_data, NULL)
 *         self._font_h_extents_func = func             # <<<<<<<<<<<<<<
 * 
 *     def set_font_v_extents_func(self,
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_font_h_extents_func);
  __Pyx_DECREF(__pyx_v_self->_font_h_extents_func);
  __pyx_v_self->_font_h_extents_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":865
 *         self._variation_glyph_func = func
 * 
 *     def set_font_h_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_font.pxi":875
 *         self._font_h_extents_func = func
 * 
 *     def set_font_v_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func = {"set_font_v_extents_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_func = 0;
  PyObject *__pyx_v_user_data = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_font_v_extents_func (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_func,&__pyx_mstate_global->__pyx_n_u_user_data,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(3, 875, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 875, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 875, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_font_v_extents_func", 0) < (0)) __PYX_ERR(3, 875, __pyx_L3_error)

      /* "src/uharfbuzz/_font.pxi":880
 *                                     object,  # user_data
 *                                 ], FontExtents],  # extents
 *                                 user_data: object = None):             # <<<<<<<<<<<<<<
 *         hb_font_funcs_set_font_v_extents_func(
 *             self._hb_ffuncs, _font_v_extents_func, <void*>user_data, NULL)
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_font_v_extents_func", 0, 1, 2, i); __PYX_ERR(3, 875, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(3, 875, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(3, 875, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_func = values[0];
    __pyx_v_user_data = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_font_v_extents_func", 0, 1, 2, __pyx_nargs); __PYX_ERR(3, 875, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.set_font_v_extents_func", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_20set_font_v_extents_func(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v_func, __pyx_v_user_data);

  /* "src/uharfbuzz/_font.pxi":875
 *         self._font_h_extents_func = func
 * 
 *     def set_font_v_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_20set_font_v_extents_func(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, PyObject *__pyx_v_func, PyObject *__pyx_v_user_data) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_font_v_extents_func", 0);

  /* "src/uharfbuzz/_font.pxi":881
 *                                 ], FontExtents],  # extents
 *                                 user_data: object = None):
 *         hb_font_funcs_set_font_v_extents_func(             # <<<<<<<<<<<<<<
 *             self._hb_ffuncs, _font_v_extents_func, <void*>user_data, NULL)
 *         self._font_v_extents_func = func
*/
  hb_font_funcs_set_font_v_extents_func(__pyx_v_self->_hb_ffuncs, __pyx_f_9uharfbuzz_9_harfbuzz__font_v_extents_func, ((void *)__pyx_v_user_data), NULL);

  /* "src/uharfbuzz/_font.pxi":883
 *         hb_font_funcs_set_font_v_extents_func(
 *             self._hb_ffuncs, _font_v_extents_func, <void*>user_data, NULL)
 *         self._font_v_extents_func = func             # <<<<<<<<<<<<<<
*/
  __Pyx_INCREF(__pyx_v_func);
  __Pyx_GIVEREF(__pyx_v_func);
  __Pyx_GOTREF(__pyx_v_self->_font_v_extents_func);
  __Pyx_DECREF(__pyx_v_self->_font_v_extents_func);
  __pyx_v_self->_font_v_extents_func = __pyx_v_func;

  /* "src/uharfbuzz/_font.pxi":875
 *         self._font_h_extents_func = func
 * 
 *     def set_font_v_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_22__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_22__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_24__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_9FontFuncs_24__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.FontFuncs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":17
 *     cdef hb_raster_image_t* _hb_raster_image
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_image = NULL
 * 
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  int __pyx_r;

  /* "src/uharfbuzz/_raster.pxi":18
 * 
 *     def __cinit__(self):
 *         self._hb_raster_image = NULL             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self):
*/
  __pyx_v_self->_hb_raster_image = NULL;

  /* "src/uharfbuzz/_raster.pxi":17
 *     cdef hb_raster_image_t* _hb_raster_image
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_image = NULL
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":20
 *         self._hb_raster_image = NULL
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_image = hb_raster_image_create_or_fail()
 *         if self._hb_raster_image is NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_3__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__init__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_2__init__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_2__init__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_raster.pxi":21
 * 
 *     def __init__(self):
 *         self._hb_raster_image = hb_raster_image_create_or_fail()             # <<<<<<<<<<<<<<
 *         if self._hb_raster_image is NULL:
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_raster_image = hb_raster_image_create_or_fail();

  /* "src/uharfbuzz/_raster.pxi":22
 *     def __init__(self):
 *         self._hb_raster_image = hb_raster_image_create_or_fail()
 *         if self._hb_raster_image is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_raster_image == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_raster.pxi":23
 *         self._hb_raster_image = hb_raster_image_create_or_fail()
 *         if self._hb_raster_image is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    PyErr_NoMemory(); __PYX_ERR(10, 23, __pyx_L1_error)

    /* "src/uharfbuzz/_raster.pxi":22
 *     def __init__(self):
 *         self._hb_raster_image = hb_raster_image_create_or_fail()
 *         if self._hb_raster_image is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_raster.pxi":20
 *         self._hb_raster_image = NULL
 * 
 *     def __init__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_image = hb_raster_image_create_or_fail()
 *         if self._hb_raster_image is NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":25
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_image_destroy(self._hb_raster_image)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_5__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_5__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_4__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_4__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {

  /* "src/uharfbuzz/_raster.pxi":26
 * 
 *     def __dealloc__(self):
 *         hb_raster_image_destroy(self._hb_raster_image)             # <<<<<<<<<<<<<<
 * 
 *     @staticmethod
*/
  hb_raster_image_destroy(__pyx_v_self->_hb_raster_image);

  /* "src/uharfbuzz/_raster.pxi":25
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_image_destroy(self._hb_raster_image)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_raster.pxi":28
 *         hb_raster_image_destroy(self._hb_raster_image)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef RasterImage from_ptr(hb_raster_image_t* hb_img):
 *         """Create RasterImage from a pointer, taking ownership of it."""
*/

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_f_9uharfbuzz_9_harfbuzz_11RasterImage_from_ptr(hb_raster_image_t *__pyx_v_hb_img) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_wrapper = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_ptr", 0);

  /* "src/uharfbuzz/_raster.pxi":31
 *     cdef RasterImage from_ptr(hb_raster_image_t* hb_img):
 *         """Create RasterImage from a pointer, taking ownership of it."""
 *         cdef RasterImage wrapper = RasterImage.__new__(RasterImage)             # <<<<<<<<<<<<<<
 *         wrapper._hb_raster_image = hb_img
 *         return wrapper
*/
  __pyx_t_1 = ((PyObject *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterImage(((PyTypeObject *)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage), __pyx_mstate_global->__pyx_empty_tuple, NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 31, __pyx_L1_error)
  __Pyx_GOTREF((PyObject *)__pyx_t_1);
  __pyx_v_wrapper = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_raster.pxi":32
 *         """Create RasterImage from a pointer, taking ownership of it."""
 *         cdef RasterImage wrapper = RasterImage.__new__(RasterImage)
 *         wrapper._hb_raster_image = hb_img             # <<<<<<<<<<<<<<
 *         return wrapper
 * 
*/
  __pyx_v_wrapper->_hb_raster_image = __pyx_v_hb_img;

  /* "src/uharfbuzz/_raster.pxi":33
 *         cdef RasterImage wrapper = RasterImage.__new__(RasterImage)
 *         wrapper._hb_raster_image = hb_img
 *         return wrapper             # <<<<<<<<<<<<<<
 * 
 *     def configure(self, format: RasterFormat,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_wrapper);
  __pyx_r = __pyx_v_wrapper;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":28
 *         hb_raster_image_destroy(self._hb_raster_image)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     cdef RasterImage from_ptr(hb_raster_image_t* hb_img):
 *         """Create RasterImage from a pointer, taking ownership of it."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.from_ptr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_wrapper);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":35
 *         return wrapper
 * 
 *     def configure(self, format: RasterFormat,             # <<<<<<<<<<<<<<
 *                   extents: RasterExtents | None = None) -> bool:
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7configure(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_7configure = {"configure", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7configure, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7configure(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_format = 0;
  PyObject *__pyx_v_extents = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("configure (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_format,&__pyx_mstate_global->__pyx_n_u_extents,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 35, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 35, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 35, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "configure", 0) < (0)) __PYX_ERR(10, 35, __pyx_L3_error)

      /* "src/uharfbuzz/_raster.pxi":36
 * 
 *     def configure(self, format: RasterFormat,
 *                   extents: RasterExtents | None = None) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_extents_t c_extents
 *         cdef hb_raster_extents_t* c_extents_ptr = NULL
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("configure", 0, 1, 2, i); __PYX_ERR(10, 35, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 35, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 35, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_format = values[0];
    __pyx_v_extents = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("configure", 0, 1, 2, __pyx_nargs); __PYX_ERR(10, 35, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.configure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6configure(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self), __pyx_v_format, __pyx_v_extents);

  /* "src/uharfbuzz/_raster.pxi":35
 *         return wrapper
 * 
 *     def configure(self, format: RasterFormat,             # <<<<<<<<<<<<<<
 *                   extents: RasterExtents | None = None) -> bool:
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6configure(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self, PyObject *__pyx_v_format, PyObject *__pyx_v_extents) {
  hb_raster_extents_t __pyx_v_c_extents;
  hb_raster_extents_t *__pyx_v_c_extents_ptr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  unsigned int __pyx_t_4;
  hb_raster_format_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("configure", 0);

  /* "src/uharfbuzz/_raster.pxi":38
 *                   extents: RasterExtents | None = None) -> bool:
 *         cdef hb_raster_extents_t c_extents
 *         cdef hb_raster_extents_t* c_extents_ptr = NULL             # <<<<<<<<<<<<<<
 *         if extents is not None:
 *             c_extents.x_origin = extents.x_origin
*/
  __pyx_v_c_extents_ptr = NULL;

  /* "src/uharfbuzz/_raster.pxi":39
 *         cdef hb_raster_extents_t c_extents
 *         cdef hb_raster_extents_t* c_extents_ptr = NULL
 *         if extents is not None:             # <<<<<<<<<<<<<<
 *             c_extents.x_origin = extents.x_origin
 *             c_extents.y_origin = extents.y_origin
*/
  __pyx_t_1 = (__pyx_v_extents != Py_None);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":40
 *         cdef hb_raster_extents_t* c_extents_ptr = NULL
 *         if extents is not None:
 *             c_extents.x_origin = extents.x_origin             # <<<<<<<<<<<<<<
 *             c_extents.y_origin = extents.y_origin
 *             c_extents.width = extents.width
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_x_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 40, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 40, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_extents.x_origin = __pyx_t_3;

    /* "src/uharfbuzz/_raster.pxi":41
 *         if extents is not None:
 *             c_extents.x_origin = extents.x_origin
 *             c_extents.y_origin = extents.y_origin             # <<<<<<<<<<<<<<
 *             c_extents.width = extents.width
 *             c_extents.height = extents.height
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_y_origin); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 41, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 41, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_extents.y_origin = __pyx_t_3;

    /* "src/uharfbuzz/_raster.pxi":42
 *             c_extents.x_origin = extents.x_origin
 *             c_extents.y_origin = extents.y_origin
 *             c_extents.width = extents.width             # <<<<<<<<<<<<<<
 *             c_extents.height = extents.height
 *             c_extents.stride = extents.stride
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 42, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 42, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_extents.width = __pyx_t_4;

    /* "src/uharfbuzz/_raster.pxi":43
 *             c_extents.y_origin = extents.y_origin
 *             c_extents.width = extents.width
 *             c_extents.height = extents.height             # <<<<<<<<<<<<<<
 *             c_extents.stride = extents.stride
 *             c_extents_ptr = &c_extents
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_height); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 43, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 43, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_extents.height = __pyx_t_4;

    /* "src/uharfbuzz/_raster.pxi":44
 *             c_extents.width = extents.width
 *             c_extents.height = extents.height
 *             c_extents.stride = extents.stride             # <<<<<<<<<<<<<<
 *             c_extents_ptr = &c_extents
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_stride); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 44, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 44, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_c_extents.stride = __pyx_t_4;

    /* "src/uharfbuzz/_raster.pxi":45
 *             c_extents.height = extents.height
 *             c_extents.stride = extents.stride
 *             c_extents_ptr = &c_extents             # <<<<<<<<<<<<<<
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)
 * 
*/
    __pyx_v_c_extents_ptr = (&__pyx_v_c_extents);

    /* "src/uharfbuzz/_raster.pxi":39
 *         cdef hb_raster_extents_t c_extents
 *         cdef hb_raster_extents_t* c_extents_ptr = NULL
 *         if extents is not None:             # <<<<<<<<<<<<<<
 *             c_extents.x_origin = extents.x_origin
 *             c_extents.y_origin = extents.y_origin
*/
  }

  /* "src/uharfbuzz/_raster.pxi":46
 *             c_extents.stride = extents.stride
 *             c_extents_ptr = &c_extents
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_5 = ((hb_raster_format_t)__Pyx_PyLong_As_hb_raster_format_t(__pyx_v_format)); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 46, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_raster_image_configure(__pyx_v_self->_hb_raster_image, __pyx_t_5, __pyx_v_c_extents_ptr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":35
 *         return wrapper
 * 
 *     def configure(self, format: RasterFormat,             # <<<<<<<<<<<<<<
 *                   extents: RasterExtents | None = None) -> bool:
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.configure", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":48
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_image_clear(self._hb_raster_image)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_9clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_9clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_9clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_9clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_8clear(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_8clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "src/uharfbuzz/_raster.pxi":49
 * 
 *     def clear(self):
 *         hb_raster_image_clear(self._hb_raster_image)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_image_clear(__pyx_v_self->_hb_raster_image);

  /* "src/uharfbuzz/_raster.pxi":48
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_image_clear(self._hb_raster_image)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":51
 *         hb_raster_image_clear(self._hb_raster_image)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def format(self) -> RasterFormat:
 *         return RasterFormat(hb_raster_image_get_format(self._hb_raster_image))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6format_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6format_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6format___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6format___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":53
 *     @property
 *     def format(self) -> RasterFormat:
 *         return RasterFormat(hb_raster_image_get_format(self._hb_raster_image))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RasterFormat); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_hb_raster_format_t(hb_raster_image_get_format(__pyx_v_self->_hb_raster_image)); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 53, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":51
 *         hb_raster_image_clear(self._hb_raster_image)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def format(self) -> RasterFormat:
 *         return RasterFormat(hb_raster_image_get_format(self._hb_raster_image))
*/

  /* 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("uharfbuzz._harfbuzz.RasterImage.format.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":55
 *         return RasterFormat(hb_raster_image_get_format(self._hb_raster_image))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents:
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7extents_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7extents_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_7extents___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  hb_raster_extents_t __pyx_v_c_extents;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":58
 *     def extents(self) -> RasterExtents:
 *         cdef hb_raster_extents_t c_extents
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)             # <<<<<<<<<<<<<<
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
*/
  hb_raster_image_get_extents(__pyx_v_self->_hb_raster_image, (&__pyx_v_c_extents));

  /* "src/uharfbuzz/_raster.pxi":59
 *         cdef hb_raster_extents_t c_extents
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)
 *         return RasterExtents(             # <<<<<<<<<<<<<<
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_RasterExtents); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "src/uharfbuzz/_raster.pxi":60
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,             # <<<<<<<<<<<<<<
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
*/
  __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_c_extents.x_origin); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "src/uharfbuzz/_raster.pxi":61
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,             # <<<<<<<<<<<<<<
 *             width=c_extents.width,
 *             height=c_extents.height,
*/
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_c_extents.y_origin); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "src/uharfbuzz/_raster.pxi":62
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,             # <<<<<<<<<<<<<<
 *             height=c_extents.height,
 *             stride=c_extents.stride,
*/
  __pyx_t_6 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.width); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "src/uharfbuzz/_raster.pxi":63
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
 *             height=c_extents.height,             # <<<<<<<<<<<<<<
 *             stride=c_extents.stride,
 *         )
*/
  __pyx_t_7 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.height); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "src/uharfbuzz/_raster.pxi":64
 *             width=c_extents.width,
 *             height=c_extents.height,
 *             stride=c_extents.stride,             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_8 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.stride); if (unlikely(!__pyx_t_8)) __PYX_ERR(10, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_9 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 5 : 0)] = {__pyx_t_2, NULL};
    __pyx_t_10 = __Pyx_MakeVectorcallBuilderKwds(5); if (unlikely(!__pyx_t_10)) __PYX_ERR(10, 59, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_x_origin, __pyx_t_4, __pyx_t_10, __pyx_callargs+1, 0) < (0)) __PYX_ERR(10, 59, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_y_origin, __pyx_t_5, __pyx_t_10, __pyx_callargs+1, 1) < (0)) __PYX_ERR(10, 59, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_width, __pyx_t_6, __pyx_t_10, __pyx_callargs+1, 2) < (0)) __PYX_ERR(10, 59, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_height, __pyx_t_7, __pyx_t_10, __pyx_callargs+1, 3) < (0)) __PYX_ERR(10, 59, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stride, __pyx_t_8, __pyx_t_10, __pyx_callargs+1, 4) < (0)) __PYX_ERR(10, 59, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_9, (1-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 59, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":55
 *         return RasterFormat(hb_raster_image_get_format(self._hb_raster_image))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents:
 *         cdef hb_raster_extents_t c_extents
*/

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.extents.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":67
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def buffer(self) -> bytes:
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  hb_raster_extents_t __pyx_v_c_extents;
  uint8_t const *__pyx_v_buf;
  Py_ssize_t __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":70
 *     def buffer(self) -> bytes:
 *         cdef hb_raster_extents_t c_extents
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)             # <<<<<<<<<<<<<<
 *         cdef const uint8_t* buf = hb_raster_image_get_buffer(self._hb_raster_image)
 *         if buf is NULL:
*/
  hb_raster_image_get_extents(__pyx_v_self->_hb_raster_image, (&__pyx_v_c_extents));

  /* "src/uharfbuzz/_raster.pxi":71
 *         cdef hb_raster_extents_t c_extents
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)
 *         cdef const uint8_t* buf = hb_raster_image_get_buffer(self._hb_raster_image)             # <<<<<<<<<<<<<<
 *         if buf is NULL:
 *             return b""
*/
  __pyx_v_buf = hb_raster_image_get_buffer(__pyx_v_self->_hb_raster_image);

  /* "src/uharfbuzz/_raster.pxi":72
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)
 *         cdef const uint8_t* buf = hb_raster_image_get_buffer(self._hb_raster_image)
 *         if buf is NULL:             # <<<<<<<<<<<<<<
 *             return b""
 *         cdef Py_ssize_t size = c_extents.height * c_extents.stride
*/
  __pyx_t_1 = (__pyx_v_buf == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":73
 *         cdef const uint8_t* buf = hb_raster_image_get_buffer(self._hb_raster_image)
 *         if buf is NULL:
 *             return b""             # <<<<<<<<<<<<<<
 *         cdef Py_ssize_t size = c_extents.height * c_extents.stride
 *         return buf[:size]
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_b__5);
    __pyx_r = __pyx_mstate_global->__pyx_kp_b__5;
    goto __pyx_L0;

    /* "src/uharfbuzz/_raster.pxi":72
 *         hb_raster_image_get_extents(self._hb_raster_image, &c_extents)
 *         cdef const uint8_t* buf = hb_raster_image_get_buffer(self._hb_raster_image)
 *         if buf is NULL:             # <<<<<<<<<<<<<<
 *             return b""
 *         cdef Py_ssize_t size = c_extents.height * c_extents.stride
*/
  }

  /* "src/uharfbuzz/_raster.pxi":74
 *         if buf is NULL:
 *             return b""
 *         cdef Py_ssize_t size = c_extents.height * c_extents.stride             # <<<<<<<<<<<<<<
 *         return buf[:size]
 * 
*/
  __pyx_v_size = (__pyx_v_c_extents.height * __pyx_v_c_extents.stride);

  /* "src/uharfbuzz/_raster.pxi":75
 *             return b""
 *         cdef Py_ssize_t size = c_extents.height * c_extents.stride
 *         return buf[:size]             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((char const *)__pyx_v_buf) + 0, __pyx_v_size - 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":67
 *         )
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def buffer(self) -> bytes:
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.buffer.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_10__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_10__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_12__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterImage_12__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterImage.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":81
 *     cdef hb_raster_draw_t* _hb_raster_draw
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()
 *         if self._hb_raster_draw is NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_raster.pxi":82
 * 
 *     def __cinit__(self):
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()             # <<<<<<<<<<<<<<
 *         if self._hb_raster_draw is NULL:
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_raster_draw = hb_raster_draw_create_or_fail();

  /* "src/uharfbuzz/_raster.pxi":83
 *     def __cinit__(self):
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()
 *         if self._hb_raster_draw is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_raster_draw == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_raster.pxi":84
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()
 *         if self._hb_raster_draw is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    PyErr_NoMemory(); __PYX_ERR(10, 84, __pyx_L1_error)

    /* "src/uharfbuzz/_raster.pxi":83
 *     def __cinit__(self):
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()
 *         if self._hb_raster_draw is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_raster.pxi":81
 *     cdef hb_raster_draw_t* _hb_raster_draw
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_draw = hb_raster_draw_create_or_fail()
 *         if self._hb_raster_draw is NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":86
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_destroy(self._hb_raster_draw)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {

  /* "src/uharfbuzz/_raster.pxi":87
 * 
 *     def __dealloc__(self):
 *         hb_raster_draw_destroy(self._hb_raster_draw)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_draw_destroy(__pyx_v_self->_hb_raster_draw);

  /* "src/uharfbuzz/_raster.pxi":86
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_destroy(self._hb_raster_draw)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_raster.pxi":89
 *         hb_raster_draw_destroy(self._hb_raster_draw)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  float __pyx_v_xx;
  float __pyx_v_yx;
  float __pyx_v_xy;
  float __pyx_v_yy;
  float __pyx_v_dx;
  float __pyx_v_dy;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":92
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
 *         hb_raster_draw_get_transform(self._hb_raster_draw, &xx, &yx, &xy, &yy, &dx, &dy)             # <<<<<<<<<<<<<<
 *         return (xx, yx, xy, yy, dx, dy)
 * 
*/
  hb_raster_draw_get_transform(__pyx_v_self->_hb_raster_draw, (&__pyx_v_xx), (&__pyx_v_yx), (&__pyx_v_xy), (&__pyx_v_yy), (&__pyx_v_dx), (&__pyx_v_dy));

  /* "src/uharfbuzz/_raster.pxi":93
 *         cdef float xx, yx, xy, yy, dx, dy
 *         hb_raster_draw_get_transform(self._hb_raster_draw, &xx, &yx, &xy, &yy, &dx, &dy)
 *         return (xx, yx, xy, yy, dx, dy)             # <<<<<<<<<<<<<<
 * 
 *     @transform.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_xx); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_yx); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_xy); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_yy); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dy); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_3) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_4) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_5) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_6) != (0)) __PYX_ERR(10, 93, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":89
 *         hb_raster_draw_destroy(self._hb_raster_draw)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
*/

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.transform.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":95
 *         return (xx, yx, xy, yy, dx, dy)
 * 
 *     @transform.setter             # <<<<<<<<<<<<<<
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(__pyx_arg_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 96, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.transform.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v_value);

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value) {
  double __pyx_v_xx;
  double __pyx_v_yx;
  double __pyx_v_xy;
  double __pyx_v_yy;
  double __pyx_v_dx;
  double __pyx_v_dy;
  int __pyx_r;
  __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_t_1;
  double __pyx_t_2;
  double __pyx_t_3;
  double __pyx_t_4;
  double __pyx_t_5;
  double __pyx_t_6;
  double __pyx_t_7;

  /* "src/uharfbuzz/_raster.pxi":97
 *     @transform.setter
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value             # <<<<<<<<<<<<<<
 *         hb_raster_draw_set_transform(self._hb_raster_draw, xx, yx, xy, yy, dx, dy)
 * 
*/
  __pyx_t_1 = __pyx_v_value;
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_t_4 = __pyx_t_1.f2;
  __pyx_t_5 = __pyx_t_1.f3;
  __pyx_t_6 = __pyx_t_1.f4;
  __pyx_t_7 = __pyx_t_1.f5;
  __pyx_v_xx = __pyx_t_2;
  __pyx_v_yx = __pyx_t_3;
  __pyx_v_xy = __pyx_t_4;
  __pyx_v_yy = __pyx_t_5;
  __pyx_v_dx = __pyx_t_6;
  __pyx_v_dy = __pyx_t_7;

  /* "src/uharfbuzz/_raster.pxi":98
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
 *         hb_raster_draw_set_transform(self._hb_raster_draw, xx, yx, xy, yy, dx, dy)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_draw_set_transform(__pyx_v_self->_hb_raster_draw, __pyx_v_xx, __pyx_v_yx, __pyx_v_xy, __pyx_v_yy, __pyx_v_dx, __pyx_v_dy);

  /* "src/uharfbuzz/_raster.pxi":95
 *         return (xx, yx, xy, yy, dx, dy)
 * 
 *     @transform.setter             # <<<<<<<<<<<<<<
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":100
 *         hb_raster_draw_set_transform(self._hb_raster_draw, xx, yx, xy, yy, dx, dy)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  float __pyx_v_x;
  float __pyx_v_y;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":103
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
 *         hb_raster_draw_get_scale_factor(self._hb_raster_draw, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y)
 * 
*/
  hb_raster_draw_get_scale_factor(__pyx_v_self->_hb_raster_draw, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_raster.pxi":104
 *         cdef float x, y
 *         hb_raster_draw_get_scale_factor(self._hb_raster_draw, &x, &y)
 *         return (x, y)             # <<<<<<<<<<<<<<
 * 
 *     @scale_factor.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(10, 104, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(10, 104, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":100
 *         hb_raster_draw_set_transform(self._hb_raster_draw, xx, yx, xy, yy, dx, dy)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.scale_factor.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":106
 *         return (x, y)
 * 
 *     @scale_factor.setter             # <<<<<<<<<<<<<<
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  __pyx_ctuple_double__and_double __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __pyx_convert__from_py___pyx_ctuple_double__and_double(__pyx_arg_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 107, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.scale_factor.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v_value);

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_value) {
  double __pyx_v_x;
  double __pyx_v_y;
  int __pyx_r;
  __pyx_ctuple_double__and_double __pyx_t_1;
  double __pyx_t_2;
  double __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":108
 *     @scale_factor.setter
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value             # <<<<<<<<<<<<<<
 *         hb_raster_draw_set_scale_factor(self._hb_raster_draw, x, y)
 * 
*/
  __pyx_t_1 = __pyx_v_value;
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_x = __pyx_t_2;
  __pyx_v_y = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":109
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
 *         hb_raster_draw_set_scale_factor(self._hb_raster_draw, x, y)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_draw_set_scale_factor(__pyx_v_self->_hb_raster_draw, __pyx_v_x, __pyx_v_y);

  /* "src/uharfbuzz/_raster.pxi":106
 *         return (x, y)
 * 
 *     @scale_factor.setter             # <<<<<<<<<<<<<<
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":111
 *         hb_raster_draw_set_scale_factor(self._hb_raster_draw, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  hb_raster_extents_t __pyx_v_c_extents;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":114
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_draw_get_extents(self._hb_raster_draw, &c_extents):             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterExtents(
*/
  __pyx_t_1 = (!(hb_raster_draw_get_extents(__pyx_v_self->_hb_raster_draw, (&__pyx_v_c_extents)) != 0));
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":115
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_draw_get_extents(self._hb_raster_draw, &c_extents):
 *             return None             # <<<<<<<<<<<<<<
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_raster.pxi":114
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_draw_get_extents(self._hb_raster_draw, &c_extents):             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterExtents(
*/
  }

  /* "src/uharfbuzz/_raster.pxi":116
 *         if not hb_raster_draw_get_extents(self._hb_raster_draw, &c_extents):
 *             return None
 *         return RasterExtents(             # <<<<<<<<<<<<<<
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_RasterExtents); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "src/uharfbuzz/_raster.pxi":117
 *             return None
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,             # <<<<<<<<<<<<<<
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
*/
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_c_extents.x_origin); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "src/uharfbuzz/_raster.pxi":118
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,             # <<<<<<<<<<<<<<
 *             width=c_extents.width,
 *             height=c_extents.height,
*/
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_c_extents.y_origin); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "src/uharfbuzz/_raster.pxi":119
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,             # <<<<<<<<<<<<<<
 *             height=c_extents.height,
 *             stride=c_extents.stride,
*/
  __pyx_t_7 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.width); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "src/uharfbuzz/_raster.pxi":120
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
 *             height=c_extents.height,             # <<<<<<<<<<<<<<
 *             stride=c_extents.stride,
 *         )
*/
  __pyx_t_8 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.height); if (unlikely(!__pyx_t_8)) __PYX_ERR(10, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "src/uharfbuzz/_raster.pxi":121
 *             width=c_extents.width,
 *             height=c_extents.height,
 *             stride=c_extents.stride,             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_9 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.stride); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 5 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(5); if (unlikely(!__pyx_t_11)) __PYX_ERR(10, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_x_origin, __pyx_t_5, __pyx_t_11, __pyx_callargs+1, 0) < (0)) __PYX_ERR(10, 116, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_y_origin, __pyx_t_6, __pyx_t_11, __pyx_callargs+1, 1) < (0)) __PYX_ERR(10, 116, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_width, __pyx_t_7, __pyx_t_11, __pyx_callargs+1, 2) < (0)) __PYX_ERR(10, 116, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_height, __pyx_t_8, __pyx_t_11, __pyx_callargs+1, 3) < (0)) __PYX_ERR(10, 116, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stride, __pyx_t_9, __pyx_t_11, __pyx_callargs+1, 4) < (0)) __PYX_ERR(10, 116, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 116, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":111
 *         hb_raster_draw_set_scale_factor(self._hb_raster_draw, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.extents.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":124
 *         )
 * 
 *     @extents.setter             # <<<<<<<<<<<<<<
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, PyObject *__pyx_v_value) {
  hb_raster_extents_t __pyx_v_c_extents;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_raster.pxi":127
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
 *         c_extents.x_origin = value.x_origin             # <<<<<<<<<<<<<<
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_x_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.x_origin = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":128
 *         cdef hb_raster_extents_t c_extents
 *         c_extents.x_origin = value.x_origin
 *         c_extents.y_origin = value.y_origin             # <<<<<<<<<<<<<<
 *         c_extents.width = value.width
 *         c_extents.height = value.height
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_y_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.y_origin = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":129
 *         c_extents.x_origin = value.x_origin
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width             # <<<<<<<<<<<<<<
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.width = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":130
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width
 *         c_extents.height = value.height             # <<<<<<<<<<<<<<
 *         c_extents.stride = value.stride
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.height = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":131
 *         c_extents.width = value.width
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride             # <<<<<<<<<<<<<<
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)
 * 
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_stride); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 131, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.stride = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":132
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:
*/
  hb_raster_draw_set_extents(__pyx_v_self->_hb_raster_draw, (&__pyx_v_c_extents));

  /* "src/uharfbuzz/_raster.pxi":124
 *         )
 * 
 *     @extents.setter             # <<<<<<<<<<<<<<
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.extents.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":134
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents = {"set_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_extents = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_extents (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_extents,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 134, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 134, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_extents", 0) < (0)) __PYX_ERR(10, 134, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_extents", 1, 1, 1, i); __PYX_ERR(10, 134, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 134, __pyx_L3_error)
    }
    __pyx_v_extents = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_extents", 1, 1, 1, __pyx_nargs); __PYX_ERR(10, 134, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.set_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_4set_glyph_extents(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v_extents);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_4set_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, PyObject *__pyx_v_extents) {
  hb_glyph_extents_t __pyx_v_c_extents;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  hb_position_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_glyph_extents", 0);

  /* "src/uharfbuzz/_raster.pxi":136
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing             # <<<<<<<<<<<<<<
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_x_bearing); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.x_bearing = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":137
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
 *         c_extents.y_bearing = extents.y_bearing             # <<<<<<<<<<<<<<
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_y_bearing); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.y_bearing = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":138
 *         c_extents.x_bearing = extents.x_bearing
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width             # <<<<<<<<<<<<<<
 *         c_extents.height = extents.height
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.width = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":139
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height             # <<<<<<<<<<<<<<
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)
 * 
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.height = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":140
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)             # <<<<<<<<<<<<<<
 * 
 *     def draw_glyph(self, font: Font, glyph: int):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_raster_draw_set_glyph_extents(__pyx_v_self->_hb_raster_draw, (&__pyx_v_c_extents))); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":134
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.set_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":142
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def draw_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph = {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 142, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 142, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 142, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "draw_glyph", 0) < (0)) __PYX_ERR(10, 142, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("draw_glyph", 1, 2, 2, i); __PYX_ERR(10, 142, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 142, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 142, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(10, 142, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_glyph", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 142, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(10, 142, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(10, 142, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_6draw_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_6draw_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_glyph", 0);

  /* "src/uharfbuzz/_raster.pxi":143
 * 
 *     def draw_glyph(self, font: Font, glyph: int):
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def draw_glyph_or_fail(self, font: Font, glyph: int) -> bool:
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 143, __pyx_L1_error)
  hb_raster_draw_glyph(__pyx_v_self->_hb_raster_draw, __pyx_v_font->_hb_font, __pyx_t_1);

  /* "src/uharfbuzz/_raster.pxi":142
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def draw_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.draw_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":145
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def draw_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail = {"draw_glyph_or_fail", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_glyph_or_fail (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 145, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 145, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 145, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "draw_glyph_or_fail", 0) < (0)) __PYX_ERR(10, 145, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("draw_glyph_or_fail", 1, 2, 2, i); __PYX_ERR(10, 145, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 145, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 145, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(10, 145, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_glyph_or_fail", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 145, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.draw_glyph_or_fail", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(10, 145, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(10, 145, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_8draw_glyph_or_fail(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_8draw_glyph_or_fail(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_glyph_or_fail", 0);

  /* "src/uharfbuzz/_raster.pxi":146
 * 
 *     def draw_glyph_or_fail(self, font: Font, glyph: int) -> bool:
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def render(self) -> RasterImage | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 146, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_raster_draw_glyph_or_fail(__pyx_v_self->_hb_raster_draw, __pyx_v_font->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":145
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def draw_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.draw_glyph_or_fail", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":148
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_11render(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_11render = {"render", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_11render, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_11render(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("render (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("render", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("render", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_10render(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_10render(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  hb_raster_image_t *__pyx_v_img;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("render", 0);

  /* "src/uharfbuzz/_raster.pxi":149
 * 
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)             # <<<<<<<<<<<<<<
 *         if img is NULL:
 *             return None
*/
  __pyx_v_img = hb_raster_draw_render(__pyx_v_self->_hb_raster_draw);

  /* "src/uharfbuzz/_raster.pxi":150
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterImage.from_ptr(img)
*/
  __pyx_t_1 = (__pyx_v_img == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":151
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:
 *             return None             # <<<<<<<<<<<<<<
 *         return RasterImage.from_ptr(img)
 * 
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_raster.pxi":150
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterImage.from_ptr(img)
*/
  }

  /* "src/uharfbuzz/_raster.pxi":152
 *         if img is NULL:
 *             return None
 *         return RasterImage.from_ptr(img)             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_11RasterImage_from_ptr(__pyx_v_img)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":148
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.render", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":154
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12clear(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_12clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "src/uharfbuzz/_raster.pxi":155
 * 
 *     def clear(self):
 *         hb_raster_draw_clear(self._hb_raster_draw)             # <<<<<<<<<<<<<<
 * 
 *     def reset(self):
*/
  hb_raster_draw_clear(__pyx_v_self->_hb_raster_draw);

  /* "src/uharfbuzz/_raster.pxi":154
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":157
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_reset(self._hb_raster_draw)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset = {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reset", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_14reset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_14reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset", 0);

  /* "src/uharfbuzz/_raster.pxi":158
 * 
 *     def reset(self):
 *         hb_raster_draw_reset(self._hb_raster_draw)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  hb_raster_draw_reset(__pyx_v_self->_hb_raster_draw);

  /* "src/uharfbuzz/_raster.pxi":157
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_reset(self._hb_raster_draw)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_16__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_16__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_18__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10RasterDraw_18__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterDraw.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":164
 *     cdef hb_raster_paint_t* _hb_raster_paint
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()
 *         if self._hb_raster_paint is NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_raster.pxi":165
 * 
 *     def __cinit__(self):
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()             # <<<<<<<<<<<<<<
 *         if self._hb_raster_paint is NULL:
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_raster_paint = hb_raster_paint_create_or_fail();

  /* "src/uharfbuzz/_raster.pxi":166
 *     def __cinit__(self):
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()
 *         if self._hb_raster_paint is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_raster_paint == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_raster.pxi":167
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()
 *         if self._hb_raster_paint is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    PyErr_NoMemory(); __PYX_ERR(10, 167, __pyx_L1_error)

    /* "src/uharfbuzz/_raster.pxi":166
 *     def __cinit__(self):
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()
 *         if self._hb_raster_paint is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_raster.pxi":164
 *     cdef hb_raster_paint_t* _hb_raster_paint
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_raster_paint = hb_raster_paint_create_or_fail()
 *         if self._hb_raster_paint is NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":169
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_destroy(self._hb_raster_paint)
 * 
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {

  /* "src/uharfbuzz/_raster.pxi":170
 * 
 *     def __dealloc__(self):
 *         hb_raster_paint_destroy(self._hb_raster_paint)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_paint_destroy(__pyx_v_self->_hb_raster_paint);

  /* "src/uharfbuzz/_raster.pxi":169
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_destroy(self._hb_raster_paint)
 * 
*/

  /* function exit code */
}

/* "src/uharfbuzz/_raster.pxi":172
 *         hb_raster_paint_destroy(self._hb_raster_paint)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  float __pyx_v_xx;
  float __pyx_v_yx;
  float __pyx_v_xy;
  float __pyx_v_yy;
  float __pyx_v_dx;
  float __pyx_v_dy;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":175
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
 *         hb_raster_paint_get_transform(self._hb_raster_paint, &xx, &yx, &xy, &yy, &dx, &dy)             # <<<<<<<<<<<<<<
 *         return (xx, yx, xy, yy, dx, dy)
 * 
*/
  hb_raster_paint_get_transform(__pyx_v_self->_hb_raster_paint, (&__pyx_v_xx), (&__pyx_v_yx), (&__pyx_v_xy), (&__pyx_v_yy), (&__pyx_v_dx), (&__pyx_v_dy));

  /* "src/uharfbuzz/_raster.pxi":176
 *         cdef float xx, yx, xy, yy, dx, dy
 *         hb_raster_paint_get_transform(self._hb_raster_paint, &xx, &yx, &xy, &yy, &dx, &dy)
 *         return (xx, yx, xy, yy, dx, dy)             # <<<<<<<<<<<<<<
 * 
 *     @transform.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_xx); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_yx); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_xy); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyFloat_FromDouble(__pyx_v_yy); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyFloat_FromDouble(__pyx_v_dx); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_dy); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyTuple_New(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_3) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_4) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_5) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_6);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_6) != (0)) __PYX_ERR(10, 176, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":172
 *         hb_raster_paint_destroy(self._hb_raster_paint)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def transform(self) -> Tuple[float, float, float, float, float, float]:
 *         cdef float xx, yx, xy, yy, dx, dy
*/

  /* 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_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.transform.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":178
 *         return (xx, yx, xy, yy, dx, dy)
 * 
 *     @transform.setter             # <<<<<<<<<<<<<<
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(__pyx_arg_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 179, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.transform.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_value);

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_v_value) {
  double __pyx_v_xx;
  double __pyx_v_yx;
  double __pyx_v_xy;
  double __pyx_v_yy;
  double __pyx_v_dx;
  double __pyx_v_dy;
  int __pyx_r;
  __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_t_1;
  double __pyx_t_2;
  double __pyx_t_3;
  double __pyx_t_4;
  double __pyx_t_5;
  double __pyx_t_6;
  double __pyx_t_7;

  /* "src/uharfbuzz/_raster.pxi":180
 *     @transform.setter
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value             # <<<<<<<<<<<<<<
 *         hb_raster_paint_set_transform(self._hb_raster_paint, xx, yx, xy, yy, dx, dy)
 * 
*/
  __pyx_t_1 = __pyx_v_value;
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_t_4 = __pyx_t_1.f2;
  __pyx_t_5 = __pyx_t_1.f3;
  __pyx_t_6 = __pyx_t_1.f4;
  __pyx_t_7 = __pyx_t_1.f5;
  __pyx_v_xx = __pyx_t_2;
  __pyx_v_yx = __pyx_t_3;
  __pyx_v_xy = __pyx_t_4;
  __pyx_v_yy = __pyx_t_5;
  __pyx_v_dx = __pyx_t_6;
  __pyx_v_dy = __pyx_t_7;

  /* "src/uharfbuzz/_raster.pxi":181
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
 *         hb_raster_paint_set_transform(self._hb_raster_paint, xx, yx, xy, yy, dx, dy)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_paint_set_transform(__pyx_v_self->_hb_raster_paint, __pyx_v_xx, __pyx_v_yx, __pyx_v_xy, __pyx_v_yy, __pyx_v_dx, __pyx_v_dy);

  /* "src/uharfbuzz/_raster.pxi":178
 *         return (xx, yx, xy, yy, dx, dy)
 * 
 *     @transform.setter             # <<<<<<<<<<<<<<
 *     def transform(self, value: Tuple[float, float, float, float, float, float]):
 *         xx, yx, xy, yy, dx, dy = value
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":183
 *         hb_raster_paint_set_transform(self._hb_raster_paint, xx, yx, xy, yy, dx, dy)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  float __pyx_v_x;
  float __pyx_v_y;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":186
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
 *         hb_raster_paint_get_scale_factor(self._hb_raster_paint, &x, &y)             # <<<<<<<<<<<<<<
 *         return (x, y)
 * 
*/
  hb_raster_paint_get_scale_factor(__pyx_v_self->_hb_raster_paint, (&__pyx_v_x), (&__pyx_v_y));

  /* "src/uharfbuzz/_raster.pxi":187
 *         cdef float x, y
 *         hb_raster_paint_get_scale_factor(self._hb_raster_paint, &x, &y)
 *         return (x, y)             # <<<<<<<<<<<<<<
 * 
 *     @scale_factor.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1) != (0)) __PYX_ERR(10, 187, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2) != (0)) __PYX_ERR(10, 187, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":183
 *         hb_raster_paint_set_transform(self._hb_raster_paint, xx, yx, xy, yy, dx, dy)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def scale_factor(self) -> Tuple[float, float]:
 *         cdef float x, y
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.scale_factor.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":189
 *         return (x, y)
 * 
 *     @scale_factor.setter             # <<<<<<<<<<<<<<
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_arg_value) {
  __pyx_ctuple_double__and_double __pyx_v_value;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  assert(__pyx_arg_value); {
    __pyx_v_value = __pyx_convert__from_py___pyx_ctuple_double__and_double(__pyx_arg_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(10, 190, __pyx_L3_error)
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.scale_factor.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_value);

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, __pyx_ctuple_double__and_double __pyx_v_value) {
  double __pyx_v_x;
  double __pyx_v_y;
  int __pyx_r;
  __pyx_ctuple_double__and_double __pyx_t_1;
  double __pyx_t_2;
  double __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":191
 *     @scale_factor.setter
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value             # <<<<<<<<<<<<<<
 *         hb_raster_paint_set_scale_factor(self._hb_raster_paint, x, y)
 * 
*/
  __pyx_t_1 = __pyx_v_value;
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_x = __pyx_t_2;
  __pyx_v_y = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":192
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
 *         hb_raster_paint_set_scale_factor(self._hb_raster_paint, x, y)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  hb_raster_paint_set_scale_factor(__pyx_v_self->_hb_raster_paint, __pyx_v_x, __pyx_v_y);

  /* "src/uharfbuzz/_raster.pxi":189
 *         return (x, y)
 * 
 *     @scale_factor.setter             # <<<<<<<<<<<<<<
 *     def scale_factor(self, value: Tuple[float, float]):
 *         x, y = value
*/

  /* function exit code */
  __pyx_r = 0;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":194
 *         hb_raster_paint_set_scale_factor(self._hb_raster_paint, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  hb_raster_extents_t __pyx_v_c_extents;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":197
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_paint_get_extents(self._hb_raster_paint, &c_extents):             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterExtents(
*/
  __pyx_t_1 = (!(hb_raster_paint_get_extents(__pyx_v_self->_hb_raster_paint, (&__pyx_v_c_extents)) != 0));
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":198
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_paint_get_extents(self._hb_raster_paint, &c_extents):
 *             return None             # <<<<<<<<<<<<<<
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_raster.pxi":197
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
 *         if not hb_raster_paint_get_extents(self._hb_raster_paint, &c_extents):             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterExtents(
*/
  }

  /* "src/uharfbuzz/_raster.pxi":199
 *         if not hb_raster_paint_get_extents(self._hb_raster_paint, &c_extents):
 *             return None
 *         return RasterExtents(             # <<<<<<<<<<<<<<
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_RasterExtents); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "src/uharfbuzz/_raster.pxi":200
 *             return None
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,             # <<<<<<<<<<<<<<
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
*/
  __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_c_extents.x_origin); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "src/uharfbuzz/_raster.pxi":201
 *         return RasterExtents(
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,             # <<<<<<<<<<<<<<
 *             width=c_extents.width,
 *             height=c_extents.height,
*/
  __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_c_extents.y_origin); if (unlikely(!__pyx_t_6)) __PYX_ERR(10, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "src/uharfbuzz/_raster.pxi":202
 *             x_origin=c_extents.x_origin,
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,             # <<<<<<<<<<<<<<
 *             height=c_extents.height,
 *             stride=c_extents.stride,
*/
  __pyx_t_7 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.width); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "src/uharfbuzz/_raster.pxi":203
 *             y_origin=c_extents.y_origin,
 *             width=c_extents.width,
 *             height=c_extents.height,             # <<<<<<<<<<<<<<
 *             stride=c_extents.stride,
 *         )
*/
  __pyx_t_8 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.height); if (unlikely(!__pyx_t_8)) __PYX_ERR(10, 203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "src/uharfbuzz/_raster.pxi":204
 *             width=c_extents.width,
 *             height=c_extents.height,
 *             stride=c_extents.stride,             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_9 = __Pyx_PyLong_From_unsigned_int(__pyx_v_c_extents.stride); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_3);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_10 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 5 : 0)] = {__pyx_t_3, NULL};
    __pyx_t_11 = __Pyx_MakeVectorcallBuilderKwds(5); if (unlikely(!__pyx_t_11)) __PYX_ERR(10, 199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_x_origin, __pyx_t_5, __pyx_t_11, __pyx_callargs+1, 0) < (0)) __PYX_ERR(10, 199, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_y_origin, __pyx_t_6, __pyx_t_11, __pyx_callargs+1, 1) < (0)) __PYX_ERR(10, 199, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_width, __pyx_t_7, __pyx_t_11, __pyx_callargs+1, 2) < (0)) __PYX_ERR(10, 199, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_height, __pyx_t_8, __pyx_t_11, __pyx_callargs+1, 3) < (0)) __PYX_ERR(10, 199, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_stride, __pyx_t_9, __pyx_t_11, __pyx_callargs+1, 4) < (0)) __PYX_ERR(10, 199, __pyx_L1_error)
    __pyx_t_2 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_11);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __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_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":194
 *         hb_raster_paint_set_scale_factor(self._hb_raster_paint, x, y)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def extents(self) -> RasterExtents | None:
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.extents.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":207
 *         )
 * 
 *     @extents.setter             # <<<<<<<<<<<<<<
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value) {
  hb_raster_extents_t __pyx_v_c_extents;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_raster.pxi":210
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
 *         c_extents.x_origin = value.x_origin             # <<<<<<<<<<<<<<
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_x_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 210, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.x_origin = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":211
 *         cdef hb_raster_extents_t c_extents
 *         c_extents.x_origin = value.x_origin
 *         c_extents.y_origin = value.y_origin             # <<<<<<<<<<<<<<
 *         c_extents.width = value.width
 *         c_extents.height = value.height
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_y_origin); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(10, 211, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.y_origin = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":212
 *         c_extents.x_origin = value.x_origin
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width             # <<<<<<<<<<<<<<
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 212, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 212, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.width = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":213
 *         c_extents.y_origin = value.y_origin
 *         c_extents.width = value.width
 *         c_extents.height = value.height             # <<<<<<<<<<<<<<
 *         c_extents.stride = value.stride
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 213, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 213, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.height = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":214
 *         c_extents.width = value.width
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride             # <<<<<<<<<<<<<<
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)
 * 
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_mstate_global->__pyx_n_u_stride); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 214, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 214, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.stride = __pyx_t_3;

  /* "src/uharfbuzz/_raster.pxi":215
 *         c_extents.height = value.height
 *         c_extents.stride = value.stride
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)             # <<<<<<<<<<<<<<
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:
*/
  hb_raster_paint_set_extents(__pyx_v_self->_hb_raster_paint, (&__pyx_v_c_extents));

  /* "src/uharfbuzz/_raster.pxi":207
 *         )
 * 
 *     @extents.setter             # <<<<<<<<<<<<<<
 *     def extents(self, value: RasterExtents):
 *         cdef hb_raster_extents_t c_extents
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.extents.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":217
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents = {"set_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_extents = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_glyph_extents (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_extents,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 217, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 217, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_glyph_extents", 0) < (0)) __PYX_ERR(10, 217, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_glyph_extents", 1, 1, 1, i); __PYX_ERR(10, 217, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 217, __pyx_L3_error)
    }
    __pyx_v_extents = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_glyph_extents", 1, 1, 1, __pyx_nargs); __PYX_ERR(10, 217, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.set_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_4set_glyph_extents(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_extents);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_4set_glyph_extents(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_extents) {
  hb_glyph_extents_t __pyx_v_c_extents;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  hb_position_t __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_glyph_extents", 0);

  /* "src/uharfbuzz/_raster.pxi":219
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing             # <<<<<<<<<<<<<<
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_x_bearing); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 219, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.x_bearing = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":220
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
 *         c_extents.y_bearing = extents.y_bearing             # <<<<<<<<<<<<<<
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_y_bearing); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 220, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.y_bearing = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":221
 *         c_extents.x_bearing = extents.x_bearing
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width             # <<<<<<<<<<<<<<
 *         c_extents.height = extents.height
 *         return hb_raster_paint_set_glyph_extents(self._hb_raster_paint, &c_extents)
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_width); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.width = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":222
 *         c_extents.y_bearing = extents.y_bearing
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_set_glyph_extents(self._hb_raster_paint, &c_extents)
 * 
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_extents, __pyx_mstate_global->__pyx_n_u_height); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_hb_position_t(__pyx_t_1); if (unlikely((__pyx_t_2 == ((hb_position_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 222, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_c_extents.height = __pyx_t_2;

  /* "src/uharfbuzz/_raster.pxi":223
 *         c_extents.width = extents.width
 *         c_extents.height = extents.height
 *         return hb_raster_paint_set_glyph_extents(self._hb_raster_paint, &c_extents)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_raster_paint_set_glyph_extents(__pyx_v_self->_hb_raster_paint, (&__pyx_v_c_extents))); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 223, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":217
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.set_glyph_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":225
 *         return hb_raster_paint_set_glyph_extents(self._hb_raster_paint, &c_extents)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def foreground(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_foreground(self._hb_raster_paint))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":227
 *     @property
 *     def foreground(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_foreground(self._hb_raster_paint))             # <<<<<<<<<<<<<<
 * 
 *     @foreground.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_uint32_t(hb_raster_paint_get_foreground(__pyx_v_self->_hb_raster_paint)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":225
 *         return hb_raster_paint_set_glyph_extents(self._hb_raster_paint, &c_extents)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def foreground(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_foreground(self._hb_raster_paint))
*/

  /* 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("uharfbuzz._harfbuzz.RasterPaint.foreground.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":229
 *         return Color.from_int(hb_raster_paint_get_foreground(self._hb_raster_paint))
 * 
 *     @foreground.setter             # <<<<<<<<<<<<<<
 *     def foreground(self, value: Color):
 *         hb_raster_paint_set_foreground(self._hb_raster_paint, value.to_int())
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  hb_color_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_raster.pxi":231
 *     @foreground.setter
 *     def foreground(self, value: Color):
 *         hb_raster_paint_set_foreground(self._hb_raster_paint, value.to_int())             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_2 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_int, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 231, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  hb_raster_paint_set_foreground(__pyx_v_self->_hb_raster_paint, __pyx_t_4);

  /* "src/uharfbuzz/_raster.pxi":229
 *         return Color.from_int(hb_raster_paint_get_foreground(self._hb_raster_paint))
 * 
 *     @foreground.setter             # <<<<<<<<<<<<<<
 *     def foreground(self, value: Color):
 *         hb_raster_paint_set_foreground(self._hb_raster_paint, value.to_int())
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.foreground.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":233
 *         hb_raster_paint_set_foreground(self._hb_raster_paint, value.to_int())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def background(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_background(self._hb_raster_paint))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":235
 *     @property
 *     def background(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_background(self._hb_raster_paint))             # <<<<<<<<<<<<<<
 * 
 *     @background.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyLong_From_uint32_t(hb_raster_paint_get_background(__pyx_v_self->_hb_raster_paint)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_4, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":233
 *         hb_raster_paint_set_foreground(self._hb_raster_paint, value.to_int())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def background(self) -> Color:
 *         return Color.from_int(hb_raster_paint_get_background(self._hb_raster_paint))
*/

  /* 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("uharfbuzz._harfbuzz.RasterPaint.background.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":237
 *         return Color.from_int(hb_raster_paint_get_background(self._hb_raster_paint))
 * 
 *     @background.setter             # <<<<<<<<<<<<<<
 *     def background(self, value: Color):
 *         hb_raster_paint_set_background(self._hb_raster_paint, value.to_int())
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), ((PyObject *)__pyx_v_value));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  hb_color_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_raster.pxi":239
 *     @background.setter
 *     def background(self, value: Color):
 *         hb_raster_paint_set_background(self._hb_raster_paint, value.to_int())             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __pyx_t_2 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_int, __pyx_callargs+__pyx_t_3, (1-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_t_4 = __Pyx_PyLong_As_uint32_t(__pyx_t_1); if (unlikely((__pyx_t_4 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  hb_raster_paint_set_background(__pyx_v_self->_hb_raster_paint, __pyx_t_4);

  /* "src/uharfbuzz/_raster.pxi":237
 *         return Color.from_int(hb_raster_paint_get_background(self._hb_raster_paint))
 * 
 *     @background.setter             # <<<<<<<<<<<<<<
 *     def background(self, value: Color):
 *         hb_raster_paint_set_background(self._hb_raster_paint, value.to_int())
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.background.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":241
 *         hb_raster_paint_set_background(self._hb_raster_paint, value.to_int())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def palette(self) -> int:
 *         return hb_raster_paint_get_palette(self._hb_raster_paint)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_raster.pxi":243
 *     @property
 *     def palette(self) -> int:
 *         return hb_raster_paint_get_palette(self._hb_raster_paint)             # <<<<<<<<<<<<<<
 * 
 *     @palette.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_raster_paint_get_palette(__pyx_v_self->_hb_raster_paint)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":241
 *         hb_raster_paint_set_background(self._hb_raster_paint, value.to_int())
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def palette(self) -> int:
 *         return hb_raster_paint_get_palette(self._hb_raster_paint)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.palette.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":245
 *         return hb_raster_paint_get_palette(self._hb_raster_paint)
 * 
 *     @palette.setter             # <<<<<<<<<<<<<<
 *     def palette(self, value: int):
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_value), (&PyLong_Type), 0, "value", 2))) __PYX_ERR(10, 246, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), ((PyObject*)__pyx_v_value));

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  goto __pyx_L5_cleaned_up;
  __pyx_L0:;
  __pyx_L5_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  unsigned int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_raster.pxi":247
 *     @palette.setter
 *     def palette(self, value: int):
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)             # <<<<<<<<<<<<<<
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 247, __pyx_L1_error)
  hb_raster_paint_set_palette(__pyx_v_self->_hb_raster_paint, __pyx_t_1);

  /* "src/uharfbuzz/_raster.pxi":245
 *         return hb_raster_paint_get_palette(self._hb_raster_paint)
 * 
 *     @palette.setter             # <<<<<<<<<<<<<<
 *     def palette(self, value: int):
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.palette.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":249
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_set_custom_palette_color(
 *             self._hb_raster_paint, color_index, color.to_int())
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color = {"set_custom_palette_color", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_color_index = 0;
  PyObject *__pyx_v_color = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_custom_palette_color (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_color_index,&__pyx_mstate_global->__pyx_n_u_color,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 249, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 249, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 249, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_custom_palette_color", 0) < (0)) __PYX_ERR(10, 249, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_custom_palette_color", 1, 2, 2, i); __PYX_ERR(10, 249, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 249, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 249, __pyx_L3_error)
    }
    if (__Pyx_PyInt_FromNumber(&values[0], "color_index", 0) < (0)) __PYX_ERR(10, 249, __pyx_L3_error)
    __pyx_v_color_index = ((PyObject*)values[0]);
    __pyx_v_color = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_custom_palette_color", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 249, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.set_custom_palette_color", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_color_index), (&PyLong_Type), 0, "color_index", 2))) __PYX_ERR(10, 249, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_6set_custom_palette_color(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_color_index, __pyx_v_color);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_6set_custom_palette_color(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, PyObject *__pyx_v_color_index, PyObject *__pyx_v_color) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  hb_color_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_custom_palette_color", 0);

  /* "src/uharfbuzz/_raster.pxi":250
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:
 *         return hb_raster_paint_set_custom_palette_color(             # <<<<<<<<<<<<<<
 *             self._hb_raster_paint, color_index, color.to_int())
 * 
*/
  __Pyx_XDECREF(__pyx_r);

  /* "src/uharfbuzz/_raster.pxi":251
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:
 *         return hb_raster_paint_set_custom_palette_color(
 *             self._hb_raster_paint, color_index, color.to_int())             # <<<<<<<<<<<<<<
 * 
 *     def clear_custom_palette_colors(self):
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_color_index); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(10, 251, __pyx_L1_error)
  __pyx_t_3 = __pyx_v_color;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_to_int, __pyx_callargs+__pyx_t_4, (1-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_t_5 = __Pyx_PyLong_As_uint32_t(__pyx_t_2); if (unlikely((__pyx_t_5 == ((hb_color_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 251, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_raster.pxi":250
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:
 *         return hb_raster_paint_set_custom_palette_color(             # <<<<<<<<<<<<<<
 *             self._hb_raster_paint, color_index, color.to_int())
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_raster_paint_set_custom_palette_color(__pyx_v_self->_hb_raster_paint, __pyx_t_1, __pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":249
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_set_custom_palette_color(
 *             self._hb_raster_paint, color_index, color.to_int())
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.set_custom_palette_color", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":253
 *             self._hb_raster_paint, color_index, color.to_int())
 * 
 *     def clear_custom_palette_colors(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors = {"clear_custom_palette_colors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_custom_palette_colors (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear_custom_palette_colors", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear_custom_palette_colors", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_8clear_custom_palette_colors(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_8clear_custom_palette_colors(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear_custom_palette_colors", 0);

  /* "src/uharfbuzz/_raster.pxi":254
 * 
 *     def clear_custom_palette_colors(self):
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)             # <<<<<<<<<<<<<<
 * 
 *     def paint_glyph(self, font: Font, glyph: int):
*/
  hb_raster_paint_clear_custom_palette_colors(__pyx_v_self->_hb_raster_paint);

  /* "src/uharfbuzz/_raster.pxi":253
 *             self._hb_raster_paint, color_index, color.to_int())
 * 
 *     def clear_custom_palette_colors(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":256
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
 *     def paint_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph = {"paint_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("paint_glyph (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 256, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 256, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 256, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "paint_glyph", 0) < (0)) __PYX_ERR(10, 256, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("paint_glyph", 1, 2, 2, i); __PYX_ERR(10, 256, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 256, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 256, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(10, 256, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("paint_glyph", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 256, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.paint_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(10, 256, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(10, 256, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10paint_glyph(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_10paint_glyph(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("paint_glyph", 0);

  /* "src/uharfbuzz/_raster.pxi":257
 * 
 *     def paint_glyph(self, font: Font, glyph: int):
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def paint_glyph_or_fail(self, font: Font, glyph: int) -> bool:
*/
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 257, __pyx_L1_error)
  hb_raster_paint_glyph(__pyx_v_self->_hb_raster_paint, __pyx_v_font->_hb_font, __pyx_t_1);

  /* "src/uharfbuzz/_raster.pxi":256
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
 *     def paint_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.paint_glyph", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":259
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def paint_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail = {"paint_glyph_or_fail", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("paint_glyph_or_fail (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(10, 259, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "paint_glyph_or_fail", 0) < (0)) __PYX_ERR(10, 259, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("paint_glyph_or_fail", 1, 2, 2, i); __PYX_ERR(10, 259, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(10, 259, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(10, 259, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(10, 259, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("paint_glyph_or_fail", 1, 2, 2, __pyx_nargs); __PYX_ERR(10, 259, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.paint_glyph_or_fail", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(10, 259, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(10, 259, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12paint_glyph_or_fail(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_12paint_glyph_or_fail(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_codepoint_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("paint_glyph_or_fail", 0);

  /* "src/uharfbuzz/_raster.pxi":260
 * 
 *     def paint_glyph_or_fail(self, font: Font, glyph: int) -> bool:
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)             # <<<<<<<<<<<<<<
 * 
 *     def render(self) -> RasterImage | None:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_As_hb_codepoint_t(__pyx_v_glyph); if (unlikely((__pyx_t_1 == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(10, 260, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_hb_bool_t(hb_raster_paint_glyph_or_fail(__pyx_v_self->_hb_raster_paint, __pyx_v_font->_hb_font, __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 260, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":259
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def paint_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.paint_glyph_or_fail", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":262
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_15render(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_15render = {"render", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_15render, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_15render(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("render (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("render", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("render", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_14render(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_14render(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  hb_raster_image_t *__pyx_v_img;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("render", 0);

  /* "src/uharfbuzz/_raster.pxi":263
 * 
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)             # <<<<<<<<<<<<<<
 *         if img is NULL:
 *             return None
*/
  __pyx_v_img = hb_raster_paint_render(__pyx_v_self->_hb_raster_paint);

  /* "src/uharfbuzz/_raster.pxi":264
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterImage.from_ptr(img)
*/
  __pyx_t_1 = (__pyx_v_img == NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_raster.pxi":265
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:
 *             return None             # <<<<<<<<<<<<<<
 *         return RasterImage.from_ptr(img)
 * 
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "src/uharfbuzz/_raster.pxi":264
 *     def render(self) -> RasterImage | None:
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:             # <<<<<<<<<<<<<<
 *             return None
 *         return RasterImage.from_ptr(img)
*/
  }

  /* "src/uharfbuzz/_raster.pxi":266
 *         if img is NULL:
 *             return None
 *         return RasterImage.from_ptr(img)             # <<<<<<<<<<<<<<
 * 
 *     def clear(self):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_11RasterImage_from_ptr(__pyx_v_img)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_raster.pxi":262
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.render", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":268
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear = {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("clear", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("clear", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_16clear(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_16clear(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);

  /* "src/uharfbuzz/_raster.pxi":269
 * 
 *     def clear(self):
 *         hb_raster_paint_clear(self._hb_raster_paint)             # <<<<<<<<<<<<<<
 * 
 *     def reset(self):
*/
  hb_raster_paint_clear(__pyx_v_self->_hb_raster_paint);

  /* "src/uharfbuzz/_raster.pxi":268
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_raster.pxi":271
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_reset(self._hb_raster_paint)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset = {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("reset", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_18reset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_18reset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reset", 0);

  /* "src/uharfbuzz/_raster.pxi":272
 * 
 *     def reset(self):
 *         hb_raster_paint_reset(self._hb_raster_paint)             # <<<<<<<<<<<<<<
*/
  hb_raster_paint_reset(__pyx_v_self->_hb_raster_paint);

  /* "src/uharfbuzz/_raster.pxi":271
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_reset(self._hb_raster_paint)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_20__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_22__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11RasterPaint_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.RasterPaint.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":5
 *     cdef unsigned int _num
 * 
 *     def __cinit__(self, num_nodes):             # <<<<<<<<<<<<<<
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))
 *         if self._hb_obj_list == NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_num_nodes = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_num_nodes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(11, 5, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 5, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(11, 5, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, i); __PYX_ERR(11, 5, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 5, __pyx_L3_error)
    }
    __pyx_v_num_nodes = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, __pyx_nargs); __PYX_ERR(11, 5, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_self), __pyx_v_num_nodes);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, PyObject *__pyx_v_num_nodes) {
  int __pyx_r;
  size_t __pyx_t_1;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_serialize.pxi":6
 * 
 *     def __cinit__(self, num_nodes):
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))             # <<<<<<<<<<<<<<
 *         if self._hb_obj_list == NULL:
 *             raise MemoryError()
*/
  __pyx_t_1 = __Pyx_PyLong_As_size_t(__pyx_v_num_nodes); if (unlikely((__pyx_t_1 == (size_t)-1) && PyErr_Occurred())) __PYX_ERR(11, 6, __pyx_L1_error)
  __pyx_v_self->_hb_obj_list = ((hb_subset_serialize_object_t *)calloc(__pyx_t_1, (sizeof(hb_subset_serialize_object_t))));

  /* "src/uharfbuzz/_serialize.pxi":7
 *     def __cinit__(self, num_nodes):
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))
 *         if self._hb_obj_list == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         self._num = num_nodes
*/
  __pyx_t_2 = (__pyx_v_self->_hb_obj_list == NULL);
  if (unlikely(__pyx_t_2)) {

    /* "src/uharfbuzz/_serialize.pxi":8
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))
 *         if self._hb_obj_list == NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *         self._num = num_nodes
 * 
*/
    PyErr_NoMemory(); __PYX_ERR(11, 8, __pyx_L1_error)

    /* "src/uharfbuzz/_serialize.pxi":7
 *     def __cinit__(self, num_nodes):
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))
 *         if self._hb_obj_list == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *         self._num = num_nodes
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":9
 *         if self._hb_obj_list == NULL:
 *             raise MemoryError()
 *         self._num = num_nodes             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
  __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_num_nodes); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(11, 9, __pyx_L1_error)
  __pyx_v_self->_num = __pyx_t_3;

  /* "src/uharfbuzz/_serialize.pxi":5
 *     cdef unsigned int _num
 * 
 *     def __cinit__(self, num_nodes):             # <<<<<<<<<<<<<<
 *         self._hb_obj_list = <hb_subset_serialize_object_t*>calloc(num_nodes, sizeof(hb_subset_serialize_object_t))
 *         if self._hb_obj_list == NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":11
 *         self._num = num_nodes
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_obj_list != NULL:
 *             for i in range(self._num):
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self) {
  unsigned int __pyx_v_i;
  int __pyx_t_1;
  unsigned int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;

  /* "src/uharfbuzz/_serialize.pxi":12
 * 
 *     def __dealloc__(self):
 *         if self._hb_obj_list != NULL:             # <<<<<<<<<<<<<<
 *             for i in range(self._num):
 *                 if self._hb_obj_list[i].real_links != NULL:
*/
  __pyx_t_1 = (__pyx_v_self->_hb_obj_list != NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_serialize.pxi":13
 *     def __dealloc__(self):
 *         if self._hb_obj_list != NULL:
 *             for i in range(self._num):             # <<<<<<<<<<<<<<
 *                 if self._hb_obj_list[i].real_links != NULL:
 *                     free(self._hb_obj_list[i].real_links)
*/
    __pyx_t_2 = __pyx_v_self->_num;
    __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;

      /* "src/uharfbuzz/_serialize.pxi":14
 *         if self._hb_obj_list != NULL:
 *             for i in range(self._num):
 *                 if self._hb_obj_list[i].real_links != NULL:             # <<<<<<<<<<<<<<
 *                     free(self._hb_obj_list[i].real_links)
 *                 if self._hb_obj_list[i].virtual_links != NULL:
*/
      __pyx_t_1 = ((__pyx_v_self->_hb_obj_list[__pyx_v_i]).real_links != NULL);
      if (__pyx_t_1) {

        /* "src/uharfbuzz/_serialize.pxi":15
 *             for i in range(self._num):
 *                 if self._hb_obj_list[i].real_links != NULL:
 *                     free(self._hb_obj_list[i].real_links)             # <<<<<<<<<<<<<<
 *                 if self._hb_obj_list[i].virtual_links != NULL:
 *                     free(self._hb_obj_list[i].virtual_links)
*/
        free((__pyx_v_self->_hb_obj_list[__pyx_v_i]).real_links);

        /* "src/uharfbuzz/_serialize.pxi":14
 *         if self._hb_obj_list != NULL:
 *             for i in range(self._num):
 *                 if self._hb_obj_list[i].real_links != NULL:             # <<<<<<<<<<<<<<
 *                     free(self._hb_obj_list[i].real_links)
 *                 if self._hb_obj_list[i].virtual_links != NULL:
*/
      }

      /* "src/uharfbuzz/_serialize.pxi":16
 *                 if self._hb_obj_list[i].real_links != NULL:
 *                     free(self._hb_obj_list[i].real_links)
 *                 if self._hb_obj_list[i].virtual_links != NULL:             # <<<<<<<<<<<<<<
 *                     free(self._hb_obj_list[i].virtual_links)
 *             free(self._hb_obj_list)
*/
      __pyx_t_1 = ((__pyx_v_self->_hb_obj_list[__pyx_v_i]).virtual_links != NULL);
      if (__pyx_t_1) {

        /* "src/uharfbuzz/_serialize.pxi":17
 *                     free(self._hb_obj_list[i].real_links)
 *                 if self._hb_obj_list[i].virtual_links != NULL:
 *                     free(self._hb_obj_list[i].virtual_links)             # <<<<<<<<<<<<<<
 *             free(self._hb_obj_list)
 * 
*/
        free((__pyx_v_self->_hb_obj_list[__pyx_v_i]).virtual_links);

        /* "src/uharfbuzz/_serialize.pxi":16
 *                 if self._hb_obj_list[i].real_links != NULL:
 *                     free(self._hb_obj_list[i].real_links)
 *                 if self._hb_obj_list[i].virtual_links != NULL:             # <<<<<<<<<<<<<<
 *                     free(self._hb_obj_list[i].virtual_links)
 *             free(self._hb_obj_list)
*/
      }
    }

    /* "src/uharfbuzz/_serialize.pxi":18
 *                 if self._hb_obj_list[i].virtual_links != NULL:
 *                     free(self._hb_obj_list[i].virtual_links)
 *             free(self._hb_obj_list)             # <<<<<<<<<<<<<<
 * 
 *     cdef update_obj_length(self,
*/
    free(__pyx_v_self->_hb_obj_list);

    /* "src/uharfbuzz/_serialize.pxi":12
 * 
 *     def __dealloc__(self):
 *         if self._hb_obj_list != NULL:             # <<<<<<<<<<<<<<
 *             for i in range(self._num):
 *                 if self._hb_obj_list[i].real_links != NULL:
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":11
 *         self._num = num_nodes
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_obj_list != NULL:
 *             for i in range(self._num):
*/

  /* function exit code */
}

/* "src/uharfbuzz/_serialize.pxi":20
 *             free(self._hb_obj_list)
 * 
 *     cdef update_obj_length(self,             # <<<<<<<<<<<<<<
 *                            unsigned int idx,
 *                            char* head,
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_obj_length(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, char *__pyx_v_head, char *__pyx_v_tail) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update_obj_length", 0);

  /* "src/uharfbuzz/_serialize.pxi":24
 *                            char* head,
 *                            char* tail):
 *         self._hb_obj_list[idx].head = head             # <<<<<<<<<<<<<<
 *         self._hb_obj_list[idx].tail = tail
 * 
*/
  (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).head = __pyx_v_head;

  /* "src/uharfbuzz/_serialize.pxi":25
 *                            char* tail):
 *         self._hb_obj_list[idx].head = head
 *         self._hb_obj_list[idx].tail = tail             # <<<<<<<<<<<<<<
 * 
 *     cdef hb_subset_serialize_link_t* create_links(self, unsigned int idx,
*/
  (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).tail = __pyx_v_tail;

  /* "src/uharfbuzz/_serialize.pxi":20
 *             free(self._hb_obj_list)
 * 
 *     cdef update_obj_length(self,             # <<<<<<<<<<<<<<
 *                            unsigned int idx,
 *                            char* head,
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":27
 *         self._hb_obj_list[idx].tail = tail
 * 
 *     cdef hb_subset_serialize_link_t* create_links(self, unsigned int idx,             # <<<<<<<<<<<<<<
 *                                                   unsigned int link_num,
 *                                                   bint is_real_link):
*/

static hb_subset_serialize_link_t *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_create_links(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, unsigned int __pyx_v_link_num, int __pyx_v_is_real_link) {
  hb_subset_serialize_link_t *__pyx_v_p;
  hb_subset_serialize_link_t *__pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_serialize.pxi":30
 *                                                   unsigned int link_num,
 *                                                   bint is_real_link):
 *         if link_num == 0:             # <<<<<<<<<<<<<<
 *             return NULL
 * 
*/
  __pyx_t_1 = (__pyx_v_link_num == 0);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_serialize.pxi":31
 *                                                   bint is_real_link):
 *         if link_num == 0:
 *             return NULL             # <<<<<<<<<<<<<<
 * 
 *         cdef hb_subset_serialize_link_t* p = <hb_subset_serialize_link_t*>calloc(link_num, sizeof(hb_subset_serialize_link_t))
*/
    __pyx_r = NULL;
    goto __pyx_L0;

    /* "src/uharfbuzz/_serialize.pxi":30
 *                                                   unsigned int link_num,
 *                                                   bint is_real_link):
 *         if link_num == 0:             # <<<<<<<<<<<<<<
 *             return NULL
 * 
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":33
 *             return NULL
 * 
 *         cdef hb_subset_serialize_link_t* p = <hb_subset_serialize_link_t*>calloc(link_num, sizeof(hb_subset_serialize_link_t))             # <<<<<<<<<<<<<<
 *         if p == NULL:
 *             raise MemoryError()
*/
  __pyx_v_p = ((hb_subset_serialize_link_t *)calloc(__pyx_v_link_num, (sizeof(hb_subset_serialize_link_t))));

  /* "src/uharfbuzz/_serialize.pxi":34
 * 
 *         cdef hb_subset_serialize_link_t* p = <hb_subset_serialize_link_t*>calloc(link_num, sizeof(hb_subset_serialize_link_t))
 *         if p == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_p == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_serialize.pxi":35
 *         cdef hb_subset_serialize_link_t* p = <hb_subset_serialize_link_t*>calloc(link_num, sizeof(hb_subset_serialize_link_t))
 *         if p == NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *         if is_real_link:
*/
    PyErr_NoMemory(); __PYX_ERR(11, 35, __pyx_L1_error)

    /* "src/uharfbuzz/_serialize.pxi":34
 * 
 *         cdef hb_subset_serialize_link_t* p = <hb_subset_serialize_link_t*>calloc(link_num, sizeof(hb_subset_serialize_link_t))
 *         if p == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":37
 *             raise MemoryError()
 * 
 *         if is_real_link:             # <<<<<<<<<<<<<<
 *             self._hb_obj_list[idx].num_real_links = link_num
 *             self._hb_obj_list[idx].real_links = p
*/
  if (__pyx_v_is_real_link) {

    /* "src/uharfbuzz/_serialize.pxi":38
 * 
 *         if is_real_link:
 *             self._hb_obj_list[idx].num_real_links = link_num             # <<<<<<<<<<<<<<
 *             self._hb_obj_list[idx].real_links = p
 *         else:
*/
    (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).num_real_links = __pyx_v_link_num;

    /* "src/uharfbuzz/_serialize.pxi":39
 *         if is_real_link:
 *             self._hb_obj_list[idx].num_real_links = link_num
 *             self._hb_obj_list[idx].real_links = p             # <<<<<<<<<<<<<<
 *         else:
 *             self._hb_obj_list[idx].num_virtual_links = link_num
*/
    (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).real_links = __pyx_v_p;

    /* "src/uharfbuzz/_serialize.pxi":37
 *             raise MemoryError()
 * 
 *         if is_real_link:             # <<<<<<<<<<<<<<
 *             self._hb_obj_list[idx].num_real_links = link_num
 *             self._hb_obj_list[idx].real_links = p
*/
    goto __pyx_L5;
  }

  /* "src/uharfbuzz/_serialize.pxi":41
 *             self._hb_obj_list[idx].real_links = p
 *         else:
 *             self._hb_obj_list[idx].num_virtual_links = link_num             # <<<<<<<<<<<<<<
 *             self._hb_obj_list[idx].virtual_links = p
 *         return p
*/
  /*else*/ {
    (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).num_virtual_links = __pyx_v_link_num;

    /* "src/uharfbuzz/_serialize.pxi":42
 *         else:
 *             self._hb_obj_list[idx].num_virtual_links = link_num
 *             self._hb_obj_list[idx].virtual_links = p             # <<<<<<<<<<<<<<
 *         return p
 * 
*/
    (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).virtual_links = __pyx_v_p;
  }
  __pyx_L5:;

  /* "src/uharfbuzz/_serialize.pxi":43
 *             self._hb_obj_list[idx].num_virtual_links = link_num
 *             self._hb_obj_list[idx].virtual_links = p
 *         return p             # <<<<<<<<<<<<<<
 * 
 *     cdef update_links(self, unsigned int idx, bint is_real_link,
*/
  __pyx_r = __pyx_v_p;
  goto __pyx_L0;

  /* "src/uharfbuzz/_serialize.pxi":27
 *         self._hb_obj_list[idx].tail = tail
 * 
 *     cdef hb_subset_serialize_link_t* create_links(self, unsigned int idx,             # <<<<<<<<<<<<<<
 *                                                   unsigned int link_num,
 *                                                   bint is_real_link):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.create_links", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":45
 *         return p
 * 
 *     cdef update_links(self, unsigned int idx, bint is_real_link,             # <<<<<<<<<<<<<<
 *                       links: List[Tuple[int, int, int]]):
 *         cdef unsigned int num_links = len(links)
*/

static PyObject *__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_links(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, unsigned int __pyx_v_idx, int __pyx_v_is_real_link, PyObject *__pyx_v_links) {
  unsigned int __pyx_v_num_links;
  hb_subset_serialize_link_t *__pyx_v_l;
  unsigned int __pyx_v_i;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  hb_subset_serialize_link_t *__pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  unsigned int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("update_links", 0);

  /* "src/uharfbuzz/_serialize.pxi":47
 *     cdef update_links(self, unsigned int idx, bint is_real_link,
 *                       links: List[Tuple[int, int, int]]):
 *         cdef unsigned int num_links = len(links)             # <<<<<<<<<<<<<<
 *         cdef hb_subset_serialize_link_t* l = NULL
 *         if is_real_link:
*/
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_links); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 47, __pyx_L1_error)
  __pyx_v_num_links = __pyx_t_1;

  /* "src/uharfbuzz/_serialize.pxi":48
 *                       links: List[Tuple[int, int, int]]):
 *         cdef unsigned int num_links = len(links)
 *         cdef hb_subset_serialize_link_t* l = NULL             # <<<<<<<<<<<<<<
 *         if is_real_link:
 *             l = self._hb_obj_list[idx].real_links
*/
  __pyx_v_l = NULL;

  /* "src/uharfbuzz/_serialize.pxi":49
 *         cdef unsigned int num_links = len(links)
 *         cdef hb_subset_serialize_link_t* l = NULL
 *         if is_real_link:             # <<<<<<<<<<<<<<
 *             l = self._hb_obj_list[idx].real_links
 *         else:
*/
  if (__pyx_v_is_real_link) {

    /* "src/uharfbuzz/_serialize.pxi":50
 *         cdef hb_subset_serialize_link_t* l = NULL
 *         if is_real_link:
 *             l = self._hb_obj_list[idx].real_links             # <<<<<<<<<<<<<<
 *         else:
 *             l = self._hb_obj_list[idx].virtual_links
*/
    __pyx_t_2 = (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).real_links;
    __pyx_v_l = __pyx_t_2;

    /* "src/uharfbuzz/_serialize.pxi":49
 *         cdef unsigned int num_links = len(links)
 *         cdef hb_subset_serialize_link_t* l = NULL
 *         if is_real_link:             # <<<<<<<<<<<<<<
 *             l = self._hb_obj_list[idx].real_links
 *         else:
*/
    goto __pyx_L3;
  }

  /* "src/uharfbuzz/_serialize.pxi":52
 *             l = self._hb_obj_list[idx].real_links
 *         else:
 *             l = self._hb_obj_list[idx].virtual_links             # <<<<<<<<<<<<<<
 * 
 *         for i in range(num_links):
*/
  /*else*/ {
    __pyx_t_2 = (__pyx_v_self->_hb_obj_list[__pyx_v_idx]).virtual_links;
    __pyx_v_l = __pyx_t_2;
  }
  __pyx_L3:;

  /* "src/uharfbuzz/_serialize.pxi":54
 *             l = self._hb_obj_list[idx].virtual_links
 * 
 *         for i in range(num_links):             # <<<<<<<<<<<<<<
 *             l[i].position = links[i][0]
 *             l[i].width = links[i][1]
*/
  __pyx_t_3 = __pyx_v_num_links;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_i = __pyx_t_5;

    /* "src/uharfbuzz/_serialize.pxi":55
 * 
 *         for i in range(num_links):
 *             l[i].position = links[i][0]             # <<<<<<<<<<<<<<
 *             l[i].width = links[i][1]
 *             l[i].objidx = links[i][2]
*/
    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 55, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 55, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyLong_As_unsigned_int(__pyx_t_7); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(11, 55, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    (__pyx_v_l[__pyx_v_i]).position = __pyx_t_8;

    /* "src/uharfbuzz/_serialize.pxi":56
 *         for i in range(num_links):
 *             l[i].position = links[i][0]
 *             l[i].width = links[i][1]             # <<<<<<<<<<<<<<
 *             l[i].objidx = links[i][2]
 * 
*/
    __pyx_t_7 = __Pyx_GetItemInt_List(__pyx_v_links, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_7, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 56, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_8 = __Pyx_PyLong_As_unsigned_int(__pyx_t_6); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(11, 56, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    (__pyx_v_l[__pyx_v_i]).width = __pyx_t_8;

    /* "src/uharfbuzz/_serialize.pxi":57
 *             l[i].position = links[i][0]
 *             l[i].width = links[i][1]
 *             l[i].objidx = links[i][2]             # <<<<<<<<<<<<<<
 * 
 * class SerializerError(Exception):
*/
    __pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_links, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_t_6, 2, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 57, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_8 = __Pyx_PyLong_As_unsigned_int(__pyx_t_7); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(11, 57, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    (__pyx_v_l[__pyx_v_i]).objidx = __pyx_t_8;
  }

  /* "src/uharfbuzz/_serialize.pxi":45
 *         return p
 * 
 *     cdef update_links(self, unsigned int idx, bint is_real_link,             # <<<<<<<<<<<<<<
 *                       links: List[Tuple[int, int, int]]):
 *         cdef unsigned int num_links = len(links)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.update_links", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_4__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_4__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_6__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8HBObject_6__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.HBObject.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":66
 * 
 * 
 * @deprecated("serialize()")             # <<<<<<<<<<<<<<
 * def repack(subtables, graphnodes):
 *     return serialize(subtables, graphnodes)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5repack(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_5repack = {"repack", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_5repack, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_5repack(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_subtables = 0;
  PyObject *__pyx_v_graphnodes = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("repack (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_subtables,&__pyx_mstate_global->__pyx_n_u_graphnodes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(11, 66, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 66, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 66, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "repack", 0) < (0)) __PYX_ERR(11, 66, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("repack", 1, 2, 2, i); __PYX_ERR(11, 66, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 66, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 66, __pyx_L3_error)
    }
    __pyx_v_subtables = values[0];
    __pyx_v_graphnodes = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("repack", 1, 2, 2, __pyx_nargs); __PYX_ERR(11, 66, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.repack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_4repack(__pyx_self, __pyx_v_subtables, __pyx_v_graphnodes);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_4repack(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("repack", 0);

  /* "src/uharfbuzz/_serialize.pxi":68
 * @deprecated("serialize()")
 * def repack(subtables, graphnodes):
 *     return serialize(subtables, graphnodes)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_serialize); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_subtables, __pyx_v_graphnodes};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 68, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_serialize.pxi":66
 * 
 * 
 * @deprecated("serialize()")             # <<<<<<<<<<<<<<
 * def repack(subtables, graphnodes):
 *     return serialize(subtables, graphnodes)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.repack", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":71
 * 
 * 
 * @deprecated("serialize_with_tag()")             # <<<<<<<<<<<<<<
 * def repack_with_tag(tag, subtables, graphnodes):
 *     return serialize_with_tag(tag, subtables, graphnodes)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7repack_with_tag(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_7repack_with_tag = {"repack_with_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7repack_with_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_7repack_with_tag(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_subtables = 0;
  PyObject *__pyx_v_graphnodes = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("repack_with_tag (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_subtables,&__pyx_mstate_global->__pyx_n_u_graphnodes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(11, 71, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(11, 71, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 71, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 71, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "repack_with_tag", 0) < (0)) __PYX_ERR(11, 71, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("repack_with_tag", 1, 3, 3, i); __PYX_ERR(11, 71, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 71, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 71, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(11, 71, __pyx_L3_error)
    }
    __pyx_v_tag = values[0];
    __pyx_v_subtables = values[1];
    __pyx_v_graphnodes = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("repack_with_tag", 1, 3, 3, __pyx_nargs); __PYX_ERR(11, 71, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.repack_with_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_6repack_with_tag(__pyx_self, __pyx_v_tag, __pyx_v_subtables, __pyx_v_graphnodes);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_6repack_with_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("repack_with_tag", 0);

  /* "src/uharfbuzz/_serialize.pxi":73
 * @deprecated("serialize_with_tag()")
 * def repack_with_tag(tag, subtables, graphnodes):
 *     return serialize_with_tag(tag, subtables, graphnodes)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_serialize_with_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_tag, __pyx_v_subtables, __pyx_v_graphnodes};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 73, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_serialize.pxi":71
 * 
 * 
 * @deprecated("serialize_with_tag()")             # <<<<<<<<<<<<<<
 * def repack_with_tag(tag, subtables, graphnodes):
 *     return serialize_with_tag(tag, subtables, graphnodes)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.repack_with_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":76
 * 
 * 
 * def serialize(subtables: List[bytes],             # <<<<<<<<<<<<<<
 *               graphnodes: List[Tuple[List[Tuple[int, int, int]],
 *                                      List[Tuple[int, int, int]]
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9serialize(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_9serialize = {"serialize", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9serialize, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_9serialize(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_subtables = 0;
  PyObject *__pyx_v_graphnodes = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("serialize (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_subtables,&__pyx_mstate_global->__pyx_n_u_graphnodes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(11, 76, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "serialize", 0) < (0)) __PYX_ERR(11, 76, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("serialize", 1, 2, 2, i); __PYX_ERR(11, 76, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 76, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 76, __pyx_L3_error)
    }
    __pyx_v_subtables = ((PyObject*)values[0]);
    __pyx_v_graphnodes = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("serialize", 1, 2, 2, __pyx_nargs); __PYX_ERR(11, 76, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.serialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subtables), (&PyList_Type), 0, "subtables", 2))) __PYX_ERR(11, 76, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_graphnodes), (&PyList_Type), 0, "graphnodes", 2))) __PYX_ERR(11, 77, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_8serialize(__pyx_self, __pyx_v_subtables, __pyx_v_graphnodes);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_8serialize(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("serialize", 0);

  /* "src/uharfbuzz/_serialize.pxi":80
 *                                      List[Tuple[int, int, int]]
 *                                      ]]) -> bytes:
 *     return serialize_with_tag("", subtables, graphnodes)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_serialize_with_tag); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u__5, __pyx_v_subtables, __pyx_v_graphnodes};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 80, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_1))) __PYX_ERR(11, 80, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_serialize.pxi":76
 * 
 * 
 * def serialize(subtables: List[bytes],             # <<<<<<<<<<<<<<
 *               graphnodes: List[Tuple[List[Tuple[int, int, int]],
 *                                      List[Tuple[int, int, int]]
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.serialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_serialize.pxi":83
 * 
 * 
 * def serialize_with_tag(tag: str,             # <<<<<<<<<<<<<<
 *                        subtables: List[bytes],
 *                        graphnodes: List[Tuple[List[Tuple[int, int, int]],
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11serialize_with_tag(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
PyDoc_STRVAR(__pyx_doc_9uharfbuzz_9_harfbuzz_10serialize_with_tag, "The whole table is represented as a Graph\n       and the input graphnodes is a flat list of subtables\n       with each node(subtable) represented by a tuple of 2\n       list: real_link list and virtual_link list.\n\n       A link(egde) is an offset link between parent table and\n       child table. It's represented in the format of a tuple:\n       (posiiton: int, width: int, objidx: int):\n\n       - position: means relative position of the offset field\n         in bytes from the beginning of the subtable's C struct.\n         e.g:\n         a GSUB header struct in C looks like below:\n\n         uint16 majorVersion\n         uint16 minorVersion\n         offset16 scriptListOffset\n         offset16 featureListOffset\n         offset16 lookupListOffset\n         And the position for scriptListOffset is 4\n         which is calculated from (16+16)/8\n       - width: size of the offset:\n         e.g 2 for offset16 and 4 for offset32\n       - objidx: objidx is the index of the subtable\n         in graph/tree generated by postorder traversal\n\n       There're 2 types of links:\n       - real_link represents an real offset field in the parent table\n       - virtual_link is not real offset link, it specifies an ordering\n         constraint that harfbuzz packing must follow.\n         A virtual link would have 0 width, 0 position, and a real objidx.\n         e.g:\n         if Node A has a virtual link with objidx b(corresponding Node is B),\n         then that means Node B is always packed after Node A in the final\n         serialized order\n         ");
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11serialize_with_tag = {"serialize_with_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11serialize_with_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_9uharfbuzz_9_harfbuzz_10serialize_with_tag};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11serialize_with_tag(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_subtables = 0;
  PyObject *__pyx_v_graphnodes = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("serialize_with_tag (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_subtables,&__pyx_mstate_global->__pyx_n_u_graphnodes,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(11, 83, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(11, 83, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 83, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 83, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "serialize_with_tag", 0) < (0)) __PYX_ERR(11, 83, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("serialize_with_tag", 1, 3, 3, i); __PYX_ERR(11, 83, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(11, 83, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(11, 83, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(11, 83, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
    __pyx_v_subtables = ((PyObject*)values[1]);
    __pyx_v_graphnodes = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("serialize_with_tag", 1, 3, 3, __pyx_nargs); __PYX_ERR(11, 83, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.serialize_with_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(11, 83, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subtables), (&PyList_Type), 0, "subtables", 2))) __PYX_ERR(11, 84, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_graphnodes), (&PyList_Type), 0, "graphnodes", 2))) __PYX_ERR(11, 85, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10serialize_with_tag(__pyx_self, __pyx_v_tag, __pyx_v_subtables, __pyx_v_graphnodes);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10serialize_with_tag(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag, PyObject *__pyx_v_subtables, PyObject *__pyx_v_graphnodes) {
  unsigned int __pyx_v_num_nodes;
  PyObject *__pyx_v_table_bytes = 0;
  char *__pyx_v_table_data;
  unsigned int __pyx_v_head;
  unsigned int __pyx_v_tail;
  hb_subset_serialize_link_t *__pyx_v_p;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *__pyx_v_obj_list = 0;
  unsigned int __pyx_v_i;
  PyObject *__pyx_v_node = NULL;
  PyObject *__pyx_v_tag_packed = 0;
  char *__pyx_v_cstr;
  hb_blob_t *__pyx_v_packed_blob;
  unsigned int __pyx_v_blob_length;
  const char *__pyx_v_blob_data;
  PyObject *__pyx_v_packed = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  Py_ssize_t __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8[5];
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  char *__pyx_t_11;
  unsigned int __pyx_t_12;
  unsigned int __pyx_t_13;
  unsigned int __pyx_t_14;
  hb_subset_serialize_link_t *__pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("serialize_with_tag", 0);

  /* "src/uharfbuzz/_serialize.pxi":126
 *          """
 * 
 *     if len(subtables) != len(graphnodes):             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             f"Input num of subtables({len(subtables)}) != num of graph nodes({len(graphnodes)})"
*/
  __pyx_t_1 = __Pyx_PyList_GET_SIZE(__pyx_v_subtables); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(11, 126, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_graphnodes); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 126, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_1 != __pyx_t_2);
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_serialize.pxi":127
 * 
 *     if len(subtables) != len(graphnodes):
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             f"Input num of subtables({len(subtables)}) != num of graph nodes({len(graphnodes)})"
 *         )
*/
    __pyx_t_5 = NULL;

    /* "src/uharfbuzz/_serialize.pxi":128
 *     if len(subtables) != len(graphnodes):
 *         raise ValueError(
 *             f"Input num of subtables({len(subtables)}) != num of graph nodes({len(graphnodes)})"             # <<<<<<<<<<<<<<
 *         )
 *     cdef:
*/
    __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_subtables); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 128, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_2, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_graphnodes); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 128, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_2, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 128, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Input_num_of_subtables;
    __pyx_t_8[1] = __pyx_t_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_num_of_graph_nodes;
    __pyx_t_8[3] = __pyx_t_7;
    __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, 23 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 24 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127);
    if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 128, __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_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 127, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(11, 127, __pyx_L1_error)

    /* "src/uharfbuzz/_serialize.pxi":126
 *          """
 * 
 *     if len(subtables) != len(graphnodes):             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             f"Input num of subtables({len(subtables)}) != num of graph nodes({len(graphnodes)})"
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":131
 *         )
 *     cdef:
 *         unsigned int num_nodes = len(subtables)             # <<<<<<<<<<<<<<
 *         bytes table_bytes = b''.join(subtables)
 *         char* table_data = table_bytes
*/
  __pyx_t_2 = __Pyx_PyList_GET_SIZE(__pyx_v_subtables); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 131, __pyx_L1_error)
  __pyx_v_num_nodes = __pyx_t_2;

  /* "src/uharfbuzz/_serialize.pxi":132
 *     cdef:
 *         unsigned int num_nodes = len(subtables)
 *         bytes table_bytes = b''.join(subtables)             # <<<<<<<<<<<<<<
 *         char* table_data = table_bytes
 *         unsigned int head = 0, tail = 0
*/
  __pyx_t_4 = __Pyx_PyBytes_Join(__pyx_mstate_global->__pyx_kp_b__5, __pyx_v_subtables); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_table_bytes = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "src/uharfbuzz/_serialize.pxi":133
 *         unsigned int num_nodes = len(subtables)
 *         bytes table_bytes = b''.join(subtables)
 *         char* table_data = table_bytes             # <<<<<<<<<<<<<<
 *         unsigned int head = 0, tail = 0
 *         hb_subset_serialize_link_t* p = NULL
*/
  if (unlikely(__pyx_v_table_bytes == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
    __PYX_ERR(11, 133, __pyx_L1_error)
  }
  __pyx_t_11 = __Pyx_PyBytes_AsWritableString(__pyx_v_table_bytes); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(11, 133, __pyx_L1_error)
  __pyx_v_table_data = __pyx_t_11;

  /* "src/uharfbuzz/_serialize.pxi":134
 *         bytes table_bytes = b''.join(subtables)
 *         char* table_data = table_bytes
 *         unsigned int head = 0, tail = 0             # <<<<<<<<<<<<<<
 *         hb_subset_serialize_link_t* p = NULL
 *         HBObject obj_list = HBObject(num_nodes)
*/
  __pyx_v_head = 0;
  __pyx_v_tail = 0;

  /* "src/uharfbuzz/_serialize.pxi":135
 *         char* table_data = table_bytes
 *         unsigned int head = 0, tail = 0
 *         hb_subset_serialize_link_t* p = NULL             # <<<<<<<<<<<<<<
 *         HBObject obj_list = HBObject(num_nodes)
 *     for i in range(num_nodes):
*/
  __pyx_v_p = NULL;

  /* "src/uharfbuzz/_serialize.pxi":136
 *         unsigned int head = 0, tail = 0
 *         hb_subset_serialize_link_t* p = NULL
 *         HBObject obj_list = HBObject(num_nodes)             # <<<<<<<<<<<<<<
 *     for i in range(num_nodes):
 *         tail += len(subtables[i])
*/
  __pyx_t_9 = NULL;
  __pyx_t_5 = __Pyx_PyLong_From_unsigned_int(__pyx_v_num_nodes); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 136, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_4);
  }
  __pyx_v_obj_list = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "src/uharfbuzz/_serialize.pxi":137
 *         hb_subset_serialize_link_t* p = NULL
 *         HBObject obj_list = HBObject(num_nodes)
 *     for i in range(num_nodes):             # <<<<<<<<<<<<<<
 *         tail += len(subtables[i])
 *         obj_list.update_obj_length(i, table_data + head, table_data + tail)
*/
  __pyx_t_12 = __pyx_v_num_nodes;
  __pyx_t_13 = __pyx_t_12;
  for (__pyx_t_14 = 0; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
    __pyx_v_i = __pyx_t_14;

    /* "src/uharfbuzz/_serialize.pxi":138
 *         HBObject obj_list = HBObject(num_nodes)
 *     for i in range(num_nodes):
 *         tail += len(subtables[i])             # <<<<<<<<<<<<<<
 *         obj_list.update_obj_length(i, table_data + head, table_data + tail)
 *         head = tail
*/
    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_subtables, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 138, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 138, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_tail = (__pyx_v_tail + __pyx_t_2);

    /* "src/uharfbuzz/_serialize.pxi":139
 *     for i in range(num_nodes):
 *         tail += len(subtables[i])
 *         obj_list.update_obj_length(i, table_data + head, table_data + tail)             # <<<<<<<<<<<<<<
 *         head = tail
 * 
*/
    __pyx_t_4 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_obj_list->__pyx_vtab)->update_obj_length(__pyx_v_obj_list, __pyx_v_i, (__pyx_v_table_data + __pyx_v_head), (__pyx_v_table_data + __pyx_v_tail)); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "src/uharfbuzz/_serialize.pxi":140
 *         tail += len(subtables[i])
 *         obj_list.update_obj_length(i, table_data + head, table_data + tail)
 *         head = tail             # <<<<<<<<<<<<<<
 * 
 *         node = graphnodes[i]
*/
    __pyx_v_head = __pyx_v_tail;

    /* "src/uharfbuzz/_serialize.pxi":142
 *         head = tail
 * 
 *         node = graphnodes[i]             # <<<<<<<<<<<<<<
 *         # real_links
 *         p = obj_list.create_links(i, len(node[0]), True)
*/
    __pyx_t_4 = __Pyx_GetItemInt_List(__pyx_v_graphnodes, __pyx_v_i, unsigned int, 0, __Pyx_PyLong_From_unsigned_int, 1, 0, 1, 1, __Pyx_ReferenceSharing_FunctionArgument); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 142, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_XDECREF_SET(__pyx_v_node, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "src/uharfbuzz/_serialize.pxi":144
 *         node = graphnodes[i]
 *         # real_links
 *         p = obj_list.create_links(i, len(node[0]), True)             # <<<<<<<<<<<<<<
 *         if p != NULL:
 *             obj_list.update_links(i, True, node[0])
*/
    __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 144, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = PyObject_Length(__pyx_t_4); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 144, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_15 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_obj_list->__pyx_vtab)->create_links(__pyx_v_obj_list, __pyx_v_i, __pyx_t_2, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 144, __pyx_L1_error)
    __pyx_v_p = __pyx_t_15;

    /* "src/uharfbuzz/_serialize.pxi":145
 *         # real_links
 *         p = obj_list.create_links(i, len(node[0]), True)
 *         if p != NULL:             # <<<<<<<<<<<<<<
 *             obj_list.update_links(i, True, node[0])
 *         # virtual_links
*/
    __pyx_t_3 = (__pyx_v_p != NULL);
    if (__pyx_t_3) {

      /* "src/uharfbuzz/_serialize.pxi":146
 *         p = obj_list.create_links(i, len(node[0]), True)
 *         if p != NULL:
 *             obj_list.update_links(i, True, node[0])             # <<<<<<<<<<<<<<
 *         # virtual_links
 *         p = obj_list.create_links(i, len(node[1]), False)
*/
      __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_node, 0, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 146, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(PyList_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_4))) __PYX_ERR(11, 146, __pyx_L1_error)
      if (unlikely(__pyx_t_4 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
        __PYX_ERR(11, 146, __pyx_L1_error)
      }
      __pyx_t_5 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_obj_list->__pyx_vtab)->update_links(__pyx_v_obj_list, __pyx_v_i, 1, ((PyObject*)__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 146, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

      /* "src/uharfbuzz/_serialize.pxi":145
 *         # real_links
 *         p = obj_list.create_links(i, len(node[0]), True)
 *         if p != NULL:             # <<<<<<<<<<<<<<
 *             obj_list.update_links(i, True, node[0])
 *         # virtual_links
*/
    }

    /* "src/uharfbuzz/_serialize.pxi":148
 *             obj_list.update_links(i, True, node[0])
 *         # virtual_links
 *         p = obj_list.create_links(i, len(node[1]), False)             # <<<<<<<<<<<<<<
 *         if p != NULL:
 *             obj_list.update_links(i, False, node[1])
*/
    __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_node, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = PyObject_Length(__pyx_t_5); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(11, 148, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_15 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_obj_list->__pyx_vtab)->create_links(__pyx_v_obj_list, __pyx_v_i, __pyx_t_2, 0); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 148, __pyx_L1_error)
    __pyx_v_p = __pyx_t_15;

    /* "src/uharfbuzz/_serialize.pxi":149
 *         # virtual_links
 *         p = obj_list.create_links(i, len(node[1]), False)
 *         if p != NULL:             # <<<<<<<<<<<<<<
 *             obj_list.update_links(i, False, node[1])
 * 
*/
    __pyx_t_3 = (__pyx_v_p != NULL);
    if (__pyx_t_3) {

      /* "src/uharfbuzz/_serialize.pxi":150
 *         p = obj_list.create_links(i, len(node[1]), False)
 *         if p != NULL:
 *             obj_list.update_links(i, False, node[1])             # <<<<<<<<<<<<<<
 * 
 *     cdef bytes tag_packed = tag.encode()
*/
      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_node, 1, long, 1, __Pyx_PyLong_From_long, 0, 0, 1, 1, __Pyx_ReferenceSharing_OwnStrongReference); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(PyList_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_5))) __PYX_ERR(11, 150, __pyx_L1_error)
      if (unlikely(__pyx_t_5 == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
        __PYX_ERR(11, 150, __pyx_L1_error)
      }
      __pyx_t_4 = ((struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject *)__pyx_v_obj_list->__pyx_vtab)->update_links(__pyx_v_obj_list, __pyx_v_i, 0, ((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 150, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "src/uharfbuzz/_serialize.pxi":149
 *         # virtual_links
 *         p = obj_list.create_links(i, len(node[1]), False)
 *         if p != NULL:             # <<<<<<<<<<<<<<
 *             obj_list.update_links(i, False, node[1])
 * 
*/
    }
  }

  /* "src/uharfbuzz/_serialize.pxi":152
 *             obj_list.update_links(i, False, node[1])
 * 
 *     cdef bytes tag_packed = tag.encode()             # <<<<<<<<<<<<<<
 *     cdef char* cstr = tag_packed
 *     cdef hb_blob_t* packed_blob = hb_subset_serialize_or_fail(hb_tag_from_string(cstr, -1),
*/
  __pyx_t_4 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_tag_packed = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "src/uharfbuzz/_serialize.pxi":153
 * 
 *     cdef bytes tag_packed = tag.encode()
 *     cdef char* cstr = tag_packed             # <<<<<<<<<<<<<<
 *     cdef hb_blob_t* packed_blob = hb_subset_serialize_or_fail(hb_tag_from_string(cstr, -1),
 * 							   obj_list._hb_obj_list,
*/
  __pyx_t_11 = __Pyx_PyBytes_AsWritableString(__pyx_v_tag_packed); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(11, 153, __pyx_L1_error)
  __pyx_v_cstr = __pyx_t_11;

  /* "src/uharfbuzz/_serialize.pxi":154
 *     cdef bytes tag_packed = tag.encode()
 *     cdef char* cstr = tag_packed
 *     cdef hb_blob_t* packed_blob = hb_subset_serialize_or_fail(hb_tag_from_string(cstr, -1),             # <<<<<<<<<<<<<<
 * 							   obj_list._hb_obj_list,
 * 							   num_nodes)
*/
  __pyx_v_packed_blob = hb_subset_serialize_or_fail(hb_tag_from_string(__pyx_v_cstr, -1), __pyx_v_obj_list->_hb_obj_list, __pyx_v_num_nodes);

  /* "src/uharfbuzz/_serialize.pxi":157
 * 							   obj_list._hb_obj_list,
 * 							   num_nodes)
 *     if packed_blob == NULL:             # <<<<<<<<<<<<<<
 *         raise RepackerError()
 * 
*/
  __pyx_t_3 = (__pyx_v_packed_blob == NULL);
  if (unlikely(__pyx_t_3)) {

    /* "src/uharfbuzz/_serialize.pxi":158
 * 							   num_nodes)
 *     if packed_blob == NULL:
 *         raise RepackerError()             # <<<<<<<<<<<<<<
 * 
 *     cdef unsigned int blob_length
*/
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_RepackerError); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 158, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_9))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_9);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_9, __pyx__function);
      __pyx_t_10 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 158, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
    }
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(11, 158, __pyx_L1_error)

    /* "src/uharfbuzz/_serialize.pxi":157
 * 							   obj_list._hb_obj_list,
 * 							   num_nodes)
 *     if packed_blob == NULL:             # <<<<<<<<<<<<<<
 *         raise RepackerError()
 * 
*/
  }

  /* "src/uharfbuzz/_serialize.pxi":161
 * 
 *     cdef unsigned int blob_length
 *     cdef const_char* blob_data = hb_blob_get_data(packed_blob, &blob_length)             # <<<<<<<<<<<<<<
 *     cdef bytes packed = blob_data[:blob_length]
 * 
*/
  __pyx_v_blob_data = hb_blob_get_data(__pyx_v_packed_blob, (&__pyx_v_blob_length));

  /* "src/uharfbuzz/_serialize.pxi":162
 *     cdef unsigned int blob_length
 *     cdef const_char* blob_data = hb_blob_get_data(packed_blob, &blob_length)
 *     cdef bytes packed = blob_data[:blob_length]             # <<<<<<<<<<<<<<
 * 
 *     hb_blob_destroy(packed_blob)
*/
  __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_blob_data + 0, __pyx_v_blob_length - 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 162, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_packed = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "src/uharfbuzz/_serialize.pxi":164
 *     cdef bytes packed = blob_data[:blob_length]
 * 
 *     hb_blob_destroy(packed_blob)             # <<<<<<<<<<<<<<
 *     return packed
*/
  hb_blob_destroy(__pyx_v_packed_blob);

  /* "src/uharfbuzz/_serialize.pxi":165
 * 
 *     hb_blob_destroy(packed_blob)
 *     return packed             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_packed);
  __pyx_r = __pyx_v_packed;
  goto __pyx_L0;

  /* "src/uharfbuzz/_serialize.pxi":83
 * 
 * 
 * def serialize_with_tag(tag: str,             # <<<<<<<<<<<<<<
 *                        subtables: List[bytes],
 *                        graphnodes: List[Tuple[List[Tuple[int, int, int]],
*/

  /* 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_9);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.serialize_with_tag", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_table_bytes);
  __Pyx_XDECREF((PyObject *)__pyx_v_obj_list);
  __Pyx_XDECREF(__pyx_v_node);
  __Pyx_XDECREF(__pyx_v_tag_packed);
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":1
 * def subset_preprocess(face: Face) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_preprocess(face._hb_face)
 *     return Face.from_ptr(new_face)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_13subset_preprocess(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_13subset_preprocess = {"subset_preprocess", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_13subset_preprocess, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_13subset_preprocess(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subset_preprocess (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 1, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 1, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "subset_preprocess", 0) < (0)) __PYX_ERR(12, 1, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("subset_preprocess", 1, 1, 1, i); __PYX_ERR(12, 1, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 1, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("subset_preprocess", 1, 1, 1, __pyx_nargs); __PYX_ERR(12, 1, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.subset_preprocess", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 1, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_12subset_preprocess(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_12subset_preprocess(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  hb_face_t *__pyx_v_new_face;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("subset_preprocess", 0);

  /* "src/uharfbuzz/_subset.pxi":2
 * def subset_preprocess(face: Face) -> Face:
 *     new_face = hb_subset_preprocess(face._hb_face)             # <<<<<<<<<<<<<<
 *     return Face.from_ptr(new_face)
 * 
*/
  __pyx_v_new_face = hb_subset_preprocess(__pyx_v_face->_hb_face);

  /* "src/uharfbuzz/_subset.pxi":3
 * def subset_preprocess(face: Face) -> Face:
 *     new_face = hb_subset_preprocess(face._hb_face)
 *     return Face.from_ptr(new_face)             # <<<<<<<<<<<<<<
 * 
 * def subset(face: Face, input: SubsetInput) -> Face:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(__pyx_v_new_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":1
 * def subset_preprocess(face: Face) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_preprocess(face._hb_face)
 *     return Face.from_ptr(new_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.subset_preprocess", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":5
 *     return Face.from_ptr(new_face)
 * 
 * def subset(face: Face, input: SubsetInput) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_15subset(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_15subset = {"subset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_15subset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_15subset(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_input,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 5, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 5, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 5, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "subset", 0) < (0)) __PYX_ERR(12, 5, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("subset", 1, 2, 2, i); __PYX_ERR(12, 5, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 5, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 5, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_input = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("subset", 1, 2, 2, __pyx_nargs); __PYX_ERR(12, 5, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.subset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 5, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_input), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, 0, "input", 0))) __PYX_ERR(12, 5, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_14subset(__pyx_self, __pyx_v_face, __pyx_v_input);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_14subset(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input) {
  hb_face_t *__pyx_v_new_face;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("subset", 0);

  /* "src/uharfbuzz/_subset.pxi":6
 * 
 * def subset(face: Face, input: SubsetInput) -> Face:
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)             # <<<<<<<<<<<<<<
 *     if new_face == NULL:
 *         raise RuntimeError("Subsetting failed")
*/
  __pyx_v_new_face = hb_subset_or_fail(__pyx_v_face->_hb_face, __pyx_v_input->_hb_input);

  /* "src/uharfbuzz/_subset.pxi":7
 * def subset(face: Face, input: SubsetInput) -> Face:
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Subsetting failed")
 *     return Face.from_ptr(new_face)
*/
  __pyx_t_1 = (__pyx_v_new_face == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_subset.pxi":8
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:
 *         raise RuntimeError("Subsetting failed")             # <<<<<<<<<<<<<<
 *     return Face.from_ptr(new_face)
 * 
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Subsetting_failed};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 8, __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(12, 8, __pyx_L1_error)

    /* "src/uharfbuzz/_subset.pxi":7
 * def subset(face: Face, input: SubsetInput) -> Face:
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Subsetting failed")
 *     return Face.from_ptr(new_face)
*/
  }

  /* "src/uharfbuzz/_subset.pxi":9
 *     if new_face == NULL:
 *         raise RuntimeError("Subsetting failed")
 *     return Face.from_ptr(new_face)             # <<<<<<<<<<<<<<
 * 
 * class SubsetInputSets(IntEnum):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(__pyx_v_new_face)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":5
 *     return Face.from_ptr(new_face)
 * 
 * def subset(face: Face, input: SubsetInput) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.subset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":39
 *     cdef hb_subset_input_t* _hb_input
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_input = hb_subset_input_create_or_fail()
 *         if self._hb_input is NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, __pyx_nargs); return -1; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return -1;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__cinit__", __pyx_kwds); return -1;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_subset.pxi":40
 * 
 *     def __cinit__(self):
 *         self._hb_input = hb_subset_input_create_or_fail()             # <<<<<<<<<<<<<<
 *         if self._hb_input is NULL:
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_input = hb_subset_input_create_or_fail();

  /* "src/uharfbuzz/_subset.pxi":41
 *     def __cinit__(self):
 *         self._hb_input = hb_subset_input_create_or_fail()
 *         if self._hb_input is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_input == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_subset.pxi":42
 *         self._hb_input = hb_subset_input_create_or_fail()
 *         if self._hb_input is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    PyErr_NoMemory(); __PYX_ERR(12, 42, __pyx_L1_error)

    /* "src/uharfbuzz/_subset.pxi":41
 *     def __cinit__(self):
 *         self._hb_input = hb_subset_input_create_or_fail()
 *         if self._hb_input is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_subset.pxi":39
 *     cdef hb_subset_input_t* _hb_input
 * 
 *     def __cinit__(self):             # <<<<<<<<<<<<<<
 *         self._hb_input = hb_subset_input_create_or_fail()
 *         if self._hb_input is NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":44
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_input is not NULL:
 *             hb_subset_input_destroy(self._hb_input)
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  int __pyx_t_1;

  /* "src/uharfbuzz/_subset.pxi":45
 * 
 *     def __dealloc__(self):
 *         if self._hb_input is not NULL:             # <<<<<<<<<<<<<<
 *             hb_subset_input_destroy(self._hb_input)
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_input != NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_subset.pxi":46
 *     def __dealloc__(self):
 *         if self._hb_input is not NULL:
 *             hb_subset_input_destroy(self._hb_input)             # <<<<<<<<<<<<<<
 * 
 *     def subset(self, source: Face) -> Face:
*/
    hb_subset_input_destroy(__pyx_v_self->_hb_input);

    /* "src/uharfbuzz/_subset.pxi":45
 * 
 *     def __dealloc__(self):
 *         if self._hb_input is not NULL:             # <<<<<<<<<<<<<<
 *             hb_subset_input_destroy(self._hb_input)
 * 
*/
  }

  /* "src/uharfbuzz/_subset.pxi":44
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_input is not NULL:
 *             hb_subset_input_destroy(self._hb_input)
*/

  /* function exit code */
}

/* "src/uharfbuzz/_subset.pxi":48
 *             hb_subset_input_destroy(self._hb_input)
 * 
 *     def subset(self, source: Face) -> Face:             # <<<<<<<<<<<<<<
 *         return subset(source, self)
 * 
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset = {"subset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_source = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("subset (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_source,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 48, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 48, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "subset", 0) < (0)) __PYX_ERR(12, 48, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("subset", 1, 1, 1, i); __PYX_ERR(12, 48, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 48, __pyx_L3_error)
    }
    __pyx_v_source = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("subset", 1, 1, 1, __pyx_nargs); __PYX_ERR(12, 48, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.subset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_source), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "source", 0))) __PYX_ERR(12, 48, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_4subset(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_source);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_4subset(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_source) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("subset", 0);

  /* "src/uharfbuzz/_subset.pxi":49
 * 
 *     def subset(self, source: Face) -> Face:
 *         return subset(source, self)             # <<<<<<<<<<<<<<
 * 
 *     def keep_everything(self):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_subset); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_4 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, ((PyObject *)__pyx_v_source), ((PyObject *)__pyx_v_self)};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 49, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face))))) __PYX_ERR(12, 49, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":48
 *             hb_subset_input_destroy(self._hb_input)
 * 
 *     def subset(self, source: Face) -> Face:             # <<<<<<<<<<<<<<
 *         return subset(source, self)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.subset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":51
 *         return subset(source, self)
 * 
 *     def keep_everything(self):             # <<<<<<<<<<<<<<
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything = {"keep_everything", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keep_everything (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("keep_everything", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("keep_everything", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_6keep_everything(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_6keep_everything(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keep_everything", 0);

  /* "src/uharfbuzz/_subset.pxi":52
 * 
 *     def keep_everything(self):
 *         hb_subset_input_keep_everything(self._hb_input)             # <<<<<<<<<<<<<<
 * 
 *     def pin_all_axes_to_default(self, face: Face) -> bool:
*/
  hb_subset_input_keep_everything(__pyx_v_self->_hb_input);

  /* "src/uharfbuzz/_subset.pxi":51
 *         return subset(source, self)
 * 
 *     def keep_everything(self):             # <<<<<<<<<<<<<<
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":54
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
 *     def pin_all_axes_to_default(self, face: Face) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default = {"pin_all_axes_to_default", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pin_all_axes_to_default (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 54, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 54, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "pin_all_axes_to_default", 0) < (0)) __PYX_ERR(12, 54, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("pin_all_axes_to_default", 1, 1, 1, i); __PYX_ERR(12, 54, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 54, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pin_all_axes_to_default", 1, 1, 1, __pyx_nargs); __PYX_ERR(12, 54, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_all_axes_to_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 54, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_8pin_all_axes_to_default(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_8pin_all_axes_to_default(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("pin_all_axes_to_default", 0);

  /* "src/uharfbuzz/_subset.pxi":55
 * 
 *     def pin_all_axes_to_default(self, face: Face) -> bool:
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)             # <<<<<<<<<<<<<<
 * 
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_subset_input_pin_all_axes_to_default(__pyx_v_self->_hb_input, __pyx_v_face->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":54
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
 *     def pin_all_axes_to_default(self, face: Face) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_all_axes_to_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":57
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_to_default(
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default = {"pin_axis_to_default", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pin_axis_to_default (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 57, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 57, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 57, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "pin_axis_to_default", 0) < (0)) __PYX_ERR(12, 57, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("pin_axis_to_default", 1, 2, 2, i); __PYX_ERR(12, 57, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 57, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 57, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pin_axis_to_default", 1, 2, 2, __pyx_nargs); __PYX_ERR(12, 57, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_axis_to_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 57, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(12, 57, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_10pin_axis_to_default(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_face, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_10pin_axis_to_default(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag) {
  hb_tag_t __pyx_v_hb_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char const *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("pin_axis_to_default", 0);

  /* "src/uharfbuzz/_subset.pxi":58
 * 
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)             # <<<<<<<<<<<<<<
 *         return hb_subset_input_pin_axis_to_default(
 *             self._hb_input, face._hb_face, hb_tag
*/
  __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(12, 58, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(__pyx_t_2, -1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":59
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_to_default(             # <<<<<<<<<<<<<<
 *             self._hb_input, face._hb_face, hb_tag
 *         )
*/
  __Pyx_XDECREF(__pyx_r);

  /* "src/uharfbuzz/_subset.pxi":60
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_to_default(
 *             self._hb_input, face._hb_face, hb_tag             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_subset_input_pin_axis_to_default(__pyx_v_self->_hb_input, __pyx_v_face->_hb_face, __pyx_v_hb_tag)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":57
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_to_default(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_axis_to_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":63
 *         )
 * 
 *     def pin_axis_location(self, face: Face, tag: str, value: float) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_location(
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location = {"pin_axis_location", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  double __pyx_v_value;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pin_axis_location (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 63, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(12, 63, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 63, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 63, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "pin_axis_location", 0) < (0)) __PYX_ERR(12, 63, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("pin_axis_location", 1, 3, 3, i); __PYX_ERR(12, 63, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 63, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 63, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(12, 63, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
    __pyx_v_value = __Pyx_PyFloat_AsDouble(values[2]); if (unlikely((__pyx_v_value == (double)-1) && PyErr_Occurred())) __PYX_ERR(12, 63, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pin_axis_location", 1, 3, 3, __pyx_nargs); __PYX_ERR(12, 63, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_axis_location", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 63, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(12, 63, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_12pin_axis_location(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_face, __pyx_v_tag, __pyx_v_value);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_12pin_axis_location(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, double __pyx_v_value) {
  hb_tag_t __pyx_v_hb_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char const *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("pin_axis_location", 0);

  /* "src/uharfbuzz/_subset.pxi":64
 * 
 *     def pin_axis_location(self, face: Face, tag: str, value: float) -> bool:
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)             # <<<<<<<<<<<<<<
 *         return hb_subset_input_pin_axis_location(
 *             self._hb_input, face._hb_face, hb_tag, value
*/
  __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(12, 64, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(__pyx_t_2, -1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":65
 *     def pin_axis_location(self, face: Face, tag: str, value: float) -> bool:
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_location(             # <<<<<<<<<<<<<<
 *             self._hb_input, face._hb_face, hb_tag, value
 *         )
*/
  __Pyx_XDECREF(__pyx_r);

  /* "src/uharfbuzz/_subset.pxi":66
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_location(
 *             self._hb_input, face._hb_face, hb_tag, value             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_subset_input_pin_axis_location(__pyx_v_self->_hb_input, __pyx_v_face->_hb_face, __pyx_v_hb_tag, __pyx_v_value)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":63
 *         )
 * 
 *     def pin_axis_location(self, face: Face, tag: str, value: float) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_location(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.pin_axis_location", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":69
 *         )
 * 
 *     def set_axis_range(self,             # <<<<<<<<<<<<<<
 *                        face: Face,
 *                        tag: str,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range = {"set_axis_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_min_value = 0;
  PyObject *__pyx_v_max_value = 0;
  PyObject *__pyx_v_def_value = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_axis_range (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_min_value,&__pyx_mstate_global->__pyx_n_u_max_value,&__pyx_mstate_global->__pyx_n_u_def_value,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 69, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "set_axis_range", 0) < (0)) __PYX_ERR(12, 69, __pyx_L3_error)

      /* "src/uharfbuzz/_subset.pxi":72
 *                        face: Face,
 *                        tag: str,
 *                        min_value: float | None = None,             # <<<<<<<<<<<<<<
 *                        max_value: float | None = None,
 *                        def_value: float | None = None) -> bool:
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "src/uharfbuzz/_subset.pxi":73
 *                        tag: str,
 *                        min_value: float | None = None,
 *                        max_value: float | None = None,             # <<<<<<<<<<<<<<
 *                        def_value: float | None = None) -> bool:
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "src/uharfbuzz/_subset.pxi":74
 *                        min_value: float | None = None,
 *                        max_value: float | None = None,
 *                        def_value: float | None = None) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         min_value = NAN if min_value is None else min_value
*/
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("set_axis_range", 0, 2, 5, i); __PYX_ERR(12, 69, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(12, 69, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 69, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 69, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "src/uharfbuzz/_subset.pxi":72
 *                        face: Face,
 *                        tag: str,
 *                        min_value: float | None = None,             # <<<<<<<<<<<<<<
 *                        max_value: float | None = None,
 *                        def_value: float | None = None) -> bool:
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "src/uharfbuzz/_subset.pxi":73
 *                        tag: str,
 *                        min_value: float | None = None,
 *                        max_value: float | None = None,             # <<<<<<<<<<<<<<
 *                        def_value: float | None = None) -> bool:
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "src/uharfbuzz/_subset.pxi":74
 *                        min_value: float | None = None,
 *                        max_value: float | None = None,
 *                        def_value: float | None = None) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         min_value = NAN if min_value is None else min_value
*/
      if (!values[4]) values[4] = __Pyx_NewRef(((PyObject*)Py_None));
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
    if (__Pyx_PyFloat_FromNumber(&values[2], "min_value", 1) < (0)) __PYX_ERR(12, 72, __pyx_L3_error)
    __pyx_v_min_value = ((PyObject*)values[2]);
    if (__Pyx_PyFloat_FromNumber(&values[3], "max_value", 1) < (0)) __PYX_ERR(12, 73, __pyx_L3_error)
    __pyx_v_max_value = ((PyObject*)values[3]);
    if (__Pyx_PyFloat_FromNumber(&values[4], "def_value", 1) < (0)) __PYX_ERR(12, 74, __pyx_L3_error)
    __pyx_v_def_value = ((PyObject*)values[4]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_axis_range", 0, 2, 5, __pyx_nargs); __PYX_ERR(12, 69, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.set_axis_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 70, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(12, 71, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_min_value), (&PyFloat_Type), 1, "min_value", 2))) __PYX_ERR(12, 72, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_max_value), (&PyFloat_Type), 1, "max_value", 2))) __PYX_ERR(12, 73, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_def_value), (&PyFloat_Type), 1, "def_value", 2))) __PYX_ERR(12, 74, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_14set_axis_range(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_face, __pyx_v_tag, __pyx_v_min_value, __pyx_v_max_value, __pyx_v_def_value);

  /* "src/uharfbuzz/_subset.pxi":69
 *         )
 * 
 *     def set_axis_range(self,             # <<<<<<<<<<<<<<
 *                        face: Face,
 *                        tag: str,
*/

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_14set_axis_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_min_value, PyObject *__pyx_v_max_value, PyObject *__pyx_v_def_value) {
  hb_tag_t __pyx_v_hb_tag;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char const *__pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  float __pyx_t_5;
  float __pyx_t_6;
  float __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_axis_range", 0);
  __Pyx_INCREF(__pyx_v_min_value);
  __Pyx_INCREF(__pyx_v_max_value);
  __Pyx_INCREF(__pyx_v_def_value);

  /* "src/uharfbuzz/_subset.pxi":75
 *                        max_value: float | None = None,
 *                        def_value: float | None = None) -> bool:
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)             # <<<<<<<<<<<<<<
 *         min_value = NAN if min_value is None else min_value
 *         max_value = NAN if max_value is None else max_value
*/
  __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(12, 75, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(__pyx_t_2, -1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":76
 *                        def_value: float | None = None) -> bool:
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         min_value = NAN if min_value is None else min_value             # <<<<<<<<<<<<<<
 *         max_value = NAN if max_value is None else max_value
 *         def_value = NAN if def_value is None else def_value
*/
  __pyx_t_3 = (__pyx_v_min_value == ((PyObject*)Py_None));
  if (__pyx_t_3) {
    __pyx_t_4 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 76, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_PyFloat_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(12, 76, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_min_value);
    __pyx_t_1 = __pyx_v_min_value;
  }
  __Pyx_DECREF_SET(__pyx_v_min_value, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":77
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         min_value = NAN if min_value is None else min_value
 *         max_value = NAN if max_value is None else max_value             # <<<<<<<<<<<<<<
 *         def_value = NAN if def_value is None else def_value
 *         return hb_subset_input_set_axis_range(
*/
  __pyx_t_3 = (__pyx_v_max_value == ((PyObject*)Py_None));
  if (__pyx_t_3) {
    __pyx_t_4 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 77, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_PyFloat_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(12, 77, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_max_value);
    __pyx_t_1 = __pyx_v_max_value;
  }
  __Pyx_DECREF_SET(__pyx_v_max_value, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":78
 *         min_value = NAN if min_value is None else min_value
 *         max_value = NAN if max_value is None else max_value
 *         def_value = NAN if def_value is None else def_value             # <<<<<<<<<<<<<<
 *         return hb_subset_input_set_axis_range(
 *             self._hb_input, face._hb_face, hb_tag, min_value, max_value, def_value
*/
  __pyx_t_3 = (__pyx_v_def_value == ((PyObject*)Py_None));
  if (__pyx_t_3) {
    __pyx_t_4 = PyFloat_FromDouble(NAN); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 78, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_PyFloat_FromNumber(&__pyx_t_4, NULL, 0) < (0)) __PYX_ERR(12, 78, __pyx_L1_error)
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  } else {
    __Pyx_INCREF(__pyx_v_def_value);
    __pyx_t_1 = __pyx_v_def_value;
  }
  __Pyx_DECREF_SET(__pyx_v_def_value, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":79
 *         max_value = NAN if max_value is None else max_value
 *         def_value = NAN if def_value is None else def_value
 *         return hb_subset_input_set_axis_range(             # <<<<<<<<<<<<<<
 *             self._hb_input, face._hb_face, hb_tag, min_value, max_value, def_value
 *         )
*/
  __Pyx_XDECREF(__pyx_r);

  /* "src/uharfbuzz/_subset.pxi":80
 *         def_value = NAN if def_value is None else def_value
 *         return hb_subset_input_set_axis_range(
 *             self._hb_input, face._hb_face, hb_tag, min_value, max_value, def_value             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_5 = __Pyx_PyFloat_AsFloat(__pyx_v_min_value); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(12, 80, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyFloat_AsFloat(__pyx_v_max_value); if (unlikely((__pyx_t_6 == (float)-1) && PyErr_Occurred())) __PYX_ERR(12, 80, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyFloat_AsFloat(__pyx_v_def_value); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(12, 80, __pyx_L1_error)

  /* "src/uharfbuzz/_subset.pxi":79
 *         max_value = NAN if max_value is None else max_value
 *         def_value = NAN if def_value is None else def_value
 *         return hb_subset_input_set_axis_range(             # <<<<<<<<<<<<<<
 *             self._hb_input, face._hb_face, hb_tag, min_value, max_value, def_value
 *         )
*/
  __pyx_t_1 = __Pyx_PyLong_From_hb_bool_t(hb_subset_input_set_axis_range(__pyx_v_self->_hb_input, __pyx_v_face->_hb_face, __pyx_v_hb_tag, __pyx_t_5, __pyx_t_6, __pyx_t_7)); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":69
 *         )
 * 
 *     def set_axis_range(self,             # <<<<<<<<<<<<<<
 *                        face: Face,
 *                        tag: str,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.set_axis_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_min_value);
  __Pyx_XDECREF(__pyx_v_max_value);
  __Pyx_XDECREF(__pyx_v_def_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":83
 *         )
 * 
 *     def get_axis_range(self, tag: str) -> Tuple[float | None, float | None | float | None] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         cdef float axis_min_value, axis_max_value, axis_def_value
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range = {"get_axis_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_axis_range (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 83, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 83, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "get_axis_range", 0) < (0)) __PYX_ERR(12, 83, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_axis_range", 1, 1, 1, i); __PYX_ERR(12, 83, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 83, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_axis_range", 1, 1, 1, __pyx_nargs); __PYX_ERR(12, 83, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.get_axis_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(12, 83, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16get_axis_range(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16get_axis_range(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_tag) {
  hb_tag_t __pyx_v_hb_tag;
  float __pyx_v_axis_min_value;
  float __pyx_v_axis_max_value;
  float __pyx_v_axis_def_value;
  PyObject *__pyx_v_min_value = NULL;
  PyObject *__pyx_v_max_value = NULL;
  PyObject *__pyx_v_def_value = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char const *__pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_axis_range", 0);

  /* "src/uharfbuzz/_subset.pxi":84
 * 
 *     def get_axis_range(self, tag: str) -> Tuple[float | None, float | None | float | None] | None:
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)             # <<<<<<<<<<<<<<
 *         cdef float axis_min_value, axis_max_value, axis_def_value
 *         if hb_subset_input_get_axis_range(self._hb_input, hb_tag,
*/
  __pyx_t_1 = PyUnicode_AsASCIIString(__pyx_v_tag); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBytes_AsString(__pyx_t_1); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(12, 84, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(__pyx_t_2, -1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "src/uharfbuzz/_subset.pxi":86
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         cdef float axis_min_value, axis_max_value, axis_def_value
 *         if hb_subset_input_get_axis_range(self._hb_input, hb_tag,             # <<<<<<<<<<<<<<
 *             &axis_min_value, &axis_max_value, &axis_def_value):
 *             min_value = None if isnan(axis_min_value) else axis_min_value
*/
  __pyx_t_3 = (hb_subset_input_get_axis_range(__pyx_v_self->_hb_input, __pyx_v_hb_tag, (&__pyx_v_axis_min_value), (&__pyx_v_axis_max_value), (&__pyx_v_axis_def_value)) != 0);
  if (__pyx_t_3) {

    /* "src/uharfbuzz/_subset.pxi":88
 *         if hb_subset_input_get_axis_range(self._hb_input, hb_tag,
 *             &axis_min_value, &axis_max_value, &axis_def_value):
 *             min_value = None if isnan(axis_min_value) else axis_min_value             # <<<<<<<<<<<<<<
 *             max_value = None if isnan(axis_max_value) else axis_max_value
 *             def_value = None if isnan(axis_def_value) else axis_def_value
*/
    __pyx_t_3 = isnan(__pyx_v_axis_min_value);
    if (__pyx_t_3) {
      __Pyx_INCREF(Py_None);
      __pyx_t_1 = Py_None;
    } else {
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_axis_min_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 88, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_v_min_value = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/uharfbuzz/_subset.pxi":89
 *             &axis_min_value, &axis_max_value, &axis_def_value):
 *             min_value = None if isnan(axis_min_value) else axis_min_value
 *             max_value = None if isnan(axis_max_value) else axis_max_value             # <<<<<<<<<<<<<<
 *             def_value = None if isnan(axis_def_value) else axis_def_value
 *             return min_value, max_value, def_value
*/
    __pyx_t_3 = isnan(__pyx_v_axis_max_value);
    if (__pyx_t_3) {
      __Pyx_INCREF(Py_None);
      __pyx_t_1 = Py_None;
    } else {
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_axis_max_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 89, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_v_max_value = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/uharfbuzz/_subset.pxi":90
 *             min_value = None if isnan(axis_min_value) else axis_min_value
 *             max_value = None if isnan(axis_max_value) else axis_max_value
 *             def_value = None if isnan(axis_def_value) else axis_def_value             # <<<<<<<<<<<<<<
 *             return min_value, max_value, def_value
 *         return None
*/
    __pyx_t_3 = isnan(__pyx_v_axis_def_value);
    if (__pyx_t_3) {
      __Pyx_INCREF(Py_None);
      __pyx_t_1 = Py_None;
    } else {
      __pyx_t_4 = PyFloat_FromDouble(__pyx_v_axis_def_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 90, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_1 = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_v_def_value = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "src/uharfbuzz/_subset.pxi":91
 *             max_value = None if isnan(axis_max_value) else axis_max_value
 *             def_value = None if isnan(axis_def_value) else axis_def_value
 *             return min_value, max_value, def_value             # <<<<<<<<<<<<<<
 *         return None
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 91, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_min_value);
    __Pyx_GIVEREF(__pyx_v_min_value);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_min_value) != (0)) __PYX_ERR(12, 91, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_max_value);
    __Pyx_GIVEREF(__pyx_v_max_value);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_max_value) != (0)) __PYX_ERR(12, 91, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_def_value);
    __Pyx_GIVEREF(__pyx_v_def_value);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_def_value) != (0)) __PYX_ERR(12, 91, __pyx_L1_error);
    __pyx_r = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "src/uharfbuzz/_subset.pxi":86
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         cdef float axis_min_value, axis_max_value, axis_def_value
 *         if hb_subset_input_get_axis_range(self._hb_input, hb_tag,             # <<<<<<<<<<<<<<
 *             &axis_min_value, &axis_max_value, &axis_def_value):
 *             min_value = None if isnan(axis_min_value) else axis_min_value
*/
  }

  /* "src/uharfbuzz/_subset.pxi":92
 *             def_value = None if isnan(axis_def_value) else axis_def_value
 *             return min_value, max_value, def_value
 *         return None             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":83
 *         )
 * 
 *     def get_axis_range(self, tag: str) -> Tuple[float | None, float | None | float | None] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         cdef float axis_min_value, axis_max_value, axis_def_value
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.get_axis_range", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_min_value);
  __Pyx_XDECREF(__pyx_v_max_value);
  __Pyx_XDECREF(__pyx_v_def_value);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":94
 *         return None
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicode_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_unicode_set(self._hb_input)))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":96
 *     @property
 *     def unicode_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_unicode_set(self._hb_input)))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr(hb_set_reference(hb_subset_input_unicode_set(__pyx_v_self->_hb_input)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":94
 *         return None
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicode_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_unicode_set(self._hb_input)))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.unicode_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":98
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_unicode_set(self._hb_input)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":100
 *     @property
 *     def glyph_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))             # <<<<<<<<<<<<<<
 * 
 *     def sets(self, set_type : SubsetInputSets) -> Set:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr(hb_set_reference(hb_subset_input_glyph_set(__pyx_v_self->_hb_input)))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":98
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_unicode_set(self._hb_input)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def glyph_set(self) -> Set[int]:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.glyph_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":102
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))
 * 
 *     def sets(self, set_type : SubsetInputSets) -> Set:             # <<<<<<<<<<<<<<
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))
 * 
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets = {"sets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_set_type = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("sets (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_set_type,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 102, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 102, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "sets", 0) < (0)) __PYX_ERR(12, 102, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("sets", 1, 1, 1, i); __PYX_ERR(12, 102, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 102, __pyx_L3_error)
    }
    __pyx_v_set_type = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("sets", 1, 1, 1, __pyx_nargs); __PYX_ERR(12, 102, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.sets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18sets(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v_set_type);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18sets(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_set_type) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  hb_subset_sets_t __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sets", 0);

  /* "src/uharfbuzz/_subset.pxi":103
 * 
 *     def sets(self, set_type : SubsetInputSets) -> Set:
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((hb_subset_sets_t)__Pyx_PyLong_As_hb_subset_sets_t(__pyx_v_set_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(12, 103, __pyx_L1_error)
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr(hb_set_reference(hb_subset_input_set(__pyx_v_self->_hb_input, __pyx_t_1)))); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":102
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))
 * 
 *     def sets(self, set_type : SubsetInputSets) -> Set:             # <<<<<<<<<<<<<<
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.sets", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":105
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def no_subset_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.NO_SUBSET_TABLE_TAG)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":107
 *     @property
 *     def no_subset_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.NO_SUBSET_TABLE_TAG)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NO_SUBSET_TABLE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 107, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":105
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def no_subset_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.NO_SUBSET_TABLE_TAG)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.no_subset_table_tag_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":109
 *         return self.sets(SubsetInputSets.NO_SUBSET_TABLE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def drop_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.DROP_TABLE_TAG)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":111
 *     @property
 *     def drop_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.DROP_TABLE_TAG)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_DROP_TABLE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 111, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":109
 *         return self.sets(SubsetInputSets.NO_SUBSET_TABLE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def drop_table_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.DROP_TABLE_TAG)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.drop_table_tag_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":113
 *         return self.sets(SubsetInputSets.DROP_TABLE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_ID)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":115
 *     @property
 *     def name_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_ID)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NAME_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 115, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":113
 *         return self.sets(SubsetInputSets.DROP_TABLE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_ID)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.name_id_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":117
 *         return self.sets(SubsetInputSets.NAME_ID)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name_lang_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_LANG_ID)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":119
 *     @property
 *     def name_lang_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_LANG_ID)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_NAME_LANG_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":117
 *         return self.sets(SubsetInputSets.NAME_ID)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def name_lang_id_set(self) -> Set[int]:
 *         return self.sets(SubsetInputSets.NAME_LANG_ID)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.name_lang_id_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":121
 *         return self.sets(SubsetInputSets.NAME_LANG_ID)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def layout_feature_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_FEATURE_TAG)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":123
 *     @property
 *     def layout_feature_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_FEATURE_TAG)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_LAYOUT_FEATURE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":121
 *         return self.sets(SubsetInputSets.NAME_LANG_ID)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def layout_feature_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_FEATURE_TAG)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.layout_feature_tag_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":125
 *         return self.sets(SubsetInputSets.LAYOUT_FEATURE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def layout_script_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_SCRIPT_TAG)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":127
 *     @property
 *     def layout_script_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_SCRIPT_TAG)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_self);
  __Pyx_INCREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetInputSets); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_LAYOUT_SCRIPT_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_sets, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 127, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":125
 *         return self.sets(SubsetInputSets.LAYOUT_FEATURE_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def layout_script_tag_set(self) -> Set:
 *         return self.sets(SubsetInputSets.LAYOUT_SCRIPT_TAG)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.layout_script_tag_set.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":129
 *         return self.sets(SubsetInputSets.LAYOUT_SCRIPT_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> SubsetFlags:
 *         cdef unsigned subset_flags = hb_subset_input_get_flags(self._hb_input)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  unsigned int __pyx_v_subset_flags;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  size_t __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":131
 *     @property
 *     def flags(self) -> SubsetFlags:
 *         cdef unsigned subset_flags = hb_subset_input_get_flags(self._hb_input)             # <<<<<<<<<<<<<<
 *         return SubsetFlags(subset_flags)
 * 
*/
  __pyx_v_subset_flags = hb_subset_input_get_flags(__pyx_v_self->_hb_input);

  /* "src/uharfbuzz/_subset.pxi":132
 *     def flags(self) -> SubsetFlags:
 *         cdef unsigned subset_flags = hb_subset_input_get_flags(self._hb_input)
 *         return SubsetFlags(subset_flags)             # <<<<<<<<<<<<<<
 * 
 *     @flags.setter
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_SubsetFlags); if (unlikely(!__pyx_t_3)) __PYX_ERR(12, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_unsigned_int(__pyx_v_subset_flags); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_5 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_5, (2-__pyx_t_5) | (__pyx_t_5*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__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;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 132, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":129
 *         return self.sets(SubsetInputSets.LAYOUT_SCRIPT_TAG)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def flags(self) -> SubsetFlags:
 *         cdef unsigned subset_flags = hb_subset_input_get_flags(self._hb_input)
*/

  /* 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("uharfbuzz._harfbuzz.SubsetInput.flags.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":134
 *         return SubsetFlags(subset_flags)
 * 
 *     @flags.setter             # <<<<<<<<<<<<<<
 *     def flags(self, flags: SubsetFlags):
 *         hb_subset_input_set_flags(self._hb_input, int(flags))
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_flags); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_flags) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_2__set__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), ((PyObject *)__pyx_v_flags));

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

static int __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_2__set__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, PyObject *__pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  unsigned int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);

  /* "src/uharfbuzz/_subset.pxi":136
 *     @flags.setter
 *     def flags(self, flags: SubsetFlags):
 *         hb_subset_input_set_flags(self._hb_input, int(flags))             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyLong_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(12, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  hb_subset_input_set_flags(__pyx_v_self->_hb_input, __pyx_t_2);

  /* "src/uharfbuzz/_subset.pxi":134
 *         return SubsetFlags(subset_flags)
 * 
 *     @flags.setter             # <<<<<<<<<<<<<<
 *     def flags(self, flags: SubsetFlags):
 *         hb_subset_input_set_flags(self._hb_input, int(flags))
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.flags.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_20__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_20__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_11SubsetInput_22__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetInput.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":142
 *     cdef hb_subset_plan_t* _hb_plan
 * 
 *     def __cinit__(self, face: Face, input: SubsetInput):             # <<<<<<<<<<<<<<
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)
 *         if self._hb_plan is NULL:
*/

/* Python wrapper */
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input = 0;
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return -1;
  #endif
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_input,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(12, 142, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 142, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 142, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__cinit__", 0) < (0)) __PYX_ERR(12, 142, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, i); __PYX_ERR(12, 142, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_VARARGS(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(12, 142, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(12, 142, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_input = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, __pyx_nargs); __PYX_ERR(12, 142, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(12, 142, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_input), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, 0, "input", 0))) __PYX_ERR(12, 142, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan___cinit__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self), __pyx_v_face, __pyx_v_input);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan___cinit__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput *__pyx_v_input) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "src/uharfbuzz/_subset.pxi":143
 * 
 *     def __cinit__(self, face: Face, input: SubsetInput):
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)             # <<<<<<<<<<<<<<
 *         if self._hb_plan is NULL:
 *             raise MemoryError()
*/
  __pyx_v_self->_hb_plan = hb_subset_plan_create_or_fail(__pyx_v_face->_hb_face, __pyx_v_input->_hb_input);

  /* "src/uharfbuzz/_subset.pxi":144
 *     def __cinit__(self, face: Face, input: SubsetInput):
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)
 *         if self._hb_plan is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_plan == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_subset.pxi":145
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)
 *         if self._hb_plan is NULL:
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 * 
 *     def __dealloc__(self):
*/
    PyErr_NoMemory(); __PYX_ERR(12, 145, __pyx_L1_error)

    /* "src/uharfbuzz/_subset.pxi":144
 *     def __cinit__(self, face: Face, input: SubsetInput):
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)
 *         if self._hb_plan is NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 * 
*/
  }

  /* "src/uharfbuzz/_subset.pxi":142
 *     cdef hb_subset_plan_t* _hb_plan
 * 
 *     def __cinit__(self, face: Face, input: SubsetInput):             # <<<<<<<<<<<<<<
 *         self._hb_plan = hb_subset_plan_create_or_fail(face._hb_face, input._hb_input)
 *         if self._hb_plan is NULL:
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":147
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_plan is not NULL:
 *             hb_subset_plan_destroy(self._hb_plan)
*/

/* Python wrapper */
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_3__dealloc__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_2__dealloc__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static void __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_2__dealloc__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  int __pyx_t_1;

  /* "src/uharfbuzz/_subset.pxi":148
 * 
 *     def __dealloc__(self):
 *         if self._hb_plan is not NULL:             # <<<<<<<<<<<<<<
 *             hb_subset_plan_destroy(self._hb_plan)
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_hb_plan != NULL);
  if (__pyx_t_1) {

    /* "src/uharfbuzz/_subset.pxi":149
 *     def __dealloc__(self):
 *         if self._hb_plan is not NULL:
 *             hb_subset_plan_destroy(self._hb_plan)             # <<<<<<<<<<<<<<
 * 
 *     def execute(self) -> Face:
*/
    hb_subset_plan_destroy(__pyx_v_self->_hb_plan);

    /* "src/uharfbuzz/_subset.pxi":148
 * 
 *     def __dealloc__(self):
 *         if self._hb_plan is not NULL:             # <<<<<<<<<<<<<<
 *             hb_subset_plan_destroy(self._hb_plan)
 * 
*/
  }

  /* "src/uharfbuzz/_subset.pxi":147
 *             raise MemoryError()
 * 
 *     def __dealloc__(self):             # <<<<<<<<<<<<<<
 *         if self._hb_plan is not NULL:
 *             hb_subset_plan_destroy(self._hb_plan)
*/

  /* function exit code */
}

/* "src/uharfbuzz/_subset.pxi":151
 *             hb_subset_plan_destroy(self._hb_plan)
 * 
 *     def execute(self) -> Face:             # <<<<<<<<<<<<<<
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute = {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("execute (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("execute", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("execute", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_4execute(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_4execute(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  hb_face_t *__pyx_v_new_face;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("execute", 0);

  /* "src/uharfbuzz/_subset.pxi":152
 * 
 *     def execute(self) -> Face:
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)             # <<<<<<<<<<<<<<
 *         if new_face == NULL:
 *             raise RuntimeError("Subsetting failed")
*/
  __pyx_v_new_face = hb_subset_plan_execute_or_fail(__pyx_v_self->_hb_plan);

  /* "src/uharfbuzz/_subset.pxi":153
 *     def execute(self) -> Face:
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:             # <<<<<<<<<<<<<<
 *             raise RuntimeError("Subsetting failed")
 *         return Face.from_ptr(new_face)
*/
  __pyx_t_1 = (__pyx_v_new_face == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "src/uharfbuzz/_subset.pxi":154
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:
 *             raise RuntimeError("Subsetting failed")             # <<<<<<<<<<<<<<
 *         return Face.from_ptr(new_face)
 * 
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Subsetting_failed};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 154, __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(12, 154, __pyx_L1_error)

    /* "src/uharfbuzz/_subset.pxi":153
 *     def execute(self) -> Face:
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:             # <<<<<<<<<<<<<<
 *             raise RuntimeError("Subsetting failed")
 *         return Face.from_ptr(new_face)
*/
  }

  /* "src/uharfbuzz/_subset.pxi":155
 *         if new_face == NULL:
 *             raise RuntimeError("Subsetting failed")
 *         return Face.from_ptr(new_face)             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr(__pyx_v_new_face)); if (unlikely(!__pyx_t_2)) __PYX_ERR(12, 155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":151
 *             hb_subset_plan_destroy(self._hb_plan)
 * 
 *     def execute(self) -> Face:             # <<<<<<<<<<<<<<
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.execute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":157
 *         return Face.from_ptr(new_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def old_to_new_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_old_to_new_glyph_mapping(self._hb_plan)))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":159
 *     @property
 *     def old_to_new_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_old_to_new_glyph_mapping(self._hb_plan)))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr(hb_map_reference(((hb_map_t *)hb_subset_plan_old_to_new_glyph_mapping(__pyx_v_self->_hb_plan))))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":157
 *         return Face.from_ptr(new_face)
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def old_to_new_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_old_to_new_glyph_mapping(self._hb_plan)))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.old_to_new_glyph_mapping.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":161
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_old_to_new_glyph_mapping(self._hb_plan)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def new_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_new_to_old_glyph_mapping(self._hb_plan)))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":163
 *     @property
 *     def new_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_new_to_old_glyph_mapping(self._hb_plan)))             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr(hb_map_reference(((hb_map_t *)hb_subset_plan_new_to_old_glyph_mapping(__pyx_v_self->_hb_plan))))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":161
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_old_to_new_glyph_mapping(self._hb_plan)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def new_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_new_to_old_glyph_mapping(self._hb_plan)))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.new_to_old_glyph_mapping.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "src/uharfbuzz/_subset.pxi":165
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_new_to_old_glyph_mapping(self._hb_plan)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicode_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_unicode_to_old_glyph_mapping(self._hb_plan)))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping_1__get__(PyObject *__pyx_v_self) {
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping___get__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping___get__(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);

  /* "src/uharfbuzz/_subset.pxi":167
 *     @property
 *     def unicode_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_unicode_to_old_glyph_mapping(self._hb_plan)))             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = ((PyObject *)__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr(hb_map_reference(((hb_map_t *)hb_subset_plan_unicode_to_old_glyph_mapping(__pyx_v_self->_hb_plan))))); if (unlikely(!__pyx_t_1)) __PYX_ERR(12, 167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "src/uharfbuzz/_subset.pxi":165
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_new_to_old_glyph_mapping(self._hb_plan)))
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def unicode_to_old_glyph_mapping(self) -> Map:
 *         return Map.from_ptr(hb_map_reference (<hb_map_t*>hb_subset_plan_unicode_to_old_glyph_mapping(self._hb_plan)))
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.unicode_to_old_glyph_mapping.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  if (unlikely(__pyx_nargs > 0)) { __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL; }
  const Py_ssize_t __pyx_kwds_len = unlikely(__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
  if (unlikely(__pyx_kwds_len < 0)) return NULL;
  if (unlikely(__pyx_kwds_len > 0)) {__Pyx_RejectKeywords("__reduce_cython__", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_6__reduce_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self));

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

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":2
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 2, __pyx_L1_error)

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__(PyObject *__pyx_v_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_pyx_state,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(4, 3, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "__setstate_cython__", 0) < (0)) __PYX_ERR(4, 3, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, i); __PYX_ERR(4, 3, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(4, 3, __pyx_L3_error)
    }
    __pyx_v___pyx_state = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(4, 3, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_8__setstate_cython__(((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *)__pyx_v_self), __pyx_v___pyx_state);

  /* function exit code */
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_10SubsetPlan_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":4
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"             # <<<<<<<<<<<<<<
*/
  __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_TypeError))), __pyx_mstate_global->__pyx_kp_u_no_default___reduce___due_to_non, 0, 0);
  __PYX_ERR(4, 4, __pyx_L1_error)

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.SubsetPlan.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":76
 * 
 * 
 * def shape(font: Font, buffer: Buffer,             # <<<<<<<<<<<<<<
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_17shape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_17shape = {"shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_17shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_17shape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_buffer = 0;
  PyObject *__pyx_v_features = 0;
  PyObject *__pyx_v_shapers = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shape (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_buffer,&__pyx_mstate_global->__pyx_n_u_features,&__pyx_mstate_global->__pyx_n_u_shapers,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 76, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "shape", 0) < (0)) __PYX_ERR(0, 76, __pyx_L3_error)

      /* "uharfbuzz/_harfbuzz.pyx":77
 * 
 * def shape(font: Font, buffer: Buffer,
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,             # <<<<<<<<<<<<<<
 *         shapers: List[str] | None = None):
 *     cdef unsigned int size
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "uharfbuzz/_harfbuzz.pyx":78
 * def shape(font: Font, buffer: Buffer,
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):             # <<<<<<<<<<<<<<
 *     cdef unsigned int size
 *     cdef hb_feature_t* hb_features
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("shape", 0, 2, 4, i); __PYX_ERR(0, 76, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 76, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 76, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 76, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "uharfbuzz/_harfbuzz.pyx":77
 * 
 * def shape(font: Font, buffer: Buffer,
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,             # <<<<<<<<<<<<<<
 *         shapers: List[str] | None = None):
 *     cdef unsigned int size
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)Py_None));

      /* "uharfbuzz/_harfbuzz.pyx":78
 * def shape(font: Font, buffer: Buffer,
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):             # <<<<<<<<<<<<<<
 *     cdef unsigned int size
 *     cdef hb_feature_t* hb_features
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)Py_None));
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    __pyx_v_buffer = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)values[1]);
    __pyx_v_features = ((PyObject*)values[2]);
    __pyx_v_shapers = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("shape", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 76, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 76, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_buffer), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, 0, "buffer", 0))) __PYX_ERR(0, 76, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_features), (&PyDict_Type), 1, "features", 2))) __PYX_ERR(0, 77, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shapers), (&PyList_Type), 1, "shapers", 2))) __PYX_ERR(0, 78, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_16shape(__pyx_self, __pyx_v_font, __pyx_v_buffer, __pyx_v_features, __pyx_v_shapers);

  /* "uharfbuzz/_harfbuzz.pyx":76
 * 
 * 
 * def shape(font: Font, buffer: Buffer,             # <<<<<<<<<<<<<<
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):
*/

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_16shape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *__pyx_v_buffer, PyObject *__pyx_v_features, PyObject *__pyx_v_shapers) {
  unsigned int __pyx_v_size;
  hb_feature_t *__pyx_v_hb_features;
  PyObject *__pyx_v_packed = 0;
  hb_feature_t __pyx_v_feat;
  char const *__pyx_v_c_shapers[10];
  PyObject *__pyx_v_value = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_name = NULL;
  PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_end = NULL;
  PyObject *__pyx_v_shaper = NULL;
  hb_bool_t __pyx_v_ret;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  char const *__pyx_t_11;
  unsigned long __pyx_t_12;
  char const *__pyx_t_13;
  PyObject *(*__pyx_t_14)(PyObject *);
  PyObject *__pyx_t_15 = NULL;
  PyObject *__pyx_t_16 = NULL;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *(*__pyx_t_19)(PyObject *);
  unsigned int __pyx_t_20;
  Py_ssize_t __pyx_t_21;
  char const *__pyx_t_22;
  char const *__pyx_t_23;
  PyObject *__pyx_t_24 = NULL;
  PyObject *__pyx_t_25 = NULL;
  PyObject *__pyx_t_26 = NULL;
  PyObject *__pyx_t_27 = NULL;
  PyObject *__pyx_t_28 = NULL;
  PyObject *__pyx_t_29 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("shape", 0);

  /* "uharfbuzz/_harfbuzz.pyx":84
 *     cdef hb_feature_t feat
 *     cdef const char* c_shapers[10]
 *     size = 0             # <<<<<<<<<<<<<<
 *     hb_features = NULL
 *     try:
*/
  __pyx_v_size = 0;

  /* "uharfbuzz/_harfbuzz.pyx":85
 *     cdef const char* c_shapers[10]
 *     size = 0
 *     hb_features = NULL             # <<<<<<<<<<<<<<
 *     try:
 *         if features:
*/
  __pyx_v_hb_features = NULL;

  /* "uharfbuzz/_harfbuzz.pyx":86
 *     size = 0
 *     hb_features = NULL
 *     try:             # <<<<<<<<<<<<<<
 *         if features:
 *             for value in features.values():
*/
  /*try:*/ {

    /* "uharfbuzz/_harfbuzz.pyx":87
 *     hb_features = NULL
 *     try:
 *         if features:             # <<<<<<<<<<<<<<
 *             for value in features.values():
 *                 if isinstance(value, int):
*/
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_features); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 87, __pyx_L4_error)
    if (__pyx_t_1) {

      /* "uharfbuzz/_harfbuzz.pyx":88
 *     try:
 *         if features:
 *             for value in features.values():             # <<<<<<<<<<<<<<
 *                 if isinstance(value, int):
 *                     size += 1
*/
      __pyx_t_3 = 0;
      if (unlikely(__pyx_v_features == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "values");
        __PYX_ERR(0, 88, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_features, 1, __pyx_mstate_global->__pyx_n_u_values, (&__pyx_t_4), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 88, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_4, &__pyx_t_3, NULL, &__pyx_t_6, NULL, __pyx_t_5);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 88, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6);
        __pyx_t_6 = 0;

        /* "uharfbuzz/_harfbuzz.pyx":89
 *         if features:
 *             for value in features.values():
 *                 if isinstance(value, int):             # <<<<<<<<<<<<<<
 *                     size += 1
 *                 else:
*/
        __pyx_t_1 = PyLong_Check(__pyx_v_value); 
        if (__pyx_t_1) {

          /* "uharfbuzz/_harfbuzz.pyx":90
 *             for value in features.values():
 *                 if isinstance(value, int):
 *                     size += 1             # <<<<<<<<<<<<<<
 *                 else:
 *                     size += len(value)
*/
          __pyx_v_size = (__pyx_v_size + 1);

          /* "uharfbuzz/_harfbuzz.pyx":89
 *         if features:
 *             for value in features.values():
 *                 if isinstance(value, int):             # <<<<<<<<<<<<<<
 *                     size += 1
 *                 else:
*/
          goto __pyx_L9;
        }

        /* "uharfbuzz/_harfbuzz.pyx":92
 *                     size += 1
 *                 else:
 *                     size += len(value)             # <<<<<<<<<<<<<<
 *             hb_features = <hb_feature_t*>malloc(size * sizeof(hb_feature_t))
 *             i = 0
*/
        /*else*/ {
          __pyx_t_8 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 92, __pyx_L4_error)
          __pyx_v_size = (__pyx_v_size + __pyx_t_8);
        }
        __pyx_L9:;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "uharfbuzz/_harfbuzz.pyx":93
 *                 else:
 *                     size += len(value)
 *             hb_features = <hb_feature_t*>malloc(size * sizeof(hb_feature_t))             # <<<<<<<<<<<<<<
 *             i = 0
 *             for name, value in features.items():
*/
      __pyx_v_hb_features = ((hb_feature_t *)malloc((__pyx_v_size * (sizeof(hb_feature_t)))));

      /* "uharfbuzz/_harfbuzz.pyx":94
 *                     size += len(value)
 *             hb_features = <hb_feature_t*>malloc(size * sizeof(hb_feature_t))
 *             i = 0             # <<<<<<<<<<<<<<
 *             for name, value in features.items():
 *                 assert i < size, "index out of range for feature array capacity"
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_v_i = __pyx_mstate_global->__pyx_int_0;

      /* "uharfbuzz/_harfbuzz.pyx":95
 *             hb_features = <hb_feature_t*>malloc(size * sizeof(hb_feature_t))
 *             i = 0
 *             for name, value in features.items():             # <<<<<<<<<<<<<<
 *                 assert i < size, "index out of range for feature array capacity"
 *                 packed = name.encode()
*/
      __pyx_t_4 = 0;
      if (unlikely(__pyx_v_features == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 95, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_dict_iterator(__pyx_v_features, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_3), (&__pyx_t_5)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 95, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_XDECREF(__pyx_t_2);
      __pyx_t_2 = __pyx_t_6;
      __pyx_t_6 = 0;
      while (1) {
        __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_2, __pyx_t_3, &__pyx_t_4, &__pyx_t_6, &__pyx_t_9, NULL, __pyx_t_5);
        if (unlikely(__pyx_t_7 == 0)) break;
        if (unlikely(__pyx_t_7 == -1)) __PYX_ERR(0, 95, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_9);
        __pyx_t_9 = 0;

        /* "uharfbuzz/_harfbuzz.pyx":96
 *             i = 0
 *             for name, value in features.items():
 *                 assert i < size, "index out of range for feature array capacity"             # <<<<<<<<<<<<<<
 *                 packed = name.encode()
 *                 if isinstance(value, int):
*/
        #ifndef CYTHON_WITHOUT_ASSERTIONS
        if (unlikely(__pyx_assertions_enabled())) {
          __pyx_t_9 = __Pyx_PyLong_From_unsigned_int(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 96, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_6 = PyObject_RichCompare(__pyx_v_i, __pyx_t_9, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 96, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 96, __pyx_L4_error)
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_1)) {
            __Pyx_Raise(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))), __pyx_mstate_global->__pyx_kp_u_index_out_of_range_for_feature_a, 0, 0);
            __PYX_ERR(0, 96, __pyx_L4_error)
          }
        }
        #else
        if ((1)); else __PYX_ERR(0, 96, __pyx_L4_error)
        #endif

        /* "uharfbuzz/_harfbuzz.pyx":97
 *             for name, value in features.items():
 *                 assert i < size, "index out of range for feature array capacity"
 *                 packed = name.encode()             # <<<<<<<<<<<<<<
 *                 if isinstance(value, int):
 *                     hb_feature_from_string(packed, len(packed), &feat)
*/
        __pyx_t_9 = __pyx_v_name;
        __Pyx_INCREF(__pyx_t_9);
        __pyx_t_10 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, NULL};
          __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 97, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 97, __pyx_L4_error)
        __Pyx_XDECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_6));
        __pyx_t_6 = 0;

        /* "uharfbuzz/_harfbuzz.pyx":98
 *                 assert i < size, "index out of range for feature array capacity"
 *                 packed = name.encode()
 *                 if isinstance(value, int):             # <<<<<<<<<<<<<<
 *                     hb_feature_from_string(packed, len(packed), &feat)
 *                     feat.value = value
*/
        __pyx_t_1 = PyLong_Check(__pyx_v_value); 
        if (__pyx_t_1) {

          /* "uharfbuzz/_harfbuzz.pyx":99
 *                 packed = name.encode()
 *                 if isinstance(value, int):
 *                     hb_feature_from_string(packed, len(packed), &feat)             # <<<<<<<<<<<<<<
 *                     feat.value = value
 *                     hb_features[i] = feat
*/
          if (unlikely(__pyx_v_packed == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
            __PYX_ERR(0, 99, __pyx_L4_error)
          }
          __pyx_t_11 = __Pyx_PyBytes_AsString(__pyx_v_packed); if (unlikely((!__pyx_t_11) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L4_error)
          if (unlikely(__pyx_v_packed == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
            __PYX_ERR(0, 99, __pyx_L4_error)
          }
          __pyx_t_8 = __Pyx_PyBytes_GET_SIZE(__pyx_v_packed); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(0, 99, __pyx_L4_error)
          (void)(hb_feature_from_string(__pyx_t_11, __pyx_t_8, (&__pyx_v_feat)));

          /* "uharfbuzz/_harfbuzz.pyx":100
 *                 if isinstance(value, int):
 *                     hb_feature_from_string(packed, len(packed), &feat)
 *                     feat.value = value             # <<<<<<<<<<<<<<
 *                     hb_features[i] = feat
 *                     i += 1
*/
          __pyx_t_12 = __Pyx_PyLong_As_unsigned_long(__pyx_v_value); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 100, __pyx_L4_error)
          __pyx_v_feat.value = __pyx_t_12;

          /* "uharfbuzz/_harfbuzz.pyx":101
 *                     hb_feature_from_string(packed, len(packed), &feat)
 *                     feat.value = value
 *                     hb_features[i] = feat             # <<<<<<<<<<<<<<
 *                     i += 1
 *                 else:
*/
          __pyx_t_8 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_8 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 101, __pyx_L4_error)
          (__pyx_v_hb_features[__pyx_t_8]) = __pyx_v_feat;

          /* "uharfbuzz/_harfbuzz.pyx":102
 *                     feat.value = value
 *                     hb_features[i] = feat
 *                     i += 1             # <<<<<<<<<<<<<<
 *                 else:
 *                     feat.tag = hb_tag_from_string(packed, -1)
*/
          __pyx_t_6 = __Pyx_PyLong_AddObjC(__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 102, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_6);
          __pyx_t_6 = 0;

          /* "uharfbuzz/_harfbuzz.pyx":98
 *                 assert i < size, "index out of range for feature array capacity"
 *                 packed = name.encode()
 *                 if isinstance(value, int):             # <<<<<<<<<<<<<<
 *                     hb_feature_from_string(packed, len(packed), &feat)
 *                     feat.value = value
*/
          goto __pyx_L12;
        }

        /* "uharfbuzz/_harfbuzz.pyx":104
 *                     i += 1
 *                 else:
 *                     feat.tag = hb_tag_from_string(packed, -1)             # <<<<<<<<<<<<<<
 *                     for start, end, value in value:
 *                         feat.value = value
*/
        /*else*/ {
          if (unlikely(__pyx_v_packed == Py_None)) {
            PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
            __PYX_ERR(0, 104, __pyx_L4_error)
          }
          __pyx_t_13 = __Pyx_PyBytes_AsString(__pyx_v_packed); if (unlikely((!__pyx_t_13) && PyErr_Occurred())) __PYX_ERR(0, 104, __pyx_L4_error)
          __pyx_v_feat.tag = hb_tag_from_string(__pyx_t_13, -1);

          /* "uharfbuzz/_harfbuzz.pyx":105
 *                 else:
 *                     feat.tag = hb_tag_from_string(packed, -1)
 *                     for start, end, value in value:             # <<<<<<<<<<<<<<
 *                         feat.value = value
 *                         feat.start = start
*/
          if (likely(PyList_CheckExact(__pyx_v_value)) || PyTuple_CheckExact(__pyx_v_value)) {
            __pyx_t_6 = __pyx_v_value; __Pyx_INCREF(__pyx_t_6);
            __pyx_t_8 = 0;
            __pyx_t_14 = NULL;
          } else {
            __pyx_t_8 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 105, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_6);
            __pyx_t_14 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 105, __pyx_L4_error)
          }
          for (;;) {
            if (likely(!__pyx_t_14)) {
              if (likely(PyList_CheckExact(__pyx_t_6))) {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_6);
                  #if !CYTHON_ASSUME_SAFE_SIZE
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 105, __pyx_L4_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                __pyx_t_9 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_8, __Pyx_ReferenceSharing_OwnStrongReference);
                ++__pyx_t_8;
              } else {
                {
                  Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_6);
                  #if !CYTHON_ASSUME_SAFE_SIZE
                  if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 105, __pyx_L4_error)
                  #endif
                  if (__pyx_t_8 >= __pyx_temp) break;
                }
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_9 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_8));
                #else
                __pyx_t_9 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_8);
                #endif
                ++__pyx_t_8;
              }
              if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L4_error)
            } else {
              __pyx_t_9 = __pyx_t_14(__pyx_t_6);
              if (unlikely(!__pyx_t_9)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 105, __pyx_L4_error)
                  PyErr_Clear();
                }
                break;
              }
            }
            __Pyx_GOTREF(__pyx_t_9);
            if ((likely(PyTuple_CheckExact(__pyx_t_9))) || (PyList_CheckExact(__pyx_t_9))) {
              PyObject* sequence = __pyx_t_9;
              Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
              if (unlikely(size != 3)) {
                if (size > 3) __Pyx_RaiseTooManyValuesError(3);
                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                __PYX_ERR(0, 105, __pyx_L4_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_15 = PyTuple_GET_ITEM(sequence, 0);
                __Pyx_INCREF(__pyx_t_15);
                __pyx_t_16 = PyTuple_GET_ITEM(sequence, 1);
                __Pyx_INCREF(__pyx_t_16);
                __pyx_t_17 = PyTuple_GET_ITEM(sequence, 2);
                __Pyx_INCREF(__pyx_t_17);
              } else {
                __pyx_t_15 = __Pyx_PyList_GetItemRefFast(sequence, 0, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 105, __pyx_L4_error)
                __Pyx_XGOTREF(__pyx_t_15);
                __pyx_t_16 = __Pyx_PyList_GetItemRefFast(sequence, 1, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 105, __pyx_L4_error)
                __Pyx_XGOTREF(__pyx_t_16);
                __pyx_t_17 = __Pyx_PyList_GetItemRefFast(sequence, 2, __Pyx_ReferenceSharing_SharedReference);
                if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 105, __pyx_L4_error)
                __Pyx_XGOTREF(__pyx_t_17);
              }
              #else
              __pyx_t_15 = __Pyx_PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 105, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_15);
              __pyx_t_16 = __Pyx_PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 105, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_16);
              __pyx_t_17 = __Pyx_PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 105, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_17);
              #endif
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            } else {
              Py_ssize_t index = -1;
              __pyx_t_18 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 105, __pyx_L4_error)
              __Pyx_GOTREF(__pyx_t_18);
              __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
              __pyx_t_19 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_18);
              index = 0; __pyx_t_15 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_15)) goto __pyx_L15_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_15);
              index = 1; __pyx_t_16 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_16)) goto __pyx_L15_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_16);
              index = 2; __pyx_t_17 = __pyx_t_19(__pyx_t_18); if (unlikely(!__pyx_t_17)) goto __pyx_L15_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_17);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_19(__pyx_t_18), 3) < (0)) __PYX_ERR(0, 105, __pyx_L4_error)
              __pyx_t_19 = NULL;
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              goto __pyx_L16_unpacking_done;
              __pyx_L15_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
              __pyx_t_19 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 105, __pyx_L4_error)
              __pyx_L16_unpacking_done:;
            }
            __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_15);
            __pyx_t_15 = 0;
            __Pyx_XDECREF_SET(__pyx_v_end, __pyx_t_16);
            __pyx_t_16 = 0;
            __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_17);
            __pyx_t_17 = 0;

            /* "uharfbuzz/_harfbuzz.pyx":106
 *                     feat.tag = hb_tag_from_string(packed, -1)
 *                     for start, end, value in value:
 *                         feat.value = value             # <<<<<<<<<<<<<<
 *                         feat.start = start
 *                         feat.end = end
*/
            __pyx_t_12 = __Pyx_PyLong_As_unsigned_long(__pyx_v_value); if (unlikely((__pyx_t_12 == (unsigned long)-1) && PyErr_Occurred())) __PYX_ERR(0, 106, __pyx_L4_error)
            __pyx_v_feat.value = __pyx_t_12;

            /* "uharfbuzz/_harfbuzz.pyx":107
 *                     for start, end, value in value:
 *                         feat.value = value
 *                         feat.start = start             # <<<<<<<<<<<<<<
 *                         feat.end = end
 *                         hb_features[i] = feat
*/
            __pyx_t_20 = __Pyx_PyLong_As_unsigned_int(__pyx_v_start); if (unlikely((__pyx_t_20 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 107, __pyx_L4_error)
            __pyx_v_feat.start = __pyx_t_20;

            /* "uharfbuzz/_harfbuzz.pyx":108
 *                         feat.value = value
 *                         feat.start = start
 *                         feat.end = end             # <<<<<<<<<<<<<<
 *                         hb_features[i] = feat
 *                         i += 1
*/
            __pyx_t_20 = __Pyx_PyLong_As_unsigned_int(__pyx_v_end); if (unlikely((__pyx_t_20 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 108, __pyx_L4_error)
            __pyx_v_feat.end = __pyx_t_20;

            /* "uharfbuzz/_harfbuzz.pyx":109
 *                         feat.start = start
 *                         feat.end = end
 *                         hb_features[i] = feat             # <<<<<<<<<<<<<<
 *                         i += 1
 *         if shapers:
*/
            __pyx_t_21 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_21 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 109, __pyx_L4_error)
            (__pyx_v_hb_features[__pyx_t_21]) = __pyx_v_feat;

            /* "uharfbuzz/_harfbuzz.pyx":110
 *                         feat.end = end
 *                         hb_features[i] = feat
 *                         i += 1             # <<<<<<<<<<<<<<
 *         if shapers:
 *             for i, shaper in enumerate(shapers[:9]):
*/
            __pyx_t_9 = __Pyx_PyLong_AddObjC(__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 1, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 110, __pyx_L4_error)
            __Pyx_GOTREF(__pyx_t_9);
            __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_9);
            __pyx_t_9 = 0;

            /* "uharfbuzz/_harfbuzz.pyx":105
 *                 else:
 *                     feat.tag = hb_tag_from_string(packed, -1)
 *                     for start, end, value in value:             # <<<<<<<<<<<<<<
 *                         feat.value = value
 *                         feat.start = start
*/
          }
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        }
        __pyx_L12:;
      }
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "uharfbuzz/_harfbuzz.pyx":87
 *     hb_features = NULL
 *     try:
 *         if features:             # <<<<<<<<<<<<<<
 *             for value in features.values():
 *                 if isinstance(value, int):
*/
    }

    /* "uharfbuzz/_harfbuzz.pyx":111
 *                         hb_features[i] = feat
 *                         i += 1
 *         if shapers:             # <<<<<<<<<<<<<<
 *             for i, shaper in enumerate(shapers[:9]):
 *                 packed = shaper.encode()
*/
    if (__pyx_v_shapers == Py_None) __pyx_t_1 = 0;
    else
    {
      Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_v_shapers);
      if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 111, __pyx_L4_error)
      __pyx_t_1 = (__pyx_temp != 0);
    }

    if (__pyx_t_1) {

      /* "uharfbuzz/_harfbuzz.pyx":112
 *                         i += 1
 *         if shapers:
 *             for i, shaper in enumerate(shapers[:9]):             # <<<<<<<<<<<<<<
 *                 packed = shaper.encode()
 *                 c_shapers[i] = packed
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_2 = __pyx_mstate_global->__pyx_int_0;
      if (unlikely(__pyx_v_shapers == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 112, __pyx_L4_error)
      }
      __pyx_t_6 = __Pyx_PyList_GetSlice(__pyx_v_shapers, 0, 9); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 112, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_9 = __pyx_t_6; __Pyx_INCREF(__pyx_t_9);
      __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      for (;;) {
        {
          Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_9);
          #if !CYTHON_ASSUME_SAFE_SIZE
          if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 112, __pyx_L4_error)
          #endif
          if (__pyx_t_3 >= __pyx_temp) break;
        }
        __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_9, __pyx_t_3, __Pyx_ReferenceSharing_OwnStrongReference);
        ++__pyx_t_3;
        if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_v_shaper, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_2);
        __pyx_t_6 = __Pyx_PyLong_AddObjC(__pyx_t_2, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 112, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_2);
        __pyx_t_2 = __pyx_t_6;
        __pyx_t_6 = 0;

        /* "uharfbuzz/_harfbuzz.pyx":113
 *         if shapers:
 *             for i, shaper in enumerate(shapers[:9]):
 *                 packed = shaper.encode()             # <<<<<<<<<<<<<<
 *                 c_shapers[i] = packed
 *             c_shapers[i + 1] = NULL
*/
        __pyx_t_17 = __pyx_v_shaper;
        __Pyx_INCREF(__pyx_t_17);
        __pyx_t_10 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_17, NULL};
          __pyx_t_6 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_encode, __pyx_callargs+__pyx_t_10, (1-__pyx_t_10) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 113, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        if (!(likely(PyBytes_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_6))) __PYX_ERR(0, 113, __pyx_L4_error)
        __Pyx_XDECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_6));
        __pyx_t_6 = 0;

        /* "uharfbuzz/_harfbuzz.pyx":114
 *             for i, shaper in enumerate(shapers[:9]):
 *                 packed = shaper.encode()
 *                 c_shapers[i] = packed             # <<<<<<<<<<<<<<
 *             c_shapers[i + 1] = NULL
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)
*/
        if (unlikely(__pyx_v_packed == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
          __PYX_ERR(0, 114, __pyx_L4_error)
        }
        __pyx_t_22 = __Pyx_PyBytes_AsString(__pyx_v_packed); if (unlikely((!__pyx_t_22) && PyErr_Occurred())) __PYX_ERR(0, 114, __pyx_L4_error)
        __pyx_t_4 = __Pyx_PyIndex_AsSsize_t(__pyx_v_i); if (unlikely((__pyx_t_4 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 114, __pyx_L4_error)
        (__pyx_v_c_shapers[__pyx_t_4]) = __pyx_t_22;

        /* "uharfbuzz/_harfbuzz.pyx":112
 *                         i += 1
 *         if shapers:
 *             for i, shaper in enumerate(shapers[:9]):             # <<<<<<<<<<<<<<
 *                 packed = shaper.encode()
 *                 c_shapers[i] = packed
*/
      }
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "uharfbuzz/_harfbuzz.pyx":115
 *                 packed = shaper.encode()
 *                 c_shapers[i] = packed
 *             c_shapers[i + 1] = NULL             # <<<<<<<<<<<<<<
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)
 *             if not ret:
*/
      if (unlikely(!__pyx_v_i)) { __Pyx_RaiseUnboundLocalError("i"); __PYX_ERR(0, 115, __pyx_L4_error) }
      __pyx_t_2 = __Pyx_PyLong_AddObjC(__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L4_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      (__pyx_v_c_shapers[__pyx_t_3]) = NULL;

      /* "uharfbuzz/_harfbuzz.pyx":116
 *                 c_shapers[i] = packed
 *             c_shapers[i + 1] = NULL
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)             # <<<<<<<<<<<<<<
 *             if not ret:
 *                 raise RuntimeError("All shapers failed")
*/
      __pyx_v_ret = hb_shape_full(__pyx_v_font->_hb_font, __pyx_v_buffer->_hb_buffer, __pyx_v_hb_features, __pyx_v_size, __pyx_v_c_shapers);

      /* "uharfbuzz/_harfbuzz.pyx":117
 *             c_shapers[i + 1] = NULL
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)
 *             if not ret:             # <<<<<<<<<<<<<<
 *                 raise RuntimeError("All shapers failed")
 *         else:
*/
      __pyx_t_1 = (!(__pyx_v_ret != 0));
      if (unlikely(__pyx_t_1)) {

        /* "uharfbuzz/_harfbuzz.pyx":118
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)
 *             if not ret:
 *                 raise RuntimeError("All shapers failed")             # <<<<<<<<<<<<<<
 *         else:
 *             hb_shape(font._hb_font, buffer._hb_buffer, hb_features, size)
*/
        __pyx_t_9 = NULL;
        __pyx_t_10 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_All_shapers_failed};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __Pyx_Raise(__pyx_t_2, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __PYX_ERR(0, 118, __pyx_L4_error)

        /* "uharfbuzz/_harfbuzz.pyx":117
 *             c_shapers[i + 1] = NULL
 *             ret = hb_shape_full(font._hb_font, buffer._hb_buffer, hb_features, size, c_shapers)
 *             if not ret:             # <<<<<<<<<<<<<<
 *                 raise RuntimeError("All shapers failed")
 *         else:
*/
      }

      /* "uharfbuzz/_harfbuzz.pyx":111
 *                         hb_features[i] = feat
 *                         i += 1
 *         if shapers:             # <<<<<<<<<<<<<<
 *             for i, shaper in enumerate(shapers[:9]):
 *                 packed = shaper.encode()
*/
      goto __pyx_L18;
    }

    /* "uharfbuzz/_harfbuzz.pyx":120
 *                 raise RuntimeError("All shapers failed")
 *         else:
 *             hb_shape(font._hb_font, buffer._hb_buffer, hb_features, size)             # <<<<<<<<<<<<<<
 *         if not hb_buffer_allocation_successful(buffer._hb_buffer):
 *             raise MemoryError()
*/
    /*else*/ {
      hb_shape(__pyx_v_font->_hb_font, __pyx_v_buffer->_hb_buffer, __pyx_v_hb_features, __pyx_v_size);
    }
    __pyx_L18:;

    /* "uharfbuzz/_harfbuzz.pyx":121
 *         else:
 *             hb_shape(font._hb_font, buffer._hb_buffer, hb_features, size)
 *         if not hb_buffer_allocation_successful(buffer._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *     finally:
*/
    __pyx_t_1 = (!(hb_buffer_allocation_successful(__pyx_v_buffer->_hb_buffer) != 0));
    if (unlikely(__pyx_t_1)) {

      /* "uharfbuzz/_harfbuzz.pyx":122
 *             hb_shape(font._hb_font, buffer._hb_buffer, hb_features, size)
 *         if not hb_buffer_allocation_successful(buffer._hb_buffer):
 *             raise MemoryError()             # <<<<<<<<<<<<<<
 *     finally:
 *         if hb_features is not NULL:
*/
      PyErr_NoMemory(); __PYX_ERR(0, 122, __pyx_L4_error)

      /* "uharfbuzz/_harfbuzz.pyx":121
 *         else:
 *             hb_shape(font._hb_font, buffer._hb_buffer, hb_features, size)
 *         if not hb_buffer_allocation_successful(buffer._hb_buffer):             # <<<<<<<<<<<<<<
 *             raise MemoryError()
 *     finally:
*/
    }
  }

  /* "uharfbuzz/_harfbuzz.pyx":124
 *             raise MemoryError()
 *     finally:
 *         if hb_features is not NULL:             # <<<<<<<<<<<<<<
 *             free(hb_features)
 * 
*/
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = (__pyx_v_hb_features != NULL);
      if (__pyx_t_1) {

        /* "uharfbuzz/_harfbuzz.pyx":125
 *     finally:
 *         if hb_features is not NULL:
 *             free(hb_features)             # <<<<<<<<<<<<<<
 * 
 * 
*/
        free(__pyx_v_hb_features);

        /* "uharfbuzz/_harfbuzz.pyx":124
 *             raise MemoryError()
 *     finally:
 *         if hb_features is not NULL:             # <<<<<<<<<<<<<<
 *             free(hb_features)
 * 
*/
      }
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __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_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_ExceptionSwap(&__pyx_t_27, &__pyx_t_28, &__pyx_t_29);
      if ( unlikely(__Pyx_GetException(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26) < 0)) __Pyx_ErrFetch(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
      __Pyx_XGOTREF(__pyx_t_24);
      __Pyx_XGOTREF(__pyx_t_25);
      __Pyx_XGOTREF(__pyx_t_26);
      __Pyx_XGOTREF(__pyx_t_27);
      __Pyx_XGOTREF(__pyx_t_28);
      __Pyx_XGOTREF(__pyx_t_29);
      __pyx_t_5 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
      {
        __pyx_t_1 = (__pyx_v_hb_features != NULL);
        if (__pyx_t_1) {

          /* "uharfbuzz/_harfbuzz.pyx":125
 *     finally:
 *         if hb_features is not NULL:
 *             free(hb_features)             # <<<<<<<<<<<<<<
 * 
 * 
*/
          free(__pyx_v_hb_features);

          /* "uharfbuzz/_harfbuzz.pyx":124
 *             raise MemoryError()
 *     finally:
 *         if hb_features is not NULL:             # <<<<<<<<<<<<<<
 *             free(hb_features)
 * 
*/
        }
      }
      __Pyx_XGIVEREF(__pyx_t_27);
      __Pyx_XGIVEREF(__pyx_t_28);
      __Pyx_XGIVEREF(__pyx_t_29);
      __Pyx_ExceptionReset(__pyx_t_27, __pyx_t_28, __pyx_t_29);
      __Pyx_XGIVEREF(__pyx_t_24);
      __Pyx_XGIVEREF(__pyx_t_25);
      __Pyx_XGIVEREF(__pyx_t_26);
      __Pyx_ErrRestore(__pyx_t_24, __pyx_t_25, __pyx_t_26);
      __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_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_23;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }

  /* "uharfbuzz/_harfbuzz.pyx":76
 * 
 * 
 * def shape(font: Font, buffer: Buffer,             # <<<<<<<<<<<<<<
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_name);
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_end);
  __Pyx_XDECREF(__pyx_v_shaper);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":128
 * 
 * 
 * def ot_tag_to_script(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_19ot_tag_to_script(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_19ot_tag_to_script = {"ot_tag_to_script", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_19ot_tag_to_script, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_19ot_tag_to_script(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_tag_to_script (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 128, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 128, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_tag_to_script", 0) < (0)) __PYX_ERR(0, 128, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_tag_to_script", 1, 1, 1, i); __PYX_ERR(0, 128, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 128, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_tag_to_script", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 128, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_tag_to_script", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(0, 128, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_18ot_tag_to_script(__pyx_self, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_18ot_tag_to_script(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  hb_script_t __pyx_v_hb_script;
  char __pyx_v_cstr[5];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_tag_to_script", 0);

  /* "uharfbuzz/_harfbuzz.pyx":129
 * 
 * def ot_tag_to_script(tag: str) -> str:
 *     cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *     cdef hb_script_t hb_script = hb_ot_tag_to_script(hb_tag)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":130
 * def ot_tag_to_script(tag: str) -> str:
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *     cdef hb_script_t hb_script = hb_ot_tag_to_script(hb_tag)
 *     cdef char cstr[5]
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 130, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "uharfbuzz/_harfbuzz.pyx":131
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *     cdef hb_script_t hb_script = hb_ot_tag_to_script(hb_tag)             # <<<<<<<<<<<<<<
 *     cdef char cstr[5]
 *     hb_tag_to_string(hb_script, cstr)
*/
  __pyx_v_hb_script = hb_ot_tag_to_script(__pyx_v_hb_tag);

  /* "uharfbuzz/_harfbuzz.pyx":133
 *     cdef hb_script_t hb_script = hb_ot_tag_to_script(hb_tag)
 *     cdef char cstr[5]
 *     hb_tag_to_string(hb_script, cstr)             # <<<<<<<<<<<<<<
 *     cstr[4] = b'\0'
 *     packed = cstr
*/
  hb_tag_to_string(__pyx_v_hb_script, __pyx_v_cstr);

  /* "uharfbuzz/_harfbuzz.pyx":134
 *     cdef char cstr[5]
 *     hb_tag_to_string(hb_script, cstr)
 *     cstr[4] = b'\0'             # <<<<<<<<<<<<<<
 *     packed = cstr
 *     return packed.decode()
*/
  (__pyx_v_cstr[4]) = '\x00';

  /* "uharfbuzz/_harfbuzz.pyx":135
 *     hb_tag_to_string(hb_script, cstr)
 *     cstr[4] = b'\0'
 *     packed = cstr             # <<<<<<<<<<<<<<
 *     return packed.decode()
 * 
*/
  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":136
 *     cstr[4] = b'\0'
 *     packed = cstr
 *     return packed.decode()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":128
 * 
 * 
 * def ot_tag_to_script(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_tag_to_script", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":139
 * 
 * 
 * def ot_tag_to_language(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_21ot_tag_to_language(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_21ot_tag_to_language = {"ot_tag_to_language", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_21ot_tag_to_language, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_21ot_tag_to_language(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_tag_to_language (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 139, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 139, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_tag_to_language", 0) < (0)) __PYX_ERR(0, 139, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_tag_to_language", 1, 1, 1, i); __PYX_ERR(0, 139, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 139, __pyx_L3_error)
    }
    __pyx_v_tag = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_tag_to_language", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 139, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_tag_to_language", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(0, 139, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_20ot_tag_to_language(__pyx_self, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_20ot_tag_to_language(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_tag) {
  PyObject *__pyx_v_packed = 0;
  hb_tag_t __pyx_v_hb_tag;
  hb_language_t __pyx_v_hb_language;
  const char *__pyx_v_cstr;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  char *__pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_tag_to_language", 0);

  /* "uharfbuzz/_harfbuzz.pyx":140
 * 
 * def ot_tag_to_language(tag: str) -> str:
 *     cdef bytes packed = tag.encode()             # <<<<<<<<<<<<<<
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)
*/
  __pyx_t_1 = PyUnicode_AsEncodedString(__pyx_v_tag, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_packed = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":141
 * def ot_tag_to_language(tag: str) -> str:
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)             # <<<<<<<<<<<<<<
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)
 *     cdef const_char* cstr = hb_language_to_string(hb_language)
*/
  __pyx_t_2 = __Pyx_PyBytes_AsWritableString(__pyx_v_packed); if (unlikely((!__pyx_t_2) && PyErr_Occurred())) __PYX_ERR(0, 141, __pyx_L1_error)
  __pyx_v_hb_tag = hb_tag_from_string(((char *)__pyx_t_2), -1);

  /* "uharfbuzz/_harfbuzz.pyx":142
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)             # <<<<<<<<<<<<<<
 *     cdef const_char* cstr = hb_language_to_string(hb_language)
 *     if cstr is NULL:
*/
  __pyx_v_hb_language = hb_ot_tag_to_language(__pyx_v_hb_tag);

  /* "uharfbuzz/_harfbuzz.pyx":143
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)
 *     cdef const_char* cstr = hb_language_to_string(hb_language)             # <<<<<<<<<<<<<<
 *     if cstr is NULL:
 *         return None
*/
  __pyx_v_cstr = hb_language_to_string(__pyx_v_hb_language);

  /* "uharfbuzz/_harfbuzz.pyx":144
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)
 *     cdef const_char* cstr = hb_language_to_string(hb_language)
 *     if cstr is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     packed = cstr
*/
  __pyx_t_3 = (__pyx_v_cstr == NULL);
  if (__pyx_t_3) {

    /* "uharfbuzz/_harfbuzz.pyx":145
 *     cdef const_char* cstr = hb_language_to_string(hb_language)
 *     if cstr is NULL:
 *         return None             # <<<<<<<<<<<<<<
 *     packed = cstr
 *     return packed.decode()
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "uharfbuzz/_harfbuzz.pyx":144
 *     cdef hb_language_t hb_language = hb_ot_tag_to_language(hb_tag)
 *     cdef const_char* cstr = hb_language_to_string(hb_language)
 *     if cstr is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     packed = cstr
*/
  }

  /* "uharfbuzz/_harfbuzz.pyx":146
 *     if cstr is NULL:
 *         return None
 *     packed = cstr             # <<<<<<<<<<<<<<
 *     return packed.decode()
 * 
*/
  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_cstr); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_packed, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":147
 *         return None
 *     packed = cstr
 *     return packed.decode()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_decode_bytes(__pyx_v_packed, 0, PY_SSIZE_T_MAX, NULL, NULL, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":139
 * 
 * 
 * def ot_tag_to_language(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_tag_to_language", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_packed);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":150
 * 
 * 
 * @deprecated("Face.get_lookup_glyph_alternates()")             # <<<<<<<<<<<<<<
 * def ot_layout_lookup_get_glyph_alternates(
 *         face: Face, lookup_index : int, glyph : hb_codepoint_t) -> List[int]:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_23ot_layout_lookup_get_glyph_alternates(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_23ot_layout_lookup_get_glyph_alternates = {"ot_layout_lookup_get_glyph_alternates", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_23ot_layout_lookup_get_glyph_alternates, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_23ot_layout_lookup_get_glyph_alternates(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_lookup_index = 0;
  hb_codepoint_t __pyx_v_glyph;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_lookup_get_glyph_alternates (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_lookup_index,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 150, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 150, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 150, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 150, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_lookup_get_glyph_alternates", 0) < (0)) __PYX_ERR(0, 150, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_lookup_get_glyph_alternates", 1, 3, 3, i); __PYX_ERR(0, 150, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 150, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 150, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 150, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "lookup_index", 0) < (0)) __PYX_ERR(0, 152, __pyx_L3_error)
    __pyx_v_lookup_index = ((PyObject*)values[1]);
    __pyx_v_glyph = __Pyx_PyLong_As_hb_codepoint_t(values[2]); if (unlikely((__pyx_v_glyph == ((hb_codepoint_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 152, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_lookup_get_glyph_alternates", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 150, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_lookup_get_glyph_alternates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 152, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup_index), (&PyLong_Type), 0, "lookup_index", 2))) __PYX_ERR(0, 152, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_22ot_layout_lookup_get_glyph_alternates(__pyx_self, __pyx_v_face, __pyx_v_lookup_index, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_22ot_layout_lookup_get_glyph_alternates(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_lookup_index, hb_codepoint_t __pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_lookup_get_glyph_alternates", 0);

  /* "uharfbuzz/_harfbuzz.pyx":153
 * def ot_layout_lookup_get_glyph_alternates(
 *         face: Face, lookup_index : int, glyph : hb_codepoint_t) -> List[int]:
 *    return face.get_lookup_glyph_alternates(lookup_index, glyph)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_hb_codepoint_t(__pyx_v_glyph); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_lookup_index, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_lookup_glyph_alternates, __pyx_callargs+__pyx_t_4, (3-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 153, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":150
 * 
 * 
 * @deprecated("Face.get_lookup_glyph_alternates()")             # <<<<<<<<<<<<<<
 * def ot_layout_lookup_get_glyph_alternates(
 *         face: Face, lookup_index : int, glyph : hb_codepoint_t) -> List[int]:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_lookup_get_glyph_alternates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":156
 * 
 * 
 * @deprecated("Face.get_language_feature_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_language_get_feature_tags(
 *         face: Face, tag: str, script_index: int = 0,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_25ot_layout_language_get_feature_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_25ot_layout_language_get_feature_tags = {"ot_layout_language_get_feature_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_25ot_layout_language_get_feature_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_25ot_layout_language_get_feature_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_script_index = 0;
  PyObject *__pyx_v_language_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_language_get_feature_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_script_index,&__pyx_mstate_global->__pyx_n_u_language_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 156, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_language_get_feature_tags", 0) < (0)) __PYX_ERR(0, 156, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_0)));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_65535)));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_language_get_feature_tags", 0, 2, 4, i); __PYX_ERR(0, 156, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 156, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 156, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 156, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_0)));
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_65535)));
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "script_index", 0) < (0)) __PYX_ERR(0, 158, __pyx_L3_error)
    __pyx_v_script_index = ((PyObject*)values[2]);
    if (__Pyx_PyInt_FromNumber(&values[3], "language_index", 0) < (0)) __PYX_ERR(0, 159, __pyx_L3_error)
    __pyx_v_language_index = ((PyObject*)values[3]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_language_get_feature_tags", 0, 2, 4, __pyx_nargs); __PYX_ERR(0, 156, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_language_get_feature_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 158, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(0, 158, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_index), (&PyLong_Type), 0, "script_index", 2))) __PYX_ERR(0, 158, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_language_index), (&PyLong_Type), 0, "language_index", 2))) __PYX_ERR(0, 159, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_24ot_layout_language_get_feature_tags(__pyx_self, __pyx_v_face, __pyx_v_tag, __pyx_v_script_index, __pyx_v_language_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_24ot_layout_language_get_feature_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index, PyObject *__pyx_v_language_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_language_get_feature_tags", 0);

  /* "uharfbuzz/_harfbuzz.pyx":160
 *         face: Face, tag: str, script_index: int = 0,
 *         language_index: int = 0xFFFF) -> List[str]:
 *     return face.get_language_feature_tags(tag, script_index, language_index)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_tag, __pyx_v_script_index, __pyx_v_language_index};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_language_feature_tags, __pyx_callargs+__pyx_t_3, (4-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 160, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":156
 * 
 * 
 * @deprecated("Face.get_language_feature_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_language_get_feature_tags(
 *         face: Face, tag: str, script_index: int = 0,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_language_get_feature_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":163
 * 
 * 
 * @deprecated("Face.get_script_language_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_script_get_language_tags(
 *         face: Face, tag: str, script_index: int = 0) -> List[str]:
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_27ot_layout_script_get_language_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_27ot_layout_script_get_language_tags = {"ot_layout_script_get_language_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_27ot_layout_script_get_language_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_27ot_layout_script_get_language_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  PyObject *__pyx_v_script_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_script_get_language_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,&__pyx_mstate_global->__pyx_n_u_script_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 163, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 163, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 163, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 163, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_script_get_language_tags", 0) < (0)) __PYX_ERR(0, 163, __pyx_L3_error)
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_0)));
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_script_get_language_tags", 0, 2, 3, i); __PYX_ERR(0, 163, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 163, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 163, __pyx_L3_error)
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 163, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject*)((PyObject*)__pyx_mstate_global->__pyx_int_0)));
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
    if (__Pyx_PyInt_FromNumber(&values[2], "script_index", 0) < (0)) __PYX_ERR(0, 165, __pyx_L3_error)
    __pyx_v_script_index = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_script_get_language_tags", 0, 2, 3, __pyx_nargs); __PYX_ERR(0, 163, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_script_get_language_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 165, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(0, 165, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_index), (&PyLong_Type), 0, "script_index", 2))) __PYX_ERR(0, 165, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_26ot_layout_script_get_language_tags(__pyx_self, __pyx_v_face, __pyx_v_tag, __pyx_v_script_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_26ot_layout_script_get_language_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag, PyObject *__pyx_v_script_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_script_get_language_tags", 0);

  /* "uharfbuzz/_harfbuzz.pyx":166
 * def ot_layout_script_get_language_tags(
 *         face: Face, tag: str, script_index: int = 0) -> List[str]:
 *     return face.get_script_language_tags(tag, script_index)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_table_script_tags()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_tag, __pyx_v_script_index};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_script_language_tags, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 166, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":163
 * 
 * 
 * @deprecated("Face.get_script_language_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_script_get_language_tags(
 *         face: Face, tag: str, script_index: int = 0) -> List[str]:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_script_get_language_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":168
 *     return face.get_script_language_tags(tag, script_index)
 * 
 * @deprecated("Face.get_table_script_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_table_get_script_tags(face: Face, tag: str) -> List[str]:
 *     return face.get_table_script_tags(tag)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_29ot_layout_table_get_script_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_29ot_layout_table_get_script_tags = {"ot_layout_table_get_script_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_29ot_layout_table_get_script_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_29ot_layout_table_get_script_tags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_table_get_script_tags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 168, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 168, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 168, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_table_get_script_tags", 0) < (0)) __PYX_ERR(0, 168, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_table_get_script_tags", 1, 2, 2, i); __PYX_ERR(0, 168, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 168, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 168, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    __pyx_v_tag = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_table_get_script_tags", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 168, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_table_get_script_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 169, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tag), (&PyUnicode_Type), 0, "tag", 2))) __PYX_ERR(0, 169, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_28ot_layout_table_get_script_tags(__pyx_self, __pyx_v_face, __pyx_v_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_28ot_layout_table_get_script_tags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_table_get_script_tags", 0);

  /* "uharfbuzz/_harfbuzz.pyx":170
 * @deprecated("Face.get_table_script_tags()")
 * def ot_layout_table_get_script_tags(face: Face, tag: str) -> List[str]:
 *     return face.get_table_script_tags(tag)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_layout_baseline()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_tag};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_table_script_tags, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 170, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":168
 *     return face.get_script_language_tags(tag, script_index)
 * 
 * @deprecated("Face.get_table_script_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_table_get_script_tags(face: Face, tag: str) -> List[str]:
 *     return face.get_table_script_tags(tag)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_table_get_script_tags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":172
 *     return face.get_table_script_tags(tag)
 * 
 * @deprecated("Face.get_layout_baseline()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_baseline(font: Font,
 *                            baseline_tag: str,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_31ot_layout_get_baseline(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_31ot_layout_get_baseline = {"ot_layout_get_baseline", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_31ot_layout_get_baseline, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_31ot_layout_get_baseline(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_baseline_tag = 0;
  PyObject *__pyx_v_direction = 0;
  PyObject *__pyx_v_script_tag = 0;
  PyObject *__pyx_v_language_tag = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[5] = {0,0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_get_baseline (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_baseline_tag,&__pyx_mstate_global->__pyx_n_u_direction,&__pyx_mstate_global->__pyx_n_u_script_tag,&__pyx_mstate_global->__pyx_n_u_language_tag,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 172, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 172, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 172, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 172, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 172, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 172, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_get_baseline", 0) < (0)) __PYX_ERR(0, 172, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 5; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_get_baseline", 1, 5, 5, i); __PYX_ERR(0, 172, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 5)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 172, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 172, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 172, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 172, __pyx_L3_error)
      values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 172, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    __pyx_v_baseline_tag = ((PyObject*)values[1]);
    __pyx_v_direction = ((PyObject*)values[2]);
    __pyx_v_script_tag = ((PyObject*)values[3]);
    __pyx_v_language_tag = ((PyObject*)values[4]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_get_baseline", 1, 5, 5, __pyx_nargs); __PYX_ERR(0, 172, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_get_baseline", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 173, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_baseline_tag), (&PyUnicode_Type), 0, "baseline_tag", 2))) __PYX_ERR(0, 174, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(0, 175, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_script_tag), (&PyUnicode_Type), 0, "script_tag", 2))) __PYX_ERR(0, 176, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_language_tag), (&PyUnicode_Type), 0, "language_tag", 2))) __PYX_ERR(0, 177, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_30ot_layout_get_baseline(__pyx_self, __pyx_v_font, __pyx_v_baseline_tag, __pyx_v_direction, __pyx_v_script_tag, __pyx_v_language_tag);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_30ot_layout_get_baseline(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_baseline_tag, PyObject *__pyx_v_direction, PyObject *__pyx_v_script_tag, PyObject *__pyx_v_language_tag) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_get_baseline", 0);

  /* "uharfbuzz/_harfbuzz.pyx":178
 *                            script_tag: str,
 *                            language_tag: str) -> int:
 *     return font.get_layout_baseline(baseline_tag, direction, script_tag, language_tag)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.face.has_layout_glyph_classes")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[5] = {__pyx_t_2, __pyx_v_baseline_tag, __pyx_v_direction, __pyx_v_script_tag, __pyx_v_language_tag};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_layout_baseline, __pyx_callargs+__pyx_t_3, (5-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 178, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":172
 *     return face.get_table_script_tags(tag)
 * 
 * @deprecated("Face.get_layout_baseline()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_baseline(font: Font,
 *                            baseline_tag: str,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_get_baseline", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":180
 *     return font.get_layout_baseline(baseline_tag, direction, script_tag, language_tag)
 * 
 * @deprecated("Face.face.has_layout_glyph_classes")             # <<<<<<<<<<<<<<
 * def ot_layout_has_glyph_classes(face: Face) -> bool:
 *     return face.has_layout_glyph_classes
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_33ot_layout_has_glyph_classes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_33ot_layout_has_glyph_classes = {"ot_layout_has_glyph_classes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_33ot_layout_has_glyph_classes, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_33ot_layout_has_glyph_classes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_has_glyph_classes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 180, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 180, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_has_glyph_classes", 0) < (0)) __PYX_ERR(0, 180, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_has_glyph_classes", 1, 1, 1, i); __PYX_ERR(0, 180, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 180, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_has_glyph_classes", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 180, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_glyph_classes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 181, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_32ot_layout_has_glyph_classes(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_32ot_layout_has_glyph_classes(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_has_glyph_classes", 0);

  /* "uharfbuzz/_harfbuzz.pyx":182
 * @deprecated("Face.face.has_layout_glyph_classes")
 * def ot_layout_has_glyph_classes(face: Face) -> bool:
 *     return face.has_layout_glyph_classes             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_layout_positioning")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_layout_glyph_classes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":180
 *     return font.get_layout_baseline(baseline_tag, direction, script_tag, language_tag)
 * 
 * @deprecated("Face.face.has_layout_glyph_classes")             # <<<<<<<<<<<<<<
 * def ot_layout_has_glyph_classes(face: Face) -> bool:
 *     return face.has_layout_glyph_classes
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_glyph_classes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":184
 *     return face.has_layout_glyph_classes
 * 
 * @deprecated("Face.has_layout_positioning")             # <<<<<<<<<<<<<<
 * def ot_layout_has_positioning(face: Face) -> bool:
 *     return face.has_layout_positioning
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_35ot_layout_has_positioning(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_35ot_layout_has_positioning = {"ot_layout_has_positioning", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_35ot_layout_has_positioning, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_35ot_layout_has_positioning(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_has_positioning (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 184, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 184, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_has_positioning", 0) < (0)) __PYX_ERR(0, 184, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_has_positioning", 1, 1, 1, i); __PYX_ERR(0, 184, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 184, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_has_positioning", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 184, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_positioning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 185, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_34ot_layout_has_positioning(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_34ot_layout_has_positioning(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_has_positioning", 0);

  /* "uharfbuzz/_harfbuzz.pyx":186
 * @deprecated("Face.has_layout_positioning")
 * def ot_layout_has_positioning(face: Face) -> bool:
 *     return face.has_layout_positioning             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_layout_substitution")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_layout_positioning); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":184
 *     return face.has_layout_glyph_classes
 * 
 * @deprecated("Face.has_layout_positioning")             # <<<<<<<<<<<<<<
 * def ot_layout_has_positioning(face: Face) -> bool:
 *     return face.has_layout_positioning
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_positioning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":188
 *     return face.has_layout_positioning
 * 
 * @deprecated("Face.has_layout_substitution")             # <<<<<<<<<<<<<<
 * def ot_layout_has_substitution(face: Face) -> bool:
 *     return face.has_layout_substitution
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_37ot_layout_has_substitution(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_37ot_layout_has_substitution = {"ot_layout_has_substitution", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_37ot_layout_has_substitution, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_37ot_layout_has_substitution(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_has_substitution (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 188, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 188, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_has_substitution", 0) < (0)) __PYX_ERR(0, 188, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_has_substitution", 1, 1, 1, i); __PYX_ERR(0, 188, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 188, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_has_substitution", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 188, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_substitution", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 189, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_36ot_layout_has_substitution(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_36ot_layout_has_substitution(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_has_substitution", 0);

  /* "uharfbuzz/_harfbuzz.pyx":190
 * @deprecated("Face.has_layout_substitution")
 * def ot_layout_has_substitution(face: Face) -> bool:
 *     return face.has_layout_substitution             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_layout_glyph_class()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_layout_substitution); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":188
 *     return face.has_layout_positioning
 * 
 * @deprecated("Face.has_layout_substitution")             # <<<<<<<<<<<<<<
 * def ot_layout_has_substitution(face: Face) -> bool:
 *     return face.has_layout_substitution
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_has_substitution", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":192
 *     return face.has_layout_substitution
 * 
 * @deprecated("Face.get_layout_glyph_class()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_glyph_class(face: Face, glyph: int) -> OTLayoutGlyphClass:
 *     return face.get_layout_glyph_class(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_39ot_layout_get_glyph_class(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_39ot_layout_get_glyph_class = {"ot_layout_get_glyph_class", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_39ot_layout_get_glyph_class, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_39ot_layout_get_glyph_class(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_layout_get_glyph_class (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 192, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 192, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 192, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_layout_get_glyph_class", 0) < (0)) __PYX_ERR(0, 192, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_layout_get_glyph_class", 1, 2, 2, i); __PYX_ERR(0, 192, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 192, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 192, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 193, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_layout_get_glyph_class", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 192, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_get_glyph_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 193, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 193, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_38ot_layout_get_glyph_class(__pyx_self, __pyx_v_face, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_38ot_layout_get_glyph_class(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_layout_get_glyph_class", 0);

  /* "uharfbuzz/_harfbuzz.pyx":194
 * @deprecated("Face.get_layout_glyph_class()")
 * def ot_layout_get_glyph_class(face: Face, glyph: int) -> OTLayoutGlyphClass:
 *     return face.get_layout_glyph_class(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_color_palettes")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_layout_glyph_class, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":192
 *     return face.has_layout_substitution
 * 
 * @deprecated("Face.get_layout_glyph_class()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_glyph_class(face: Face, glyph: int) -> OTLayoutGlyphClass:
 *     return face.get_layout_glyph_class(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_layout_get_glyph_class", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":196
 *     return face.get_layout_glyph_class(glyph)
 * 
 * @deprecated("Face.has_color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_has_palettes(face: Face) -> bool:
 *     return face.has_color_palettes
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_41ot_color_has_palettes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_41ot_color_has_palettes = {"ot_color_has_palettes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_41ot_color_has_palettes, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_41ot_color_has_palettes(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_has_palettes (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 196, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 196, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_has_palettes", 0) < (0)) __PYX_ERR(0, 196, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_has_palettes", 1, 1, 1, i); __PYX_ERR(0, 196, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 196, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_has_palettes", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 196, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_palettes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 197, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_40ot_color_has_palettes(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_40ot_color_has_palettes(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_has_palettes", 0);

  /* "uharfbuzz/_harfbuzz.pyx":198
 * @deprecated("Face.has_color_palettes")
 * def ot_color_has_palettes(face: Face) -> bool:
 *     return face.has_color_palettes             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.color_palettes")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_color_palettes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":196
 *     return face.get_layout_glyph_class(glyph)
 * 
 * @deprecated("Face.has_color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_has_palettes(face: Face) -> bool:
 *     return face.has_color_palettes
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_palettes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":200
 *     return face.has_color_palettes
 * 
 * @deprecated("Face.color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_count(face: Face) -> int:
 *     return hb_ot_color_palette_get_count(face._hb_face)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_43ot_color_palette_get_count(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_43ot_color_palette_get_count = {"ot_color_palette_get_count", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_43ot_color_palette_get_count, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_43ot_color_palette_get_count(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_palette_get_count (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 200, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 200, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_palette_get_count", 0) < (0)) __PYX_ERR(0, 200, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_count", 1, 1, 1, i); __PYX_ERR(0, 200, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 200, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_count", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 200, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 201, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_42ot_color_palette_get_count(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_42ot_color_palette_get_count(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_palette_get_count", 0);

  /* "uharfbuzz/_harfbuzz.pyx":202
 * @deprecated("Face.color_palettes")
 * def ot_color_palette_get_count(face: Face) -> int:
 *     return hb_ot_color_palette_get_count(face._hb_face)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_color_palette()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyLong_From_unsigned_int(hb_ot_color_palette_get_count(__pyx_v_face->_hb_face)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 0) < (0)) __PYX_ERR(0, 202, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":200
 *     return face.has_color_palettes
 * 
 * @deprecated("Face.color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_count(face: Face) -> int:
 *     return hb_ot_color_palette_get_count(face._hb_face)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":204
 *     return hb_ot_color_palette_get_count(face._hb_face)
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_flags(face: Face, palette_index: int) -> OTColorPaletteFlags:
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_45ot_color_palette_get_flags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_45ot_color_palette_get_flags = {"ot_color_palette_get_flags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_45ot_color_palette_get_flags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_45ot_color_palette_get_flags(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_palette_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_palette_get_flags (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_palette_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 204, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 204, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 204, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_palette_get_flags", 0) < (0)) __PYX_ERR(0, 204, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_flags", 1, 2, 2, i); __PYX_ERR(0, 204, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 204, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 204, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "palette_index", 0) < (0)) __PYX_ERR(0, 205, __pyx_L3_error)
    __pyx_v_palette_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_flags", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 204, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_flags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 205, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_palette_index), (&PyLong_Type), 0, "palette_index", 2))) __PYX_ERR(0, 205, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_44ot_color_palette_get_flags(__pyx_self, __pyx_v_face, __pyx_v_palette_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_44ot_color_palette_get_flags(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  unsigned int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_palette_get_flags", 0);

  /* "uharfbuzz/_harfbuzz.pyx":206
 * @deprecated("Face.get_color_palette()")
 * def ot_color_palette_get_flags(face: Face, palette_index: int) -> OTColorPaletteFlags:
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_color_palette()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_4 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 206, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_color_palette_flags_t(hb_ot_color_palette_get_flags(__pyx_v_face->_hb_face, __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = 1;
  #if CYTHON_UNPACK_METHODS
  if (unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    assert(__pyx_t_2);
    PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx__function);
    __Pyx_DECREF_SET(__pyx_t_3, __pyx__function);
    __pyx_t_6 = 0;
  }
  #endif
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_3, __pyx_callargs+__pyx_t_6, (2-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":204
 *     return hb_ot_color_palette_get_count(face._hb_face)
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_flags(face: Face, palette_index: int) -> OTColorPaletteFlags:
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
*/

  /* 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_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_flags", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":208
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_colors(face: Face, palette_index: int) -> List[Color]:
 *     cdef list ret = []
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_47ot_color_palette_get_colors(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_47ot_color_palette_get_colors = {"ot_color_palette_get_colors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_47ot_color_palette_get_colors, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_47ot_color_palette_get_colors(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_palette_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_palette_get_colors (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_palette_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 208, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 208, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 208, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_palette_get_colors", 0) < (0)) __PYX_ERR(0, 208, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_colors", 1, 2, 2, i); __PYX_ERR(0, 208, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 208, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 208, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "palette_index", 0) < (0)) __PYX_ERR(0, 209, __pyx_L3_error)
    __pyx_v_palette_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_colors", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 208, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_colors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 209, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_palette_index), (&PyLong_Type), 0, "palette_index", 2))) __PYX_ERR(0, 209, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_46ot_color_palette_get_colors(__pyx_self, __pyx_v_face, __pyx_v_palette_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_46ot_color_palette_get_colors(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index) {
  PyObject *__pyx_v_ret = 0;
  unsigned int __pyx_v_i;
  unsigned int __pyx_v_start_offset;
  unsigned int __pyx_v_color_count;
  hb_color_t __pyx_v_colors[128];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  unsigned int __pyx_t_3;
  unsigned int __pyx_t_4;
  unsigned int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  size_t __pyx_t_9;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_palette_get_colors", 0);

  /* "uharfbuzz/_harfbuzz.pyx":210
 * @deprecated("Face.get_color_palette()")
 * def ot_color_palette_get_colors(face: Face, palette_index: int) -> List[Color]:
 *     cdef list ret = []             # <<<<<<<<<<<<<<
 *     cdef unsigned int i
 *     cdef unsigned int start_offset = 0
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 210, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_ret = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":212
 *     cdef list ret = []
 *     cdef unsigned int i
 *     cdef unsigned int start_offset = 0             # <<<<<<<<<<<<<<
 *     cdef unsigned int color_count = STATIC_ARRAY_SIZE
 *     cdef hb_color_t colors[STATIC_ARRAY_SIZE]
*/
  __pyx_v_start_offset = 0;

  /* "uharfbuzz/_harfbuzz.pyx":213
 *     cdef unsigned int i
 *     cdef unsigned int start_offset = 0
 *     cdef unsigned int color_count = STATIC_ARRAY_SIZE             # <<<<<<<<<<<<<<
 *     cdef hb_color_t colors[STATIC_ARRAY_SIZE]
 *     while color_count == STATIC_ARRAY_SIZE:
*/
  __pyx_v_color_count = 0x80;

  /* "uharfbuzz/_harfbuzz.pyx":215
 *     cdef unsigned int color_count = STATIC_ARRAY_SIZE
 *     cdef hb_color_t colors[STATIC_ARRAY_SIZE]
 *     while color_count == STATIC_ARRAY_SIZE:             # <<<<<<<<<<<<<<
 *         hb_ot_color_palette_get_colors(face._hb_face, palette_index, start_offset, &color_count, colors)
 *         for i in range(color_count):
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_color_count == 0x80);
    if (!__pyx_t_2) break;

    /* "uharfbuzz/_harfbuzz.pyx":216
 *     cdef hb_color_t colors[STATIC_ARRAY_SIZE]
 *     while color_count == STATIC_ARRAY_SIZE:
 *         hb_ot_color_palette_get_colors(face._hb_face, palette_index, start_offset, &color_count, colors)             # <<<<<<<<<<<<<<
 *         for i in range(color_count):
 *             ret.append(Color.from_int(colors[i]))
*/
    __pyx_t_3 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_3 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 216, __pyx_L1_error)
    (void)(hb_ot_color_palette_get_colors(__pyx_v_face->_hb_face, __pyx_t_3, __pyx_v_start_offset, (&__pyx_v_color_count), __pyx_v_colors));

    /* "uharfbuzz/_harfbuzz.pyx":217
 *     while color_count == STATIC_ARRAY_SIZE:
 *         hb_ot_color_palette_get_colors(face._hb_face, palette_index, start_offset, &color_count, colors)
 *         for i in range(color_count):             # <<<<<<<<<<<<<<
 *             ret.append(Color.from_int(colors[i]))
 *     return ret
*/
    __pyx_t_3 = __pyx_v_color_count;
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_i = __pyx_t_5;

      /* "uharfbuzz/_harfbuzz.pyx":218
 *         hb_ot_color_palette_get_colors(face._hb_face, palette_index, start_offset, &color_count, colors)
 *         for i in range(color_count):
 *             ret.append(Color.from_int(colors[i]))             # <<<<<<<<<<<<<<
 *     return ret
 * 
*/
      __pyx_t_6 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_from_int); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyLong_From_uint32_t((__pyx_v_colors[__pyx_v_i])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_8);
        assert(__pyx_t_6);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_8, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
        __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
      }
      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_ret, __pyx_t_1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 218, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    }
  }

  /* "uharfbuzz/_harfbuzz.pyx":219
 *         for i in range(color_count):
 *             ret.append(Color.from_int(colors[i]))
 *     return ret             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_color_palette()")
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_ret);
  __pyx_r = __pyx_v_ret;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":208
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_colors(face: Face, palette_index: int) -> List[Color]:
 *     cdef list ret = []
*/

  /* 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_8);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_colors", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_ret);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":221
 *     return ret
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_name_id(face: Face, palette_index: int) -> int | None:
 *     cdef hb_ot_name_id_t name_id
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_49ot_color_palette_get_name_id(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_49ot_color_palette_get_name_id = {"ot_color_palette_get_name_id", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_49ot_color_palette_get_name_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_49ot_color_palette_get_name_id(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_palette_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_palette_get_name_id (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_palette_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 221, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 221, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 221, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_palette_get_name_id", 0) < (0)) __PYX_ERR(0, 221, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_name_id", 1, 2, 2, i); __PYX_ERR(0, 221, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 221, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 221, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "palette_index", 0) < (0)) __PYX_ERR(0, 222, __pyx_L3_error)
    __pyx_v_palette_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_palette_get_name_id", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 221, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 222, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_palette_index), (&PyLong_Type), 0, "palette_index", 2))) __PYX_ERR(0, 222, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_48ot_color_palette_get_name_id(__pyx_self, __pyx_v_face, __pyx_v_palette_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_48ot_color_palette_get_name_id(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_palette_index) {
  hb_ot_name_id_t __pyx_v_name_id;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  unsigned int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_palette_get_name_id", 0);

  /* "uharfbuzz/_harfbuzz.pyx":224
 * def ot_color_palette_get_name_id(face: Face, palette_index: int) -> int | None:
 *     cdef hb_ot_name_id_t name_id
 *     name_id = hb_ot_color_palette_get_name_id(face._hb_face, palette_index)             # <<<<<<<<<<<<<<
 *     if name_id == HB_OT_NAME_ID_INVALID:
 *         return None
*/
  __pyx_t_1 = __Pyx_PyLong_As_unsigned_int(__pyx_v_palette_index); if (unlikely((__pyx_t_1 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 224, __pyx_L1_error)
  __pyx_v_name_id = hb_ot_color_palette_get_name_id(__pyx_v_face->_hb_face, __pyx_t_1);

  /* "uharfbuzz/_harfbuzz.pyx":225
 *     cdef hb_ot_name_id_t name_id
 *     name_id = hb_ot_color_palette_get_name_id(face._hb_face, palette_index)
 *     if name_id == HB_OT_NAME_ID_INVALID:             # <<<<<<<<<<<<<<
 *         return None
 *     return name_id
*/
  __pyx_t_2 = (__pyx_v_name_id == HB_OT_NAME_ID_INVALID);
  if (__pyx_t_2) {

    /* "uharfbuzz/_harfbuzz.pyx":226
 *     name_id = hb_ot_color_palette_get_name_id(face._hb_face, palette_index)
 *     if name_id == HB_OT_NAME_ID_INVALID:
 *         return None             # <<<<<<<<<<<<<<
 *     return name_id
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "uharfbuzz/_harfbuzz.pyx":225
 *     cdef hb_ot_name_id_t name_id
 *     name_id = hb_ot_color_palette_get_name_id(face._hb_face, palette_index)
 *     if name_id == HB_OT_NAME_ID_INVALID:             # <<<<<<<<<<<<<<
 *         return None
 *     return name_id
*/
  }

  /* "uharfbuzz/_harfbuzz.pyx":227
 *     if name_id == HB_OT_NAME_ID_INVALID:
 *         return None
 *     return name_id             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.color_palette_color_get_name_id()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyLong_From_hb_ot_name_id_t(__pyx_v_name_id); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (__Pyx_PyInt_FromNumber(&__pyx_t_3, NULL, 0) < (0)) __PYX_ERR(0, 227, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":221
 *     return ret
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_name_id(face: Face, palette_index: int) -> int | None:
 *     cdef hb_ot_name_id_t name_id
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":229
 *     return name_id
 * 
 * @deprecated("Face.color_palette_color_get_name_id()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_color_get_name_id(face: Face, color_index: int) -> int | None:
 *     return face.color_palette_color_get_name_id(color_index)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_51ot_color_palette_color_get_name_id(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_51ot_color_palette_color_get_name_id = {"ot_color_palette_color_get_name_id", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_51ot_color_palette_color_get_name_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_51ot_color_palette_color_get_name_id(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_color_index = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_palette_color_get_name_id (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_color_index,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 229, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 229, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 229, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_palette_color_get_name_id", 0) < (0)) __PYX_ERR(0, 229, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_palette_color_get_name_id", 1, 2, 2, i); __PYX_ERR(0, 229, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 229, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 229, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "color_index", 0) < (0)) __PYX_ERR(0, 230, __pyx_L3_error)
    __pyx_v_color_index = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_palette_color_get_name_id", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 229, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_color_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 230, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_color_index), (&PyLong_Type), 0, "color_index", 2))) __PYX_ERR(0, 230, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_50ot_color_palette_color_get_name_id(__pyx_self, __pyx_v_face, __pyx_v_color_index);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_50ot_color_palette_color_get_name_id(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_color_index) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_palette_color_get_name_id", 0);

  /* "uharfbuzz/_harfbuzz.pyx":231
 * @deprecated("Face.color_palette_color_get_name_id()")
 * def ot_color_palette_color_get_name_id(face: Face, color_index: int) -> int | None:
 *     return face.color_palette_color_get_name_id(color_index)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_color_layers")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_color_index};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_color_palette_color_get_name_id, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 231, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":229
 *     return name_id
 * 
 * @deprecated("Face.color_palette_color_get_name_id()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_color_get_name_id(face: Face, color_index: int) -> int | None:
 *     return face.color_palette_color_get_name_id(color_index)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_palette_color_get_name_id", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":233
 *     return face.color_palette_color_get_name_id(color_index)
 * 
 * @deprecated("Face.has_color_layers")             # <<<<<<<<<<<<<<
 * def ot_color_has_layers(face: Face) -> bool:
 *     return face.has_color_layers
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_53ot_color_has_layers(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_53ot_color_has_layers = {"ot_color_has_layers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_53ot_color_has_layers, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_53ot_color_has_layers(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_has_layers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 233, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 233, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_has_layers", 0) < (0)) __PYX_ERR(0, 233, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_has_layers", 1, 1, 1, i); __PYX_ERR(0, 233, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 233, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_has_layers", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 233, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 234, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_52ot_color_has_layers(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_52ot_color_has_layers(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_has_layers", 0);

  /* "uharfbuzz/_harfbuzz.pyx":235
 * @deprecated("Face.has_color_layers")
 * def ot_color_has_layers(face: Face) -> bool:
 *     return face.has_color_layers             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_glyph_color_layers()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_color_layers); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":233
 *     return face.color_palette_color_get_name_id(color_index)
 * 
 * @deprecated("Face.has_color_layers")             # <<<<<<<<<<<<<<
 * def ot_color_has_layers(face: Face) -> bool:
 *     return face.has_color_layers
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":237
 *     return face.has_color_layers
 * 
 * @deprecated("Face.get_glyph_color_layers()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_layers(face: Face, glyph: int) -> List[OTColorLayer]:
 *     return face.get_glyph_color_layers(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_55ot_color_glyph_get_layers(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_55ot_color_glyph_get_layers = {"ot_color_glyph_get_layers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_55ot_color_glyph_get_layers, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_55ot_color_glyph_get_layers(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_glyph_get_layers (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 237, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 237, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_glyph_get_layers", 0) < (0)) __PYX_ERR(0, 237, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_layers", 1, 2, 2, i); __PYX_ERR(0, 237, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 237, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 237, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 238, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_layers", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 237, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 238, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 238, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_54ot_color_glyph_get_layers(__pyx_self, __pyx_v_face, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_54ot_color_glyph_get_layers(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_glyph_get_layers", 0);

  /* "uharfbuzz/_harfbuzz.pyx":239
 * @deprecated("Face.get_glyph_color_layers()")
 * def ot_color_glyph_get_layers(face: Face, glyph: int) -> List[OTColorLayer]:
 *     return face.get_glyph_color_layers(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_color_paint")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_glyph_color_layers, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 239, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":237
 *     return face.has_color_layers
 * 
 * @deprecated("Face.get_glyph_color_layers()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_layers(face: Face, glyph: int) -> List[OTColorLayer]:
 *     return face.get_glyph_color_layers(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_layers", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":241
 *     return face.get_glyph_color_layers(glyph)
 * 
 * @deprecated("Face.has_color_paint")             # <<<<<<<<<<<<<<
 * def ot_color_has_paint(face: Face) -> bool:
 *     return face.has_color_paint
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_57ot_color_has_paint(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_57ot_color_has_paint = {"ot_color_has_paint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_57ot_color_has_paint, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_57ot_color_has_paint(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_has_paint (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 241, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 241, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_has_paint", 0) < (0)) __PYX_ERR(0, 241, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_has_paint", 1, 1, 1, i); __PYX_ERR(0, 241, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 241, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_has_paint", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 241, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 242, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_56ot_color_has_paint(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_56ot_color_has_paint(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_has_paint", 0);

  /* "uharfbuzz/_harfbuzz.pyx":243
 * @deprecated("Face.has_color_paint")
 * def ot_color_has_paint(face: Face) -> bool:
 *     return face.has_color_paint             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.glyph_has_color_paint()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_color_paint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 243, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":241
 *     return face.get_glyph_color_layers(glyph)
 * 
 * @deprecated("Face.has_color_paint")             # <<<<<<<<<<<<<<
 * def ot_color_has_paint(face: Face) -> bool:
 *     return face.has_color_paint
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":245
 *     return face.has_color_paint
 * 
 * @deprecated("Face.glyph_has_color_paint()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_has_paint(face: Face, glyph: int) -> bool:
 *     return face.glyph_has_color_paint(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_59ot_color_glyph_has_paint(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_59ot_color_glyph_has_paint = {"ot_color_glyph_has_paint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_59ot_color_glyph_has_paint, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_59ot_color_glyph_has_paint(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_glyph_has_paint (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 245, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 245, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 245, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_glyph_has_paint", 0) < (0)) __PYX_ERR(0, 245, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_glyph_has_paint", 1, 2, 2, i); __PYX_ERR(0, 245, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 245, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 245, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 246, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_glyph_has_paint", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 245, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_has_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 246, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 246, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_58ot_color_glyph_has_paint(__pyx_self, __pyx_v_face, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_58ot_color_glyph_has_paint(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_glyph_has_paint", 0);

  /* "uharfbuzz/_harfbuzz.pyx":247
 * @deprecated("Face.glyph_has_color_paint()")
 * def ot_color_glyph_has_paint(face: Face, glyph: int) -> bool:
 *     return face.glyph_has_color_paint(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_color_svg")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_glyph_has_color_paint, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":245
 *     return face.has_color_paint
 * 
 * @deprecated("Face.glyph_has_color_paint()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_has_paint(face: Face, glyph: int) -> bool:
 *     return face.glyph_has_color_paint(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_has_paint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":249
 *     return face.glyph_has_color_paint(glyph)
 * 
 * @deprecated("Face.has_color_svg")             # <<<<<<<<<<<<<<
 * def ot_color_has_svg(face: Face) -> bool:
 *     return face.has_color_svg
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_61ot_color_has_svg(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_61ot_color_has_svg = {"ot_color_has_svg", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_61ot_color_has_svg, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_61ot_color_has_svg(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_has_svg (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 249, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 249, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_has_svg", 0) < (0)) __PYX_ERR(0, 249, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_has_svg", 1, 1, 1, i); __PYX_ERR(0, 249, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 249, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_has_svg", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 249, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 250, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_60ot_color_has_svg(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_60ot_color_has_svg(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_has_svg", 0);

  /* "uharfbuzz/_harfbuzz.pyx":251
 * @deprecated("Face.has_color_svg")
 * def ot_color_has_svg(face: Face) -> bool:
 *     return face.has_color_svg             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.get_glyph_color_svg()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_color_svg); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":249
 *     return face.glyph_has_color_paint(glyph)
 * 
 * @deprecated("Face.has_color_svg")             # <<<<<<<<<<<<<<
 * def ot_color_has_svg(face: Face) -> bool:
 *     return face.has_color_svg
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":253
 *     return face.has_color_svg
 * 
 * @deprecated("Face.get_glyph_color_svg()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_svg(face: Face, glyph: int) -> Blob:
 *     return face.get_glyph_color_svg(glyph)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_63ot_color_glyph_get_svg(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_63ot_color_glyph_get_svg = {"ot_color_glyph_get_svg", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_63ot_color_glyph_get_svg, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_63ot_color_glyph_get_svg(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_glyph_get_svg (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 253, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 253, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 253, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_glyph_get_svg", 0) < (0)) __PYX_ERR(0, 253, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_svg", 1, 2, 2, i); __PYX_ERR(0, 253, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 253, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 253, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 254, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_svg", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 253, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 254, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 254, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_62ot_color_glyph_get_svg(__pyx_self, __pyx_v_face, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_62ot_color_glyph_get_svg(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_glyph_get_svg", 0);

  /* "uharfbuzz/_harfbuzz.pyx":255
 * @deprecated("Face.get_glyph_color_svg()")
 * def ot_color_glyph_get_svg(face: Face, glyph: int) -> Blob:
 *     return face.get_glyph_color_svg(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.has_color_png")
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_glyph_color_svg, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob))))) __PYX_ERR(0, 255, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":253
 *     return face.has_color_svg
 * 
 * @deprecated("Face.get_glyph_color_svg()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_svg(face: Face, glyph: int) -> Blob:
 *     return face.get_glyph_color_svg(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_svg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":257
 *     return face.get_glyph_color_svg(glyph)
 * 
 * @deprecated("Face.has_color_png")             # <<<<<<<<<<<<<<
 * def ot_color_has_png(face: Face) -> bool:
 *     return face.has_color_png
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_65ot_color_has_png(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_65ot_color_has_png = {"ot_color_has_png", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_65ot_color_has_png, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_65ot_color_has_png(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_has_png (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 257, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 257, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_has_png", 0) < (0)) __PYX_ERR(0, 257, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_has_png", 1, 1, 1, i); __PYX_ERR(0, 257, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 257, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_has_png", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 257, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 258, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_64ot_color_has_png(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_64ot_color_has_png(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_has_png", 0);

  /* "uharfbuzz/_harfbuzz.pyx":259
 * @deprecated("Face.has_color_png")
 * def ot_color_has_png(face: Face) -> bool:
 *     return face.has_color_png             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_glyph_color_png()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_color_png); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":257
 *     return face.get_glyph_color_svg(glyph)
 * 
 * @deprecated("Face.has_color_png")             # <<<<<<<<<<<<<<
 * def ot_color_has_png(face: Face) -> bool:
 *     return face.has_color_png
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_has_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":261
 *     return face.has_color_png
 * 
 * @deprecated("Font.get_glyph_color_png()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_png(font: Font, glyph: int) -> Blob:
 *     return font.get_glyph_color_png(glyph)
*/

/* Python wrapper */
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_67ot_color_glyph_get_png(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_67ot_color_glyph_get_png = {"ot_color_glyph_get_png", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_67ot_color_glyph_get_png, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pw_9uharfbuzz_9_harfbuzz_67ot_color_glyph_get_png(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_color_glyph_get_png (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 261, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 261, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 261, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_color_glyph_get_png", 0) < (0)) __PYX_ERR(0, 261, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_png", 1, 2, 2, i); __PYX_ERR(0, 261, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 261, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 261, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 262, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_color_glyph_get_png", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 261, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 262, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 262, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_66ot_color_glyph_get_png(__pyx_self, __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_pf_9uharfbuzz_9_harfbuzz_66ot_color_glyph_get_png(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_color_glyph_get_png", 0);

  /* "uharfbuzz/_harfbuzz.pyx":263
 * @deprecated("Font.get_glyph_color_png()")
 * def ot_color_glyph_get_png(font: Font, glyph: int) -> Blob:
 *     return font.get_glyph_color_png(glyph)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_glyph_color_png, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob))))) __PYX_ERR(0, 263, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":261
 *     return face.has_color_png
 * 
 * @deprecated("Font.get_glyph_color_png()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_png(font: Font, glyph: int) -> Blob:
 *     return font.get_glyph_color_png(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_color_glyph_get_png", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":266
 * 
 * 
 * @deprecated("Face.has_math_data")             # <<<<<<<<<<<<<<
 * def ot_math_has_data(face: Face) -> bool:
 *     return face.has_math_data
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_69ot_math_has_data(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_69ot_math_has_data = {"ot_math_has_data", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_69ot_math_has_data, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_69ot_math_has_data(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_has_data (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 266, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 266, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_has_data", 0) < (0)) __PYX_ERR(0, 266, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_has_data", 1, 1, 1, i); __PYX_ERR(0, 266, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 266, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_has_data", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 266, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_has_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 267, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_68ot_math_has_data(__pyx_self, __pyx_v_face);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_68ot_math_has_data(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_has_data", 0);

  /* "uharfbuzz/_harfbuzz.pyx":268
 * @deprecated("Face.has_math_data")
 * def ot_math_has_data(face: Face) -> bool:
 *     return face.has_math_data             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_constant()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_n_u_has_math_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":266
 * 
 * 
 * @deprecated("Face.has_math_data")             # <<<<<<<<<<<<<<
 * def ot_math_has_data(face: Face) -> bool:
 *     return face.has_math_data
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_has_data", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":270
 *     return face.has_math_data
 * 
 * @deprecated("Font.get_math_constant()")             # <<<<<<<<<<<<<<
 * def ot_math_get_constant(font: Font, constant: OTMathConstant) -> int:
 *     return font.get_math_constant(constant)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_71ot_math_get_constant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_71ot_math_get_constant = {"ot_math_get_constant", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_71ot_math_get_constant, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_71ot_math_get_constant(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_constant = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_constant (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_constant,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 270, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 270, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 270, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_constant", 0) < (0)) __PYX_ERR(0, 270, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_constant", 1, 2, 2, i); __PYX_ERR(0, 270, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 270, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 270, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    __pyx_v_constant = values[1];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_constant", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 270, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_constant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 271, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_70ot_math_get_constant(__pyx_self, __pyx_v_font, __pyx_v_constant);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_70ot_math_get_constant(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_constant) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_constant", 0);

  /* "uharfbuzz/_harfbuzz.pyx":272
 * @deprecated("Font.get_math_constant()")
 * def ot_math_get_constant(font: Font, constant: OTMathConstant) -> int:
 *     return font.get_math_constant(constant)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_italics_correction()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_constant};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_constant, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 272, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":270
 *     return face.has_math_data
 * 
 * @deprecated("Font.get_math_constant()")             # <<<<<<<<<<<<<<
 * def ot_math_get_constant(font: Font, constant: OTMathConstant) -> int:
 *     return font.get_math_constant(constant)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_constant", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":274
 *     return font.get_math_constant(constant)
 * 
 * @deprecated("Font.get_math_glyph_italics_correction()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_italics_correction(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_italics_correction(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_73ot_math_get_glyph_italics_correction(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_73ot_math_get_glyph_italics_correction = {"ot_math_get_glyph_italics_correction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_73ot_math_get_glyph_italics_correction, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_73ot_math_get_glyph_italics_correction(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_italics_correction (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 274, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 274, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 274, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_italics_correction", 0) < (0)) __PYX_ERR(0, 274, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_italics_correction", 1, 2, 2, i); __PYX_ERR(0, 274, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 274, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 274, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 275, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_italics_correction", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 274, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_italics_correction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 275, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 275, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_72ot_math_get_glyph_italics_correction(__pyx_self, __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_72ot_math_get_glyph_italics_correction(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_italics_correction", 0);

  /* "uharfbuzz/_harfbuzz.pyx":276
 * @deprecated("Font.get_math_glyph_italics_correction()")
 * def ot_math_get_glyph_italics_correction(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_italics_correction(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_top_accent_attachment()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_italics_correctio, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 276, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":274
 *     return font.get_math_constant(constant)
 * 
 * @deprecated("Font.get_math_glyph_italics_correction()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_italics_correction(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_italics_correction(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_italics_correction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":278
 *     return font.get_math_glyph_italics_correction(glyph)
 * 
 * @deprecated("Font.get_math_glyph_top_accent_attachment()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_top_accent_attachment(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_top_accent_attachment(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_75ot_math_get_glyph_top_accent_attachment(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_75ot_math_get_glyph_top_accent_attachment = {"ot_math_get_glyph_top_accent_attachment", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_75ot_math_get_glyph_top_accent_attachment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_75ot_math_get_glyph_top_accent_attachment(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_top_accent_attachment (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 278, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 278, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_top_accent_attachment", 0) < (0)) __PYX_ERR(0, 278, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_top_accent_attachment", 1, 2, 2, i); __PYX_ERR(0, 278, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 278, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 278, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 279, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_top_accent_attachment", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 278, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_top_accent_attachment", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 279, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 279, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_74ot_math_get_glyph_top_accent_attachment(__pyx_self, __pyx_v_font, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_74ot_math_get_glyph_top_accent_attachment(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_top_accent_attachment", 0);

  /* "uharfbuzz/_harfbuzz.pyx":280
 * @deprecated("Font.get_math_glyph_top_accent_attachment()")
 * def ot_math_get_glyph_top_accent_attachment(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_top_accent_attachment(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Face.is_glyph_extended_math_shape()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_top_accent_attach, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 280, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 280, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":278
 *     return font.get_math_glyph_italics_correction(glyph)
 * 
 * @deprecated("Font.get_math_glyph_top_accent_attachment()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_top_accent_attachment(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_top_accent_attachment(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_top_accent_attachment", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":282
 *     return font.get_math_glyph_top_accent_attachment(glyph)
 * 
 * @deprecated("Face.is_glyph_extended_math_shape()")             # <<<<<<<<<<<<<<
 * def ot_math_is_glyph_extended_shape(face: Face, glyph: int) -> bool:
 *     return face.is_glyph_extended_math_shape(glyph)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_77ot_math_is_glyph_extended_shape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_77ot_math_is_glyph_extended_shape = {"ot_math_is_glyph_extended_shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_77ot_math_is_glyph_extended_shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_77ot_math_is_glyph_extended_shape(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face = 0;
  PyObject *__pyx_v_glyph = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_is_glyph_extended_shape (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_face,&__pyx_mstate_global->__pyx_n_u_glyph,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 282, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 282, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 282, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_is_glyph_extended_shape", 0) < (0)) __PYX_ERR(0, 282, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_is_glyph_extended_shape", 1, 2, 2, i); __PYX_ERR(0, 282, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 282, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 282, __pyx_L3_error)
    }
    __pyx_v_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 283, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_is_glyph_extended_shape", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 282, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_is_glyph_extended_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_face), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, 0, "face", 0))) __PYX_ERR(0, 283, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 283, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_76ot_math_is_glyph_extended_shape(__pyx_self, __pyx_v_face, __pyx_v_glyph);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_76ot_math_is_glyph_extended_shape(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *__pyx_v_face, PyObject *__pyx_v_glyph) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_is_glyph_extended_shape", 0);

  /* "uharfbuzz/_harfbuzz.pyx":284
 * @deprecated("Face.is_glyph_extended_math_shape()")
 * def ot_math_is_glyph_extended_shape(face: Face, glyph: int) -> bool:
 *     return face.is_glyph_extended_math_shape(glyph)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_min_connector_overlap()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_face);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_glyph};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_is_glyph_extended_math_shape, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 284, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":282
 *     return font.get_math_glyph_top_accent_attachment(glyph)
 * 
 * @deprecated("Face.is_glyph_extended_math_shape()")             # <<<<<<<<<<<<<<
 * def ot_math_is_glyph_extended_shape(face: Face, glyph: int) -> bool:
 *     return face.is_glyph_extended_math_shape(glyph)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_is_glyph_extended_shape", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":286
 *     return face.is_glyph_extended_math_shape(glyph)
 * 
 * @deprecated("Font.get_math_min_connector_overlap()")             # <<<<<<<<<<<<<<
 * def ot_math_get_min_connector_overlap(font: Font, direction: str) -> int:
 *     return font.get_math_min_connector_overlap(direction)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_79ot_math_get_min_connector_overlap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_79ot_math_get_min_connector_overlap = {"ot_math_get_min_connector_overlap", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_79ot_math_get_min_connector_overlap, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_79ot_math_get_min_connector_overlap(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[2] = {0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_min_connector_overlap (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 286, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 286, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 286, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_min_connector_overlap", 0) < (0)) __PYX_ERR(0, 286, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_min_connector_overlap", 1, 2, 2, i); __PYX_ERR(0, 286, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 2)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 286, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 286, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    __pyx_v_direction = ((PyObject*)values[1]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_min_connector_overlap", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 286, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_min_connector_overlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 287, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(0, 287, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_78ot_math_get_min_connector_overlap(__pyx_self, __pyx_v_font, __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_78ot_math_get_min_connector_overlap(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_direction) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_min_connector_overlap", 0);

  /* "uharfbuzz/_harfbuzz.pyx":288
 * @deprecated("Font.get_math_min_connector_overlap()")
 * def ot_math_get_min_connector_overlap(font: Font, direction: str) -> int:
 *     return font.get_math_min_connector_overlap(direction)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_kerning()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_v_direction};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_min_connector_overlap, __pyx_callargs+__pyx_t_3, (2-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 288, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":286
 *     return face.is_glyph_extended_math_shape(glyph)
 * 
 * @deprecated("Font.get_math_min_connector_overlap()")             # <<<<<<<<<<<<<<
 * def ot_math_get_min_connector_overlap(font: Font, direction: str) -> int:
 *     return font.get_math_min_connector_overlap(direction)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_min_connector_overlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":290
 *     return font.get_math_min_connector_overlap(direction)
 * 
 * @deprecated("Font.get_math_glyph_kerning()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kerning(font: Font,
 *                               glyph: int,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_81ot_math_get_glyph_kerning(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_81ot_math_get_glyph_kerning = {"ot_math_get_glyph_kerning", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_81ot_math_get_glyph_kerning, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_81ot_math_get_glyph_kerning(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_kern = 0;
  int __pyx_v_correction_height;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[4] = {0,0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_kerning (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_kern,&__pyx_mstate_global->__pyx_n_u_correction_height,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 290, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  4:
        values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 290, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 290, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 290, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 290, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_kerning", 0) < (0)) __PYX_ERR(0, 290, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 4; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_kerning", 1, 4, 4, i); __PYX_ERR(0, 290, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 4)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 290, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 290, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 290, __pyx_L3_error)
      values[3] = __Pyx_ArgRef_FASTCALL(__pyx_args, 3);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[3])) __PYX_ERR(0, 290, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 292, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
    __pyx_v_kern = values[2];
    __pyx_v_correction_height = __Pyx_PyLong_As_int(values[3]); if (unlikely((__pyx_v_correction_height == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 294, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_kerning", 1, 4, 4, __pyx_nargs); __PYX_ERR(0, 290, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_kerning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 291, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 292, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_80ot_math_get_glyph_kerning(__pyx_self, __pyx_v_font, __pyx_v_glyph, __pyx_v_kern, __pyx_v_correction_height);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_80ot_math_get_glyph_kerning(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern, int __pyx_v_correction_height) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_kerning", 0);

  /* "uharfbuzz/_harfbuzz.pyx":295
 *                               kern: OTMathKern,
 *                               int correction_height) -> int:
 *     return font.get_math_glyph_kerning(glyph, kern, correction_height)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_kernings()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_correction_height); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 295, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[4] = {__pyx_t_2, __pyx_v_glyph, __pyx_v_kern, __pyx_t_3};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_kerning, __pyx_callargs+__pyx_t_4, (4-__pyx_t_4) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (__Pyx_PyInt_FromNumber(&__pyx_t_1, NULL, 1) < (0)) __PYX_ERR(0, 295, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":290
 *     return font.get_math_min_connector_overlap(direction)
 * 
 * @deprecated("Font.get_math_glyph_kerning()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kerning(font: Font,
 *                               glyph: int,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_kerning", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":297
 *     return font.get_math_glyph_kerning(glyph, kern, correction_height)
 * 
 * @deprecated("Font.get_math_glyph_kernings()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kernings(font: Font,
 *                                glyph: int,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_83ot_math_get_glyph_kernings(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_83ot_math_get_glyph_kernings = {"ot_math_get_glyph_kernings", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_83ot_math_get_glyph_kernings, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_83ot_math_get_glyph_kernings(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_kern = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_kernings (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_kern,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 297, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 297, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 297, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 297, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_kernings", 0) < (0)) __PYX_ERR(0, 297, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_kernings", 1, 3, 3, i); __PYX_ERR(0, 297, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 297, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 297, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 297, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 299, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
    __pyx_v_kern = values[2];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_kernings", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 297, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_kernings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 298, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 299, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_82ot_math_get_glyph_kernings(__pyx_self, __pyx_v_font, __pyx_v_glyph, __pyx_v_kern);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_82ot_math_get_glyph_kernings(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_kern) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_kernings", 0);

  /* "uharfbuzz/_harfbuzz.pyx":301
 *                                glyph: int,
 *                                kern: OTMathKern) -> List[OTMathKernEntry]:
 *     return font.get_math_glyph_kernings(glyph, kern)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_variants()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_glyph, __pyx_v_kern};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_kernings, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 301, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":297
 *     return font.get_math_glyph_kerning(glyph, kern, correction_height)
 * 
 * @deprecated("Font.get_math_glyph_kernings()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kernings(font: Font,
 *                                glyph: int,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_kernings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":303
 *     return font.get_math_glyph_kernings(glyph, kern)
 * 
 * @deprecated("Font.get_math_glyph_variants()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_variants(font: Font, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *     return font.get_math_glyph_variants(glyph, direction)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_85ot_math_get_glyph_variants(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_85ot_math_get_glyph_variants = {"ot_math_get_glyph_variants", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_85ot_math_get_glyph_variants, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_85ot_math_get_glyph_variants(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_variants (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 303, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 303, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 303, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 303, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_variants", 0) < (0)) __PYX_ERR(0, 303, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_variants", 1, 3, 3, i); __PYX_ERR(0, 303, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 303, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 303, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 303, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 304, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
    __pyx_v_direction = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_variants", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 303, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_variants", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 304, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 304, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(0, 304, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_84ot_math_get_glyph_variants(__pyx_self, __pyx_v_font, __pyx_v_glyph, __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_84ot_math_get_glyph_variants(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_variants", 0);

  /* "uharfbuzz/_harfbuzz.pyx":305
 * @deprecated("Font.get_math_glyph_variants()")
 * def ot_math_get_glyph_variants(font: Font, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *     return font.get_math_glyph_variants(glyph, direction)             # <<<<<<<<<<<<<<
 * 
 * @deprecated("Font.get_math_glyph_assembly()")
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_glyph, __pyx_v_direction};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_variants, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(0, 305, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":303
 *     return font.get_math_glyph_kernings(glyph, kern)
 * 
 * @deprecated("Font.get_math_glyph_variants()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_variants(font: Font, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *     return font.get_math_glyph_variants(glyph, direction)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_variants", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":307
 *     return font.get_math_glyph_variants(glyph, direction)
 * 
 * @deprecated("Font.get_math_glyph_assembly()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_assembly(font: Font,
 *                                glyph: int,
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_87ot_math_get_glyph_assembly(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_87ot_math_get_glyph_assembly = {"ot_math_get_glyph_assembly", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_87ot_math_get_glyph_assembly, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_87ot_math_get_glyph_assembly(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  PyObject *__pyx_v_glyph = 0;
  PyObject *__pyx_v_direction = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[3] = {0,0,0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_math_get_glyph_assembly (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,&__pyx_mstate_global->__pyx_n_u_glyph,&__pyx_mstate_global->__pyx_n_u_direction,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 307, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  3:
        values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 307, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  2:
        values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 307, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 307, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_math_get_glyph_assembly", 0) < (0)) __PYX_ERR(0, 307, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_assembly", 1, 3, 3, i); __PYX_ERR(0, 307, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 3)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 307, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 307, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(0, 307, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
    if (__Pyx_PyInt_FromNumber(&values[1], "glyph", 0) < (0)) __PYX_ERR(0, 309, __pyx_L3_error)
    __pyx_v_glyph = ((PyObject*)values[1]);
    __pyx_v_direction = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_math_get_glyph_assembly", 1, 3, 3, __pyx_nargs); __PYX_ERR(0, 307, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_assembly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 308, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_glyph), (&PyLong_Type), 0, "glyph", 2))) __PYX_ERR(0, 309, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_direction), (&PyUnicode_Type), 0, "direction", 2))) __PYX_ERR(0, 310, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_86ot_math_get_glyph_assembly(__pyx_self, __pyx_v_font, __pyx_v_glyph, __pyx_v_direction);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_86ot_math_get_glyph_assembly(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font, PyObject *__pyx_v_glyph, PyObject *__pyx_v_direction) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  size_t __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ot_math_get_glyph_assembly", 0);

  /* "uharfbuzz/_harfbuzz.pyx":311
 *                                glyph: int,
 *                                direction: str) -> Tuple[List[OTMathGlyphPart], int]:
 *     return font.get_math_glyph_assembly(glyph, direction)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_v_font);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = 0;
  {
    PyObject *__pyx_callargs[3] = {__pyx_t_2, __pyx_v_glyph, __pyx_v_direction};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_get_math_glyph_assembly, __pyx_callargs+__pyx_t_3, (3-__pyx_t_3) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
  }
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(0, 311, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "uharfbuzz/_harfbuzz.pyx":307
 *     return font.get_math_glyph_variants(glyph, direction)
 * 
 * @deprecated("Font.get_math_glyph_assembly()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_assembly(font: Font,
 *                                glyph: int,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_math_get_glyph_assembly", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "uharfbuzz/_harfbuzz.pyx":314
 * 
 * 
 * def ot_font_set_funcs(font: Font):             # <<<<<<<<<<<<<<
 *     hb_ot_font_set_funcs(font._hb_font)
*/

/* Python wrapper */
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_89ot_font_set_funcs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
); /*proto*/
static PyMethodDef __pyx_mdef_9uharfbuzz_9_harfbuzz_89ot_font_set_funcs = {"ot_font_set_funcs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_89ot_font_set_funcs, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_9uharfbuzz_9_harfbuzz_89ot_font_set_funcs(PyObject *__pyx_self, 
#if CYTHON_METH_FASTCALL
PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
#else
PyObject *__pyx_args, PyObject *__pyx_kwds
#endif
) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[1] = {0};
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_font_set_funcs (wrapper)", 0);
  #if !CYTHON_METH_FASTCALL
  #if CYTHON_ASSUME_SAFE_SIZE
  __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
  #else
  __pyx_nargs = PyTuple_Size(__pyx_args); if (unlikely(__pyx_nargs < 0)) return NULL;
  #endif
  #endif
  __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
  {
    PyObject ** const __pyx_pyargnames[] = {&__pyx_mstate_global->__pyx_n_u_font,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_FASTCALL(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 314, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  1:
        values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 314, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      const Py_ssize_t kwd_pos_args = __pyx_nargs;
      if (__Pyx_ParseKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values, kwd_pos_args, __pyx_kwds_len, "ot_font_set_funcs", 0) < (0)) __PYX_ERR(0, 314, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("ot_font_set_funcs", 1, 1, 1, i); __PYX_ERR(0, 314, __pyx_L3_error) }
      }
    } else if (unlikely(__pyx_nargs != 1)) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = __Pyx_ArgRef_FASTCALL(__pyx_args, 0);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[0])) __PYX_ERR(0, 314, __pyx_L3_error)
    }
    __pyx_v_font = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ot_font_set_funcs", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 314, __pyx_L3_error)
  __pyx_L6_skip:;
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L3_error:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __Pyx_AddTraceback("uharfbuzz._harfbuzz.ot_font_set_funcs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_font), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, 0, "font", 0))) __PYX_ERR(0, 314, __pyx_L1_error)
  __pyx_r = __pyx_pf_9uharfbuzz_9_harfbuzz_88ot_font_set_funcs(__pyx_self, __pyx_v_font);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  goto __pyx_L7_cleaned_up;
  __pyx_L0:;
  for (Py_ssize_t __pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
    Py_XDECREF(values[__pyx_temp]);
  }
  __pyx_L7_cleaned_up:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_9uharfbuzz_9_harfbuzz_88ot_font_set_funcs(CYTHON_UNUSED PyObject *__pyx_self, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *__pyx_v_font) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ot_font_set_funcs", 0);

  /* "uharfbuzz/_harfbuzz.pyx":315
 * 
 * def ot_font_set_funcs(font: Font):
 *     hb_ot_font_set_funcs(font._hb_font)             # <<<<<<<<<<<<<<
*/
  hb_ot_font_set_funcs(__pyx_v_font->_hb_font);

  /* "uharfbuzz/_harfbuzz.pyx":314
 * 
 * 
 * def ot_font_set_funcs(font: Font):             # <<<<<<<<<<<<<<
 *     hb_ot_font_set_funcs(font._hb_font)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* #### Code section: module_exttypes ### */
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Set __pyx_vtable_9uharfbuzz_9_harfbuzz_Set;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Set(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Set;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Set(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Set) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_5__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Set(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_33__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_33__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret);
        Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_3Set_min(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3min_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_3Set_max(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3max_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Set[] = {
  {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_9__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_11clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"invert", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_15invert, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"is_inverted", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_17is_inverted, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"add", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_21add, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"add_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_23add_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"remove", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_25remove, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"discard", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_27discard, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"del_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_29del_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"_is_equal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_31_is_equal, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"issubset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_35issubset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"issuperset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_37issuperset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"_set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_39_set, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_41set, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_43_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_45update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"intersection_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_49intersection_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"difference_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_53difference_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"symmetric_difference_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_Set[] = {
  {"min", __pyx_getprop_9uharfbuzz_9_harfbuzz_3Set_min, 0, 0, 0},
  {"max", __pyx_getprop_9uharfbuzz_9_harfbuzz_3Set_max, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Set_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Set},
  {Py_tp_repr, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_65__repr__},
  {Py_nb_bool, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_13__bool__},
  {Py_nb_inplace_subtract, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_55__isub__},
  {Py_nb_inplace_and, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_51__iand__},
  {Py_nb_inplace_xor, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_59__ixor__},
  {Py_nb_inplace_or, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_47__ior__},
  {Py_sq_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__},
  {Py_sq_contains, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_19__contains__},
  {Py_mp_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__},
  {Py_tp_richcompare, (void *)__pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Set},
  {Py_tp_iter, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_63__iter__},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Set},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_Set},
  {Py_tp_init, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3__init__},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Set},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Set_spec = {
  "uharfbuzz._harfbuzz.Set",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_Set_slots,
};
#else

static PyNumberMethods __pyx_tp_as_number_Set = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_13__bool__, /*nb_bool*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_int*/
  0, /*nb_long (reserved)*/
  0, /*nb_float*/
  0, /*nb_inplace_add*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_55__isub__, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_51__iand__, /*nb_inplace_and*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_59__ixor__, /*nb_inplace_xor*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_47__ior__, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  0, /*nb_matrix_multiply*/
  0, /*nb_inplace_matrix_multiply*/
};

static PySequenceMethods __pyx_tp_as_sequence_Set = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_19__contains__, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Set = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_61__len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Set = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Set", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Set, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_65__repr__, /*tp_repr*/
  &__pyx_tp_as_number_Set, /*tp_as_number*/
  &__pyx_tp_as_sequence_Set, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Set, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Set, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_63__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Set, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_Set, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Set_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Set, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SetIter(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)o);
  p->s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SetIter(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SetIter) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->s);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_SetIter(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->s) {
    e = (*v)(((PyObject *)p->s), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_SetIter(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter *)o;
  tmp = ((PyObject*)p->s);
  p->s = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_specialmethod___pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  PyObject *res = __pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__(self);
  if (!res && !PyErr_Occurred()) { PyErr_SetNone(PyExc_StopIteration); }
  return res;
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_SetIter[] = {
  {"__next__", (PyCFunction)__pyx_specialmethod___pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_SetIter_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SetIter},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_SetIter},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_SetIter},
  {Py_tp_iter, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_3__iter__},
  {Py_tp_iternext, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_SetIter},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_SetIter},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_SetIter_spec = {
  "uharfbuzz._harfbuzz.SetIter",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_SetIter_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_SetIter = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""SetIter", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SetIter), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SetIter, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_SetIter, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_SetIter, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_3__iter__, /*tp_iter*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_7SetIter_5__next__, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_SetIter, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_SetIter, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Map __pyx_vtable_9uharfbuzz_9_harfbuzz_Map;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Map(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Map;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Map(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Map) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_5__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_sq_item_9uharfbuzz_9_harfbuzz_Map(PyObject *o, Py_ssize_t i) {
  PyObject *r;
  PyObject *x = PyLong_FromSsize_t(i); if(!x) return 0;
  #if CYTHON_USE_TYPE_SLOTS || (!CYTHON_USE_TYPE_SPECS && __PYX_LIMITED_VERSION_HEX < 0x030A0000)
  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
  #else
  r = ((binaryfunc)PyType_GetSlot(Py_TYPE(o), Py_mp_subscript))(o, x);
  #endif
  Py_DECREF(x);
  return r;
}

static int __pyx_mp_ass_subscript_9uharfbuzz_9_harfbuzz_Map(PyObject *o, PyObject *i, PyObject *v) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_25__setitem__(o, i, v);
  }
  else {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_33__delitem__(o, i);
  }
}

static PyObject *__pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Map(PyObject *o1, PyObject *o2, int op) {
  switch (op) {
    case Py_EQ: {
      return __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_23__eq__(o1, o2);
    }
    case Py_NE: {
      PyObject *ret;
      ret = __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_23__eq__(o1, o2);
      if (likely(ret && ret != Py_NotImplemented)) {
        int b = __Pyx_PyObject_IsTrue(ret);
        Py_DECREF(ret);
        if (unlikely(b < 0)) return NULL;
        ret = (b) ? Py_False : Py_True;
        Py_INCREF(ret);
      }
      return ret;
    }
    default: {
      return __Pyx_NewRef(Py_NotImplemented);
    }
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Map[] = {
  {"copy", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_7copy, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__copy__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_9__copy__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"_update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_11_update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"update", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_13update, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_15clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"_is_equal", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_21_is_equal, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_27get, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"items", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_35items, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"keys", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_37keys, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"values", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_39values, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Map_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Map},
  {Py_tp_repr, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_43__repr__},
  {Py_nb_bool, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_17__bool__},
  {Py_sq_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__},
  {Py_sq_item, (void *)__pyx_sq_item_9uharfbuzz_9_harfbuzz_Map},
  {Py_sq_contains, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_31__contains__},
  {Py_mp_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__},
  {Py_mp_subscript, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_29__getitem__},
  {Py_mp_ass_subscript, (void *)__pyx_mp_ass_subscript_9uharfbuzz_9_harfbuzz_Map},
  {Py_tp_richcompare, (void *)__pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Map},
  {Py_tp_iter, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_41__iter__},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Map},
  {Py_tp_init, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_3Map_3__init__},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Map},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Map_spec = {
  "uharfbuzz._harfbuzz.Map",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_Map_slots,
};
#else

static PyNumberMethods __pyx_tp_as_number_Map = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_17__bool__, /*nb_bool*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_int*/
  0, /*nb_long (reserved)*/
  0, /*nb_float*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  0, /*nb_matrix_multiply*/
  0, /*nb_inplace_matrix_multiply*/
};

static PySequenceMethods __pyx_tp_as_sequence_Map = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  __pyx_sq_item_9uharfbuzz_9_harfbuzz_Map, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_31__contains__, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Map = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_19__len__, /*mp_length*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_29__getitem__, /*mp_subscript*/
  __pyx_mp_ass_subscript_9uharfbuzz_9_harfbuzz_Map, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Map = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Map", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Map, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_43__repr__, /*tp_repr*/
  &__pyx_tp_as_number_Map, /*tp_as_number*/
  &__pyx_tp_as_sequence_Map, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Map, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  __pyx_tp_richcompare_9uharfbuzz_9_harfbuzz_Map, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_41__iter__, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Map, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  __pyx_pw_9uharfbuzz_9_harfbuzz_3Map_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Map, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_MapIter(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)o);
  p->m = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_MapIter(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_MapIter) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->m);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_MapIter(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->m) {
    e = (*v)(((PyObject *)p->m), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_MapIter(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter *)o;
  tmp = ((PyObject*)p->m);
  p->m = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_specialmethod___pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__(PyObject *self, CYTHON_UNUSED PyObject *arg) {
  PyObject *res = __pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__(self);
  if (!res && !PyErr_Occurred()) { PyErr_SetNone(PyExc_StopIteration); }
  return res;
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_MapIter[] = {
  {"__next__", (PyCFunction)__pyx_specialmethod___pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__, METH_NOARGS|METH_COEXIST, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_MapIter_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_MapIter},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_MapIter},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_MapIter},
  {Py_tp_iter, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_3__iter__},
  {Py_tp_iternext, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_MapIter},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_MapIter},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_MapIter_spec = {
  "uharfbuzz._harfbuzz.MapIter",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_MapIter_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_MapIter = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""MapIter", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_MapIter), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_MapIter, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_MapIter, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_MapIter, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_3__iter__, /*tp_iter*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_7MapIter_5__next__, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_MapIter, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_MapIter, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Blob __pyx_vtable_9uharfbuzz_9_harfbuzz_Blob;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Blob(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Blob;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Blob(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Blob) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_5__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Blob_data(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_4data_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Blob[] = {
  {"from_file_path", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_Blob[] = {
  {"data", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Blob_data, 0, PyDoc_STR("Return the blob's data as bytes."), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Blob_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Blob},
  {Py_nb_bool, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_9__bool__},
  {Py_sq_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__},
  {Py_mp_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Blob},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_Blob},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Blob},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Blob_spec = {
  "uharfbuzz._harfbuzz.Blob",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_Blob_slots,
};
#else

static PyNumberMethods __pyx_tp_as_number_Blob = {
  0, /*nb_add*/
  0, /*nb_subtract*/
  0, /*nb_multiply*/
  0, /*nb_remainder*/
  0, /*nb_divmod*/
  0, /*nb_power*/
  0, /*nb_negative*/
  0, /*nb_positive*/
  0, /*nb_absolute*/
  __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_9__bool__, /*nb_bool*/
  0, /*nb_invert*/
  0, /*nb_lshift*/
  0, /*nb_rshift*/
  0, /*nb_and*/
  0, /*nb_xor*/
  0, /*nb_or*/
  0, /*nb_int*/
  0, /*nb_long (reserved)*/
  0, /*nb_float*/
  0, /*nb_inplace_add*/
  0, /*nb_inplace_subtract*/
  0, /*nb_inplace_multiply*/
  0, /*nb_inplace_remainder*/
  0, /*nb_inplace_power*/
  0, /*nb_inplace_lshift*/
  0, /*nb_inplace_rshift*/
  0, /*nb_inplace_and*/
  0, /*nb_inplace_xor*/
  0, /*nb_inplace_or*/
  0, /*nb_floor_divide*/
  0, /*nb_true_divide*/
  0, /*nb_inplace_floor_divide*/
  0, /*nb_inplace_true_divide*/
  0, /*nb_index*/
  0, /*nb_matrix_multiply*/
  0, /*nb_inplace_matrix_multiply*/
};

static PySequenceMethods __pyx_tp_as_sequence_Blob = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Blob = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_4Blob_7__len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Blob = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Blob", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Blob, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  &__pyx_tp_as_number_Blob, /*tp_as_number*/
  &__pyx_tp_as_sequence_Blob, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Blob, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Blob, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_Blob, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Blob, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphInfo __pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphInfo;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphInfo(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphInfo;
  __Pyx_default_placement_construct(&(p->_hb_glyph_info));
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphInfo(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphInfo) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->_hb_glyph_info);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_codepoint(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_9codepoint_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_cluster(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_7cluster_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_flags(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_5flags_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_GlyphInfo[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphInfo[] = {
  {"codepoint", __pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_codepoint, 0, 0, 0},
  {"cluster", __pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_cluster, 0, 0, 0},
  {"flags", __pyx_getprop_9uharfbuzz_9_harfbuzz_9GlyphInfo_flags, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphInfo},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_GlyphInfo},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphInfo},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphInfo},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo_spec = {
  "uharfbuzz._harfbuzz.GlyphInfo",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""GlyphInfo", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphInfo, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_GlyphInfo, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphInfo, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphInfo, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_GlyphPosition __pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphPosition;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphPosition(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphPosition;
  __Pyx_default_placement_construct(&(p->_hb_glyph_position));
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphPosition(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphPosition) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  __Pyx_call_destructor(p->_hb_glyph_position);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_position(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8position_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_x_advance(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9x_advance_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_y_advance(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_9y_advance_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_x_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8x_offset_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_y_offset(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_8y_offset_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_GlyphPosition[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphPosition[] = {
  {"position", __pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_position, 0, 0, 0},
  {"x_advance", __pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_x_advance, 0, 0, 0},
  {"y_advance", __pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_y_advance, 0, 0, 0},
  {"x_offset", __pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_x_offset, 0, 0, 0},
  {"y_offset", __pyx_getprop_9uharfbuzz_9_harfbuzz_13GlyphPosition_y_offset, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphPosition},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_GlyphPosition},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphPosition},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphPosition},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition_spec = {
  "uharfbuzz._harfbuzz.GlyphPosition",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""GlyphPosition", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_GlyphPosition, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_GlyphPosition, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_GlyphPosition, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_GlyphPosition, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Buffer(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)o);
  p->_message_callback = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Buffer(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Buffer) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_message_callback);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Buffer(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_message_callback) {
    e = (*v)(p->_message_callback, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Buffer(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer *)o;
  tmp = ((PyObject*)p->_message_callback);
  p->_message_callback = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_direction(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_direction(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9direction_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_glyph_infos(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11glyph_infos_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_glyph_positions(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15glyph_positions_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_language(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_language(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_8language_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_script(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_script(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_6script_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_flags(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_flags(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5flags_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_cluster_level(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_cluster_level(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13cluster_level_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_content_type(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_content_type(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_12content_type_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_replacement_codepoint(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_replacement_codepoint(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21replacement_codepoint_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_invisible_glyph(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_invisible_glyph(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15invisible_glyph_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_not_found_glyph(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_not_found_glyph(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15not_found_glyph_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Buffer[] = {
  {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_9reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear_contents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_language_from_ot_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_script_from_ot_tag", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"add_codepoints", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"add_utf8", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"add_str", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_21add_str, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"guess_segment_properties", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_message_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"serialize", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_27serialize, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_Buffer[] = {
  {"direction", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_direction, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_direction, 0, 0},
  {"glyph_infos", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_glyph_infos, 0, 0, 0},
  {"glyph_positions", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_glyph_positions, 0, 0, 0},
  {"language", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_language, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_language, 0, 0},
  {"script", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_script, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_script, 0, 0},
  {"flags", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_flags, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_flags, 0, 0},
  {"cluster_level", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_cluster_level, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_cluster_level, 0, 0},
  {"content_type", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_content_type, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_content_type, 0, 0},
  {"replacement_codepoint", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_replacement_codepoint, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_replacement_codepoint, 0, 0},
  {"invisible_glyph", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_invisible_glyph, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_invisible_glyph, 0, 0},
  {"not_found_glyph", __pyx_getprop_9uharfbuzz_9_harfbuzz_6Buffer_not_found_glyph, __pyx_setprop_9uharfbuzz_9_harfbuzz_6Buffer_not_found_glyph, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Buffer_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Buffer},
  {Py_sq_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__},
  {Py_mp_length, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Buffer},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_Buffer},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Buffer},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_Buffer},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Buffer},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Buffer_spec = {
  "uharfbuzz._harfbuzz.Buffer",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_Buffer_slots,
};
#else

static PySequenceMethods __pyx_tp_as_sequence_Buffer = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__, /*sq_length*/
  0, /*sq_concat*/
  0, /*sq_repeat*/
  0, /*sq_item*/
  0, /*sq_slice*/
  0, /*sq_ass_item*/
  0, /*sq_ass_slice*/
  0, /*sq_contains*/
  0, /*sq_inplace_concat*/
  0, /*sq_inplace_repeat*/
};

static PyMappingMethods __pyx_tp_as_mapping_Buffer = {
  __pyx_pw_9uharfbuzz_9_harfbuzz_6Buffer_7__len__, /*mp_length*/
  0, /*mp_subscript*/
  0, /*mp_ass_subscript*/
};

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Buffer = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Buffer", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Buffer), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Buffer, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  &__pyx_tp_as_sequence_Buffer, /*tp_as_sequence*/
  &__pyx_tp_as_mapping_Buffer, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Buffer, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Buffer, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Buffer, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_Buffer, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Buffer, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Face __pyx_vtable_9uharfbuzz_9_harfbuzz_Face;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Face(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Face;
  p->_reference_table_func = Py_None; Py_INCREF(Py_None);
  p->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Face(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Face) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_reference_table_func);
  Py_CLEAR(p->_blob);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Face(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_reference_table_func) {
    e = (*v)(p->_reference_table_func, a); if (e) return e;
  }
  if (p->_blob) {
    e = (*v)(((PyObject *)p->_blob), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Face(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)o;
  tmp = ((PyObject*)p->_reference_table_func);
  p->_reference_table_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_blob);
  p->_blob = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_count(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5count_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_index(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_index(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5index_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_upem(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_upem(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4upem_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_glyph_count(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_glyph_count(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11glyph_count_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_blob(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_4blob_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_table_tags(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10table_tags_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_unicodes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_8unicodes_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_variation_selectors(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19variation_selectors_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_var_data(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_12has_var_data_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_axis_infos(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_10axis_infos_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_named_instances(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15named_instances_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_math_data(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_math_data_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_layers(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_16has_color_layers_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_palettes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_18has_color_palettes_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_color_palettes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_14color_palettes_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_paint(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15has_color_paint_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_svg(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_svg_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_png(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13has_color_png_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_glyph_classes(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_24has_layout_glyph_classes_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_positioning(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_22has_layout_positioning_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_substitution(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23has_layout_substitution_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Face[] = {
  {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"create_for_tables", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"reference_table", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_9reference_table, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"variation_unicodes", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"is_glyph_extended_math_shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_color_layers", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_color_palette", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"color_palette_color_get_name_id", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"glyph_has_color_paint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_color_svg", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_layout_glyph_class", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_lookup_glyph_alternates", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_language_feature_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_script_language_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_table_script_tags", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"list_names", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_35list_names, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_37get_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_Face[] = {
  {"count", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_count, 0, 0, 0},
  {"index", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_index, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_index, 0, 0},
  {"upem", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_upem, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_upem, 0, 0},
  {"glyph_count", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_glyph_count, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Face_glyph_count, 0, 0},
  {"blob", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_blob, 0, 0, 0},
  {"table_tags", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_table_tags, 0, 0, 0},
  {"unicodes", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_unicodes, 0, 0, 0},
  {"variation_selectors", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_variation_selectors, 0, 0, 0},
  {"has_var_data", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_var_data, 0, 0, 0},
  {"axis_infos", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_axis_infos, 0, 0, 0},
  {"named_instances", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_named_instances, 0, 0, 0},
  {"has_math_data", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_math_data, 0, 0, 0},
  {"has_color_layers", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_layers, 0, 0, 0},
  {"has_color_palettes", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_palettes, 0, 0, 0},
  {"color_palettes", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_color_palettes, 0, 0, 0},
  {"has_color_paint", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_paint, 0, 0, 0},
  {"has_color_svg", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_svg, 0, 0, 0},
  {"has_color_png", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_color_png, 0, 0, 0},
  {"has_layout_glyph_classes", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_glyph_classes, 0, 0, 0},
  {"has_layout_positioning", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_positioning, 0, 0, 0},
  {"has_layout_substitution", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Face_has_layout_substitution, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Face_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Face},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Face},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_Face},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Face},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_Face},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Face},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Face_spec = {
  "uharfbuzz._harfbuzz.Face",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_Face_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Face = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Face", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Face, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Face, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Face, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Face, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_Face, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Face, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_DrawFuncs(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)o);
  p->_move_to_func = Py_None; Py_INCREF(Py_None);
  p->_line_to_func = Py_None; Py_INCREF(Py_None);
  p->_cubic_to_func = Py_None; Py_INCREF(Py_None);
  p->_quadratic_to_func = Py_None; Py_INCREF(Py_None);
  p->_close_path_func = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_DrawFuncs(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_DrawFuncs) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_move_to_func);
  Py_CLEAR(p->_line_to_func);
  Py_CLEAR(p->_cubic_to_func);
  Py_CLEAR(p->_quadratic_to_func);
  Py_CLEAR(p->_close_path_func);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_DrawFuncs(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_move_to_func) {
    e = (*v)(p->_move_to_func, a); if (e) return e;
  }
  if (p->_line_to_func) {
    e = (*v)(p->_line_to_func, a); if (e) return e;
  }
  if (p->_cubic_to_func) {
    e = (*v)(p->_cubic_to_func, a); if (e) return e;
  }
  if (p->_quadratic_to_func) {
    e = (*v)(p->_quadratic_to_func, a); if (e) return e;
  }
  if (p->_close_path_func) {
    e = (*v)(p->_close_path_func, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_DrawFuncs(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs *)o;
  tmp = ((PyObject*)p->_move_to_func);
  p->_move_to_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_line_to_func);
  p->_line_to_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_cubic_to_func);
  p->_cubic_to_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_quadratic_to_func);
  p->_quadratic_to_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_close_path_func);
  p->_close_path_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_DrawFuncs[] = {
  {"get_glyph_shape", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_move_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_line_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_cubic_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_quadratic_to_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_close_path_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_DrawFuncs},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_DrawFuncs},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_DrawFuncs},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_DrawFuncs},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_DrawFuncs},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs_spec = {
  "uharfbuzz._harfbuzz.DrawFuncs",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""DrawFuncs", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_DrawFuncs), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_DrawFuncs, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_DrawFuncs, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_DrawFuncs, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_DrawFuncs, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_DrawFuncs, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_ColorLine __pyx_vtable_9uharfbuzz_9_harfbuzz_ColorLine;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_ColorLine(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_ColorLine;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_ColorLine(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_ColorLine) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_9ColorLine_color_stops(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_11color_stops_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_9ColorLine_extend(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_6extend_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_ColorLine[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_ColorLine[] = {
  {"color_stops", __pyx_getprop_9uharfbuzz_9_harfbuzz_9ColorLine_color_stops, 0, 0, 0},
  {"extend", __pyx_getprop_9uharfbuzz_9_harfbuzz_9ColorLine_extend, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_ColorLine_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_ColorLine},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_ColorLine},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_ColorLine},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_ColorLine},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_ColorLine_spec = {
  "uharfbuzz._harfbuzz.ColorLine",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_ColorLine_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_ColorLine = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""ColorLine", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_ColorLine, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_ColorLine, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_ColorLine, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_ColorLine, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_PaintFuncs(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)o);
  p->_push_transform_func = Py_None; Py_INCREF(Py_None);
  p->_pop_transform_func = Py_None; Py_INCREF(Py_None);
  p->_color_glyph_func = Py_None; Py_INCREF(Py_None);
  p->_push_clip_glyph_func = Py_None; Py_INCREF(Py_None);
  p->_push_clip_rectangle_func = Py_None; Py_INCREF(Py_None);
  p->_pop_clip_func = Py_None; Py_INCREF(Py_None);
  p->_color_func = Py_None; Py_INCREF(Py_None);
  p->_image_func = Py_None; Py_INCREF(Py_None);
  p->_linear_gradient_func = Py_None; Py_INCREF(Py_None);
  p->_radial_gradient_func = Py_None; Py_INCREF(Py_None);
  p->_sweep_gradient_func = Py_None; Py_INCREF(Py_None);
  p->_push_group_func = Py_None; Py_INCREF(Py_None);
  p->_pop_group_func = Py_None; Py_INCREF(Py_None);
  p->_custom_palette_color_func = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_PaintFuncs(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_PaintFuncs) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_push_transform_func);
  Py_CLEAR(p->_pop_transform_func);
  Py_CLEAR(p->_color_glyph_func);
  Py_CLEAR(p->_push_clip_glyph_func);
  Py_CLEAR(p->_push_clip_rectangle_func);
  Py_CLEAR(p->_pop_clip_func);
  Py_CLEAR(p->_color_func);
  Py_CLEAR(p->_image_func);
  Py_CLEAR(p->_linear_gradient_func);
  Py_CLEAR(p->_radial_gradient_func);
  Py_CLEAR(p->_sweep_gradient_func);
  Py_CLEAR(p->_push_group_func);
  Py_CLEAR(p->_pop_group_func);
  Py_CLEAR(p->_custom_palette_color_func);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_PaintFuncs(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_push_transform_func) {
    e = (*v)(p->_push_transform_func, a); if (e) return e;
  }
  if (p->_pop_transform_func) {
    e = (*v)(p->_pop_transform_func, a); if (e) return e;
  }
  if (p->_color_glyph_func) {
    e = (*v)(p->_color_glyph_func, a); if (e) return e;
  }
  if (p->_push_clip_glyph_func) {
    e = (*v)(p->_push_clip_glyph_func, a); if (e) return e;
  }
  if (p->_push_clip_rectangle_func) {
    e = (*v)(p->_push_clip_rectangle_func, a); if (e) return e;
  }
  if (p->_pop_clip_func) {
    e = (*v)(p->_pop_clip_func, a); if (e) return e;
  }
  if (p->_color_func) {
    e = (*v)(p->_color_func, a); if (e) return e;
  }
  if (p->_image_func) {
    e = (*v)(p->_image_func, a); if (e) return e;
  }
  if (p->_linear_gradient_func) {
    e = (*v)(p->_linear_gradient_func, a); if (e) return e;
  }
  if (p->_radial_gradient_func) {
    e = (*v)(p->_radial_gradient_func, a); if (e) return e;
  }
  if (p->_sweep_gradient_func) {
    e = (*v)(p->_sweep_gradient_func, a); if (e) return e;
  }
  if (p->_push_group_func) {
    e = (*v)(p->_push_group_func, a); if (e) return e;
  }
  if (p->_pop_group_func) {
    e = (*v)(p->_pop_group_func, a); if (e) return e;
  }
  if (p->_custom_palette_color_func) {
    e = (*v)(p->_custom_palette_color_func, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_PaintFuncs(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs *)o;
  tmp = ((PyObject*)p->_push_transform_func);
  p->_push_transform_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_pop_transform_func);
  p->_pop_transform_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_color_glyph_func);
  p->_color_glyph_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_push_clip_glyph_func);
  p->_push_clip_glyph_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_push_clip_rectangle_func);
  p->_push_clip_rectangle_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_pop_clip_func);
  p->_pop_clip_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_color_func);
  p->_color_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_image_func);
  p->_image_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_linear_gradient_func);
  p->_linear_gradient_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_radial_gradient_func);
  p->_radial_gradient_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_sweep_gradient_func);
  p->_sweep_gradient_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_push_group_func);
  p->_push_group_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_pop_group_func);
  p->_pop_group_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_custom_palette_color_func);
  p->_custom_palette_color_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_PaintFuncs[] = {
  {"set_push_transform_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_pop_transform_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_color_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_push_clip_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_push_clip_rectangle_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_pop_clip_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_color_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_image_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_linear_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_radial_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_sweep_gradient_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_push_group_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_pop_group_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_custom_palette_color_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_PaintFuncs},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_PaintFuncs},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_PaintFuncs},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_PaintFuncs},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_PaintFuncs},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs_spec = {
  "uharfbuzz._harfbuzz.PaintFuncs",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""PaintFuncs", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_PaintFuncs), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_PaintFuncs, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_PaintFuncs, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_PaintFuncs, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_PaintFuncs, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_PaintFuncs, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_Font __pyx_vtable_9uharfbuzz_9_harfbuzz_Font;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_Font(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Font;
  p->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)Py_None); Py_INCREF(Py_None);
  p->_ffuncs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)Py_None); Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Font(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Font) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_face);
  Py_CLEAR(p->_ffuncs);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Font(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_face) {
    e = (*v)(((PyObject *)p->_face), a); if (e) return e;
  }
  if (p->_ffuncs) {
    e = (*v)(((PyObject *)p->_ffuncs), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Font(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *)o;
  tmp = ((PyObject*)p->_face);
  p->_face = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_ffuncs);
  p->_ffuncs = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_face(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4face_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_funcs(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_funcs(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5funcs_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_scale(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_scale(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5scale_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_ppem(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_ppem(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ppem_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_ptem(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_ptem(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_4ptem_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_slant(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_slant(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15synthetic_slant_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_bold(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_bold(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_14synthetic_bold_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_var_named_instance(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_var_named_instance(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_4Font_18var_named_instance_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_Font[] = {
  {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_variations", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_7set_variations, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_9set_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_from_name", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_h_advance", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_v_advance", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_h_origin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_v_origin", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_font_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_variation_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_nominal_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_var_coords_normalized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_var_coords_normalized", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_var_coords_design", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_var_coords_design", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"glyph_to_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"glyph_from_string", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"paint_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"draw_glyph_with_pen", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_constant", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_italics_correction", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_top_accent_attachment", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_min_connector_overlap", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_kerning", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_kernings", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_variants", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_math_glyph_assembly", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_metric_position", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_metric_position_with_fallback", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_metric_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_metric_x_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_metric_y_variation", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_glyph_color_png", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_layout_baseline", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_style_value", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_79get_style_value, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_Font[] = {
  {"face", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_face, 0, 0, 0},
  {"funcs", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_funcs, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_funcs, 0, 0},
  {"scale", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_scale, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_scale, 0, 0},
  {"ppem", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_ppem, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_ppem, 0, 0},
  {"ptem", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_ptem, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_ptem, 0, 0},
  {"synthetic_slant", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_slant, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_slant, 0, 0},
  {"synthetic_bold", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_bold, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_synthetic_bold, 0, 0},
  {"var_named_instance", __pyx_getprop_9uharfbuzz_9_harfbuzz_4Font_var_named_instance, __pyx_setprop_9uharfbuzz_9_harfbuzz_4Font_var_named_instance, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_Font_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Font},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Font},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_Font},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_Font},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_Font},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_Font},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_Font_spec = {
  "uharfbuzz._harfbuzz.Font",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_Font_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_Font = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""Font", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_Font, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_Font, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_Font, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_Font, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_Font, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_Font, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_FontFuncs(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)o);
  p->_glyph_h_advance_func = Py_None; Py_INCREF(Py_None);
  p->_glyph_v_advance_func = Py_None; Py_INCREF(Py_None);
  p->_glyph_v_origin_func = Py_None; Py_INCREF(Py_None);
  p->_glyph_name_func = Py_None; Py_INCREF(Py_None);
  p->_nominal_glyph_func = Py_None; Py_INCREF(Py_None);
  p->_variation_glyph_func = Py_None; Py_INCREF(Py_None);
  p->_font_h_extents_func = Py_None; Py_INCREF(Py_None);
  p->_font_v_extents_func = Py_None; Py_INCREF(Py_None);
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_FontFuncs(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_FontFuncs) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  Py_CLEAR(p->_glyph_h_advance_func);
  Py_CLEAR(p->_glyph_v_advance_func);
  Py_CLEAR(p->_glyph_v_origin_func);
  Py_CLEAR(p->_glyph_name_func);
  Py_CLEAR(p->_nominal_glyph_func);
  Py_CLEAR(p->_variation_glyph_func);
  Py_CLEAR(p->_font_h_extents_func);
  Py_CLEAR(p->_font_v_extents_func);
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_FontFuncs(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_glyph_h_advance_func) {
    e = (*v)(p->_glyph_h_advance_func, a); if (e) return e;
  }
  if (p->_glyph_v_advance_func) {
    e = (*v)(p->_glyph_v_advance_func, a); if (e) return e;
  }
  if (p->_glyph_v_origin_func) {
    e = (*v)(p->_glyph_v_origin_func, a); if (e) return e;
  }
  if (p->_glyph_name_func) {
    e = (*v)(p->_glyph_name_func, a); if (e) return e;
  }
  if (p->_nominal_glyph_func) {
    e = (*v)(p->_nominal_glyph_func, a); if (e) return e;
  }
  if (p->_variation_glyph_func) {
    e = (*v)(p->_variation_glyph_func, a); if (e) return e;
  }
  if (p->_font_h_extents_func) {
    e = (*v)(p->_font_h_extents_func, a); if (e) return e;
  }
  if (p->_font_v_extents_func) {
    e = (*v)(p->_font_v_extents_func, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz_FontFuncs(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs *)o;
  tmp = ((PyObject*)p->_glyph_h_advance_func);
  p->_glyph_h_advance_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_glyph_v_advance_func);
  p->_glyph_v_advance_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_glyph_v_origin_func);
  p->_glyph_v_origin_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_glyph_name_func);
  p->_glyph_name_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_nominal_glyph_func);
  p->_nominal_glyph_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_variation_glyph_func);
  p->_variation_glyph_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_font_h_extents_func);
  p->_font_h_extents_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_font_v_extents_func);
  p->_font_v_extents_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_FontFuncs[] = {
  {"create", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_5create, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_glyph_h_advance_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_glyph_v_advance_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_glyph_v_origin_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_glyph_name_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_nominal_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_variation_glyph_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_font_h_extents_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_font_v_extents_func", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_FontFuncs},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz_FontFuncs},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz_FontFuncs},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_FontFuncs},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_FontFuncs},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs_spec = {
  "uharfbuzz._harfbuzz.FontFuncs",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""FontFuncs", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_FontFuncs), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_FontFuncs, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz_FontFuncs, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz_FontFuncs, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_FontFuncs, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_FontFuncs, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_RasterImage __pyx_vtable_9uharfbuzz_9_harfbuzz_RasterImage;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterImage(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_RasterImage;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterImage(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterImage) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_5__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_format(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6format_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_extents(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7extents_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_buffer(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_6buffer_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_RasterImage[] = {
  {"configure", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_7configure, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_9clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterImage[] = {
  {"format", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_format, 0, 0, 0},
  {"extents", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_extents, 0, 0, 0},
  {"buffer", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterImage_buffer, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_RasterImage_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterImage},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_RasterImage},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_RasterImage},
  {Py_tp_init, (void *)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_3__init__},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterImage},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_RasterImage_spec = {
  "uharfbuzz._harfbuzz.RasterImage",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_RasterImage_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_RasterImage = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""RasterImage", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterImage, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_RasterImage, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterImage, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterImage_3__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterImage, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterDraw(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterDraw(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterDraw) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_transform(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_transform(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9transform_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_scale_factor(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_scale_factor(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_12scale_factor_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_extents(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_extents(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7extents_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_RasterDraw[] = {
  {"set_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"draw_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"draw_glyph_or_fail", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"render", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_11render, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterDraw[] = {
  {"transform", __pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_transform, __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_transform, 0, 0},
  {"scale_factor", __pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_scale_factor, __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_scale_factor, 0, 0},
  {"extents", __pyx_getprop_9uharfbuzz_9_harfbuzz_10RasterDraw_extents, __pyx_setprop_9uharfbuzz_9_harfbuzz_10RasterDraw_extents, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterDraw},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_RasterDraw},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_RasterDraw},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterDraw},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw_spec = {
  "uharfbuzz._harfbuzz.RasterDraw",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""RasterDraw", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterDraw), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterDraw, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_RasterDraw, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterDraw, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterDraw, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterPaint(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterPaint(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterPaint) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_transform(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_transform(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9transform_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_scale_factor(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_scale_factor(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_12scale_factor_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_extents(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_extents(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7extents_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_foreground(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_foreground(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10foreground_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_background(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_background(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_10background_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_palette(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_palette(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7palette_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_RasterPaint[] = {
  {"set_glyph_extents", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_custom_palette_color", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear_custom_palette_colors", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"paint_glyph", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"paint_glyph_or_fail", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"render", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_15render, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"clear", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"reset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterPaint[] = {
  {"transform", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_transform, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_transform, 0, 0},
  {"scale_factor", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_scale_factor, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_scale_factor, 0, 0},
  {"extents", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_extents, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_extents, 0, 0},
  {"foreground", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_foreground, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_foreground, 0, 0},
  {"background", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_background, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_background, 0, 0},
  {"palette", __pyx_getprop_9uharfbuzz_9_harfbuzz_11RasterPaint_palette, __pyx_setprop_9uharfbuzz_9_harfbuzz_11RasterPaint_palette, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterPaint},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_RasterPaint},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_RasterPaint},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterPaint},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint_spec = {
  "uharfbuzz._harfbuzz.RasterPaint",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""RasterPaint", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterPaint), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_RasterPaint, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_RasterPaint, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_RasterPaint, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_RasterPaint, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif
static struct __pyx_vtabstruct_9uharfbuzz_9_harfbuzz_HBObject __pyx_vtable_9uharfbuzz_9_harfbuzz_HBObject;

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_HBObject(PyTypeObject *t, PyObject *a, PyObject *k) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *)o);
  p->__pyx_vtab = __pyx_vtabptr_9uharfbuzz_9_harfbuzz_HBObject;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_HBObject(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_HBObject) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_HBObject[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_HBObject_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_HBObject},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_HBObject},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_HBObject},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_HBObject_spec = {
  "uharfbuzz._harfbuzz.HBObject",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_HBObject_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_HBObject = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""HBObject", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_HBObject, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_HBObject, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_HBObject, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetInput(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_1__cinit__(o, __pyx_mstate_global->__pyx_empty_tuple, NULL) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetInput(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetInput) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_unicode_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11unicode_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_glyph_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9glyph_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_no_subset_table_tag_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23no_subset_table_tag_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_drop_table_tag_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_18drop_table_tag_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_name_id_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11name_id_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_name_lang_id_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_16name_lang_id_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_layout_feature_tag_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_22layout_feature_tag_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_layout_script_tag_set(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21layout_script_tag_set_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_flags(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_1__get__(o);
}

static int __pyx_setprop_9uharfbuzz_9_harfbuzz_11SubsetInput_flags(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5flags_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_SubsetInput[] = {
  {"subset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"keep_everything", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"pin_all_axes_to_default", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"pin_axis_to_default", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"pin_axis_location", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"set_axis_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"get_axis_range", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"sets", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetInput[] = {
  {"unicode_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_unicode_set, 0, 0, 0},
  {"glyph_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_glyph_set, 0, 0, 0},
  {"no_subset_table_tag_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_no_subset_table_tag_set, 0, 0, 0},
  {"drop_table_tag_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_drop_table_tag_set, 0, 0, 0},
  {"name_id_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_name_id_set, 0, 0, 0},
  {"name_lang_id_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_name_lang_id_set, 0, 0, 0},
  {"layout_feature_tag_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_layout_feature_tag_set, 0, 0, 0},
  {"layout_script_tag_set", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_layout_script_tag_set, 0, 0, 0},
  {"flags", __pyx_getprop_9uharfbuzz_9_harfbuzz_11SubsetInput_flags, __pyx_setprop_9uharfbuzz_9_harfbuzz_11SubsetInput_flags, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetInput},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_SubsetInput},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetInput},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetInput},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput_spec = {
  "uharfbuzz._harfbuzz.SubsetInput",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""SubsetInput", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetInput), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetInput, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_SubsetInput, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetInput, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetInput, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetPlan(PyTypeObject *t, PyObject *a, PyObject *k) {
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  if (unlikely(__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_1__cinit__(o, a, k) < 0)) goto bad;
  return o;
  bad:
  Py_DECREF(o); o = 0;
  return NULL;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetPlan(PyObject *o) {
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && (!PyType_IS_GC(Py_TYPE(o)) || !__Pyx_PyObject_GC_IsFinalized(o))) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetPlan) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  {
    PyObject *etype, *eval, *etb;
    PyErr_Fetch(&etype, &eval, &etb);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
    __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_3__dealloc__(o);
    __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
    PyErr_Restore(etype, eval, etb);
  }
  PyTypeObject *tp = Py_TYPE(o);
  #if CYTHON_USE_TYPE_SLOTS
  (*tp->tp_free)(o);
  #else
  {
    freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
    if (tp_free) tp_free(o);
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  Py_DECREF(tp);
  #endif
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_old_to_new_glyph_mapping(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24old_to_new_glyph_mapping_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_new_to_old_glyph_mapping(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_24new_to_old_glyph_mapping_1__get__(o);
}

static PyObject *__pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_unicode_to_old_glyph_mapping(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_28unicode_to_old_glyph_mapping_1__get__(o);
}

static PyMethodDef __pyx_methods_9uharfbuzz_9_harfbuzz_SubsetPlan[] = {
  {"execute", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetPlan[] = {
  {"old_to_new_glyph_mapping", __pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_old_to_new_glyph_mapping, 0, 0, 0},
  {"new_to_old_glyph_mapping", __pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_new_to_old_glyph_mapping, 0, 0, 0},
  {"unicode_to_old_glyph_mapping", __pyx_getprop_9uharfbuzz_9_harfbuzz_10SubsetPlan_unicode_to_old_glyph_mapping, 0, 0, 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetPlan},
  {Py_tp_methods, (void *)__pyx_methods_9uharfbuzz_9_harfbuzz_SubsetPlan},
  {Py_tp_getset, (void *)__pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetPlan},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetPlan},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan_spec = {
  "uharfbuzz._harfbuzz.SubsetPlan",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""SubsetPlan", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz_SubsetPlan), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz_SubsetPlan, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
  0, /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_9uharfbuzz_9_harfbuzz_SubsetPlan, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_9uharfbuzz_9_harfbuzz_SubsetPlan, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz_SubsetPlan, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_replacement);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_v_replacement) {
    e = (*v)(p->__pyx_v_replacement, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)o;
  tmp = ((PyObject*)p->__pyx_v_replacement);
  p->__pyx_v_replacement = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct__deprecated",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct__deprecated", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_func);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_func) {
    e = (*v)(p->__pyx_v_func, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator *)o;
  tmp = ((PyObject*)p->__pyx_outer_scope);
  p->__pyx_outer_scope = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->__pyx_v_func);
  p->__pyx_v_func = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator},
  {Py_tp_clear, (void *)__pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct_1_decorator",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct_1_decorator", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, /*tp_traverse*/
  __pyx_tp_clear_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_genexpr_arg_0);
  Py_CLEAR(p->__pyx_v_v);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_genexpr_arg_0) {
    e = (*v)(((PyObject *)p->__pyx_genexpr_arg_0), a); if (e) return e;
  }
  if (p->__pyx_v_v) {
    e = (*v)(p->__pyx_v_v, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct_2_genexpr",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct_2_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_genexpr_arg_0);
  Py_CLEAR(p->__pyx_v_k);
  Py_CLEAR(p->__pyx_v_v);
  Py_CLEAR(p->__pyx_t_0);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_genexpr_arg_0) {
    e = (*v)(((PyObject *)p->__pyx_genexpr_arg_0), a); if (e) return e;
  }
  if (p->__pyx_v_k) {
    e = (*v)(p->__pyx_v_k, a); if (e) return e;
  }
  if (p->__pyx_v_v) {
    e = (*v)(p->__pyx_v_v, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct_3_genexpr",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct_3_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_genexpr_arg_0);
  Py_CLEAR(p->__pyx_v_k);
  Py_CLEAR(p->__pyx_v_v);
  Py_CLEAR(p->__pyx_t_0);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_genexpr_arg_0) {
    e = (*v)(((PyObject *)p->__pyx_genexpr_arg_0), a); if (e) return e;
  }
  if (p->__pyx_v_k) {
    e = (*v)(p->__pyx_v_k, a); if (e) return e;
  }
  if (p->__pyx_v_v) {
    e = (*v)(p->__pyx_v_v, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct_4_genexpr",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct_4_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyObject *__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr > 0) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(t, __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr))))
  {
    o = (PyObject*)__pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr[--__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr];
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(Py_TYPE(o));
    #endif
    memset(o, 0, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr));
    #if CYTHON_COMPILING_IN_LIMITED_API
    (void) PyObject_Init(o, t);
    #else
    (void) PyObject_INIT(o, t);
    #endif
    PyObject_GC_Track(o);
  } else
  #endif
  {
    o = __Pyx_AllocateExtensionType(t, 1);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr(PyObject *o) {
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(__Pyx_PyObject_GetSlot(o, tp_finalize, destructor)) && !__Pyx_PyObject_GC_IsFinalized(o)) {
    if (__Pyx_PyObject_GetSlot(o, tp_dealloc, destructor) == __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_genexpr_arg_0);
  Py_CLEAR(p->__pyx_v_k);
  Py_CLEAR(p->__pyx_v_v);
  #if CYTHON_USE_FREELISTS
  if (likely((int)(__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr < 8) & __PYX_CHECK_FINAL_TYPE_FOR_FREELISTS(Py_TYPE(o), __pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr))))
  {
    __pyx_mstate_global->__pyx_freelist_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr[__pyx_mstate_global->__pyx_freecount_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr++] = ((struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)o);
  } else
  #endif
  {
    PyTypeObject *tp = Py_TYPE(o);
    #if CYTHON_USE_TYPE_SLOTS
    (*tp->tp_free)(o);
    #else
    {
      freefunc tp_free = (freefunc)PyType_GetSlot(tp, Py_tp_free);
      if (tp_free) tp_free(o);
    }
    #endif
    #if CYTHON_USE_TYPE_SPECS
    Py_DECREF(tp);
    #endif
  }
}

static int __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *p = (struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->__pyx_genexpr_arg_0) {
    e = (*v)(p->__pyx_genexpr_arg_0, a); if (e) return e;
  }
  if (p->__pyx_v_k) {
    e = (*v)(p->__pyx_v_k, a); if (e) return e;
  }
  if (p->__pyx_v_v) {
    e = (*v)(p->__pyx_v_v, a); if (e) return e;
  }
  return 0;
}
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr},
  {Py_tp_new, (void *)__pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr},
  {0, 0},
};
static PyType_Spec __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr_spec = {
  "uharfbuzz._harfbuzz.__pyx_scope_struct_5_genexpr",
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC,
  __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr_slots,
};
#else

static PyTypeObject __pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "uharfbuzz._harfbuzz.""__pyx_scope_struct_5_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  #if !CYTHON_USE_TYPE_SPECS
  0, /*tp_dictoffset*/
  #endif
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if CYTHON_USE_TP_FINALIZE
  0, /*tp_finalize*/
  #else
  NULL, /*tp_finalize*/
  #endif
  #if !CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800
  0, /*tp_vectorcall*/
  #endif
  #if __PYX_NEED_TP_PRINT_SLOT == 1
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030C0000
  0, /*tp_watched*/
  #endif
  #if PY_VERSION_HEX >= 0x030d00A4
  0, /*tp_versions_used*/
  #endif
  #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000 && PY_VERSION_HEX < 0x030a0000
  0, /*tp_pypy_flags*/
  #endif
};
#endif

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};
/* #### Code section: initfunc_declarations ### */
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate); /*proto*/
/* #### Code section: init_module ### */

static int __Pyx_modinit_global_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_type_init_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Set = &__pyx_vtable_9uharfbuzz_9_harfbuzz_Set;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Set.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Set *(*)(hb_set_t *))__pyx_f_9uharfbuzz_9_harfbuzz_3Set_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Set_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set)) __PYX_ERR(2, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Set_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set = &__pyx_type_9uharfbuzz_9_harfbuzz_Set;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Set_2, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set) < (0)) __PYX_ERR(2, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_SetIter_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter)) __PYX_ERR(2, 172, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_SetIter_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter) < (0)) __PYX_ERR(2, 172, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter = &__pyx_type_9uharfbuzz_9_harfbuzz_SetIter;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter) < (0)) __PYX_ERR(2, 172, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_SetIter, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter) < (0)) __PYX_ERR(2, 172, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SetIter) < (0)) __PYX_ERR(2, 172, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Map = &__pyx_vtable_9uharfbuzz_9_harfbuzz_Map;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Map.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Map *(*)(hb_map_t *))__pyx_f_9uharfbuzz_9_harfbuzz_3Map_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Map_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Map_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map = &__pyx_type_9uharfbuzz_9_harfbuzz_Map;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Map, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map) < (0)) __PYX_ERR(5, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_MapIter_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter)) __PYX_ERR(5, 112, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_MapIter_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter) < (0)) __PYX_ERR(5, 112, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter = &__pyx_type_9uharfbuzz_9_harfbuzz_MapIter;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter) < (0)) __PYX_ERR(5, 112, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_MapIter, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter) < (0)) __PYX_ERR(5, 112, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_MapIter) < (0)) __PYX_ERR(5, 112, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Blob = &__pyx_vtable_9uharfbuzz_9_harfbuzz_Blob;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Blob.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Blob *(*)(hb_blob_t *))__pyx_f_9uharfbuzz_9_harfbuzz_4Blob_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Blob_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Blob_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob = &__pyx_type_9uharfbuzz_9_harfbuzz_Blob;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Blob, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob) < (0)) __PYX_ERR(6, 1, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphInfo = &__pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphInfo;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphInfo.set = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphInfo *, hb_glyph_info_t))__pyx_f_9uharfbuzz_9_harfbuzz_9GlyphInfo_set;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo)) __PYX_ERR(7, 6, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo = &__pyx_type_9uharfbuzz_9_harfbuzz_GlyphInfo;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_GlyphInfo, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphInfo) < (0)) __PYX_ERR(7, 6, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphPosition = &__pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphPosition;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_GlyphPosition.set = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_GlyphPosition *, hb_glyph_position_t))__pyx_f_9uharfbuzz_9_harfbuzz_13GlyphPosition_set;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition)) __PYX_ERR(7, 27, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition = &__pyx_type_9uharfbuzz_9_harfbuzz_GlyphPosition;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_GlyphPosition, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_GlyphPosition) < (0)) __PYX_ERR(7, 27, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Buffer_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer)) __PYX_ERR(7, 98, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Buffer_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer) < (0)) __PYX_ERR(7, 98, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer = &__pyx_type_9uharfbuzz_9_harfbuzz_Buffer;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer) < (0)) __PYX_ERR(7, 98, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Buffer, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer) < (0)) __PYX_ERR(7, 98, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer) < (0)) __PYX_ERR(7, 98, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Face = &__pyx_vtable_9uharfbuzz_9_harfbuzz_Face;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Face.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *(*)(hb_face_t *))__pyx_f_9uharfbuzz_9_harfbuzz_4Face_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Face_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face)) __PYX_ERR(1, 122, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Face_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face = &__pyx_type_9uharfbuzz_9_harfbuzz_Face;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Face, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face) < (0)) __PYX_ERR(1, 122, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs)) __PYX_ERR(8, 51, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs) < (0)) __PYX_ERR(8, 51, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs = &__pyx_type_9uharfbuzz_9_harfbuzz_DrawFuncs;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs) < (0)) __PYX_ERR(8, 51, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_DrawFuncs, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs) < (0)) __PYX_ERR(8, 51, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs) < (0)) __PYX_ERR(8, 51, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_ColorLine = &__pyx_vtable_9uharfbuzz_9_harfbuzz_ColorLine;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_ColorLine.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_ColorLine *(*)(hb_color_line_t *))__pyx_f_9uharfbuzz_9_harfbuzz_9ColorLine_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine)) __PYX_ERR(9, 44, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine = &__pyx_type_9uharfbuzz_9_harfbuzz_ColorLine;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_ColorLine, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_ColorLine) < (0)) __PYX_ERR(9, 44, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs)) __PYX_ERR(9, 256, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs) < (0)) __PYX_ERR(9, 256, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs = &__pyx_type_9uharfbuzz_9_harfbuzz_PaintFuncs;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs) < (0)) __PYX_ERR(9, 256, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_PaintFuncs, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs) < (0)) __PYX_ERR(9, 256, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs) < (0)) __PYX_ERR(9, 256, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Font = &__pyx_vtable_9uharfbuzz_9_harfbuzz_Font;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Font._Font__create = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Face *))__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Font._Font__create_sub_font = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *, struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *))__pyx_f_9uharfbuzz_9_harfbuzz_4Font__Font__create_sub_font;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_Font.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_Font *(*)(hb_font_t *))__pyx_f_9uharfbuzz_9_harfbuzz_4Font_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_Font_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font)) __PYX_ERR(3, 140, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_Font_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font = &__pyx_type_9uharfbuzz_9_harfbuzz_Font;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Font, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font) < (0)) __PYX_ERR(3, 140, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs)) __PYX_ERR(3, 775, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs) < (0)) __PYX_ERR(3, 775, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs = &__pyx_type_9uharfbuzz_9_harfbuzz_FontFuncs;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs) < (0)) __PYX_ERR(3, 775, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_FontFuncs, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs) < (0)) __PYX_ERR(3, 775, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs) < (0)) __PYX_ERR(3, 775, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_RasterImage = &__pyx_vtable_9uharfbuzz_9_harfbuzz_RasterImage;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_RasterImage.from_ptr = (struct __pyx_obj_9uharfbuzz_9_harfbuzz_RasterImage *(*)(hb_raster_image_t *))__pyx_f_9uharfbuzz_9_harfbuzz_11RasterImage_from_ptr;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage)) __PYX_ERR(10, 14, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage = &__pyx_type_9uharfbuzz_9_harfbuzz_RasterImage;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_RasterImage, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage) < (0)) __PYX_ERR(10, 14, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw)) __PYX_ERR(10, 78, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw) < (0)) __PYX_ERR(10, 78, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw = &__pyx_type_9uharfbuzz_9_harfbuzz_RasterDraw;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw) < (0)) __PYX_ERR(10, 78, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_RasterDraw, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw) < (0)) __PYX_ERR(10, 78, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw) < (0)) __PYX_ERR(10, 78, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint)) __PYX_ERR(10, 161, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint) < (0)) __PYX_ERR(10, 161, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint = &__pyx_type_9uharfbuzz_9_harfbuzz_RasterPaint;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint) < (0)) __PYX_ERR(10, 161, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_RasterPaint, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint) < (0)) __PYX_ERR(10, 161, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint) < (0)) __PYX_ERR(10, 161, __pyx_L1_error)
  __pyx_vtabptr_9uharfbuzz_9_harfbuzz_HBObject = &__pyx_vtable_9uharfbuzz_9_harfbuzz_HBObject;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_HBObject.update_obj_length = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, char *, char *))__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_obj_length;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_HBObject.create_links = (hb_subset_serialize_link_t *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, unsigned int, int))__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_create_links;
  __pyx_vtable_9uharfbuzz_9_harfbuzz_HBObject.update_links = (PyObject *(*)(struct __pyx_obj_9uharfbuzz_9_harfbuzz_HBObject *, unsigned int, int, PyObject *))__pyx_f_9uharfbuzz_9_harfbuzz_8HBObject_update_links;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_HBObject_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject)) __PYX_ERR(11, 1, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_HBObject_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject = &__pyx_type_9uharfbuzz_9_harfbuzz_HBObject;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject, __pyx_vtabptr_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_HBObject, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_HBObject) < (0)) __PYX_ERR(11, 1, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput)) __PYX_ERR(12, 36, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput) < (0)) __PYX_ERR(12, 36, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput = &__pyx_type_9uharfbuzz_9_harfbuzz_SubsetInput;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput) < (0)) __PYX_ERR(12, 36, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_SubsetInput, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput) < (0)) __PYX_ERR(12, 36, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput) < (0)) __PYX_ERR(12, 36, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan)) __PYX_ERR(12, 139, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan) < (0)) __PYX_ERR(12, 139, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan = &__pyx_type_9uharfbuzz_9_harfbuzz_SubsetPlan;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan) < (0)) __PYX_ERR(12, 139, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_SubsetPlan, (PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan) < (0)) __PYX_ERR(12, 139, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan) < (0)) __PYX_ERR(12, 139, __pyx_L1_error)
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated)) __PYX_ERR(0, 41, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated) < (0)) __PYX_ERR(0, 41, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated) < (0)) __PYX_ERR(0, 41, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct__deprecated->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator)) __PYX_ERR(0, 44, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator) < (0)) __PYX_ERR(0, 44, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator) < (0)) __PYX_ERR(0, 44, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_1_decorator->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr)) __PYX_ERR(2, 169, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr) < (0)) __PYX_ERR(2, 169, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr) < (0)) __PYX_ERR(2, 169, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_2_genexpr->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr)) __PYX_ERR(5, 100, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr) < (0)) __PYX_ERR(5, 100, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr) < (0)) __PYX_ERR(5, 100, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_3_genexpr->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr)) __PYX_ERR(5, 103, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr) < (0)) __PYX_ERR(5, 103, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr) < (0)) __PYX_ERR(5, 103, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_4_genexpr->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr)) __PYX_ERR(5, 109, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr_spec, __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr) < (0)) __PYX_ERR(5, 109, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr = &__pyx_type_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr) < (0)) __PYX_ERR(5, 109, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr->tp_dictoffset && __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_9uharfbuzz_9_harfbuzz___pyx_scope_struct_5_genexpr->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec__harfbuzz(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec__harfbuzz},
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  {Py_mod_gil, __Pyx_FREETHREADING_COMPATIBLE},
  #endif
  #if PY_VERSION_HEX >= 0x030C0000 && CYTHON_USE_MODULE_STATE
  {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
  #endif
  {0, NULL}
};
#endif

#ifdef __cplusplus
namespace {
  struct PyModuleDef __pyx_moduledef =
  #else
  static struct PyModuleDef __pyx_moduledef =
  #endif
  {
      PyModuleDef_HEAD_INIT,
      "_harfbuzz",
      0, /* m_doc */
    #if CYTHON_USE_MODULE_STATE
      sizeof(__pyx_mstatetype), /* m_size */
    #else
      (CYTHON_PEP489_MULTI_PHASE_INIT) ? 0 : -1, /* m_size */
    #endif
      __pyx_methods /* m_methods */,
    #if CYTHON_PEP489_MULTI_PHASE_INIT
      __pyx_moduledef_slots, /* m_slots */
    #else
      NULL, /* m_reload */
    #endif
    #if CYTHON_USE_MODULE_STATE
      __pyx_m_traverse, /* m_traverse */
      __pyx_m_clear, /* m_clear */
      NULL /* m_free */
    #else
      NULL, /* m_traverse */
      NULL, /* m_clear */
      NULL /* m_free */
    #endif
  };
  #ifdef __cplusplus
} /* anonymous namespace */
#endif

/* PyModInitFuncType */
#ifndef CYTHON_NO_PYINIT_EXPORT
  #define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#else
  #ifdef __cplusplus
  #define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
  #else
  #define __Pyx_PyMODINIT_FUNC PyObject *
  #endif
#endif

__Pyx_PyMODINIT_FUNC PyInit__harfbuzz(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit__harfbuzz(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  return PyModuleDef_Init(&__pyx_moduledef);
}
/* ModuleCreationPEP489 */
#if CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
      || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
static PY_INT64_T __Pyx_GetCurrentInterpreterId(void) {
    {
        PyObject *module = PyImport_ImportModule("_interpreters"); // 3.13+ I think
        if (!module) {
            PyErr_Clear(); // just try the 3.8-3.12 version
            module = PyImport_ImportModule("_xxsubinterpreters");
            if (!module) goto bad;
        }
        PyObject *current = PyObject_CallMethod(module, "get_current", NULL);
        Py_DECREF(module);
        if (!current) goto bad;
        if (PyTuple_Check(current)) {
            PyObject *new_current = PySequence_GetItem(current, 0);
            Py_DECREF(current);
            current = new_current;
            if (!new_current) goto bad;
        }
        long long as_c_int = PyLong_AsLongLong(current);
        Py_DECREF(current);
        return as_c_int;
    }
  bad:
    PySys_WriteStderr("__Pyx_GetCurrentInterpreterId failed. Try setting the C define CYTHON_PEP489_MULTI_PHASE_INIT=0\n");
    return -1;
}
#endif
#if !CYTHON_USE_MODULE_STATE
static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
    static PY_INT64_T main_interpreter_id = -1;
#if CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
    PY_INT64_T current_id = GraalPyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
#elif CYTHON_COMPILING_IN_GRAAL
    PY_INT64_T current_id = PyInterpreterState_GetIDFromThreadState(PyThreadState_Get());
#elif CYTHON_COMPILING_IN_LIMITED_API && (__PYX_LIMITED_VERSION_HEX < 0x03090000\
      || ((defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)) && __PYX_LIMITED_VERSION_HEX < 0x030A0000))
    PY_INT64_T current_id = __Pyx_GetCurrentInterpreterId();
#elif CYTHON_COMPILING_IN_LIMITED_API
    PY_INT64_T current_id = PyInterpreterState_GetID(PyInterpreterState_Get());
#else
    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
#endif
    if (unlikely(current_id == -1)) {
        return -1;
    }
    if (main_interpreter_id == -1) {
        main_interpreter_id = current_id;
        return 0;
    } else if (unlikely(main_interpreter_id != current_id)) {
        PyErr_SetString(
            PyExc_ImportError,
            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
        return -1;
    }
    return 0;
}
#endif
static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none)
{
    PyObject *value = PyObject_GetAttrString(spec, from_name);
    int result = 0;
    if (likely(value)) {
        if (allow_none || value != Py_None) {
            result = PyDict_SetItemString(moddict, to_name, value);
        }
        Py_DECREF(value);
    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Clear();
    } else {
        result = -1;
    }
    return result;
}
static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    CYTHON_UNUSED_VAR(def);
    #if !CYTHON_USE_MODULE_STATE
    if (__Pyx_check_single_interpreter())
        return NULL;
    #endif
    if (__pyx_m)
        return __Pyx_NewRef(__pyx_m);
    modname = PyObject_GetAttrString(spec, "name");
    if (unlikely(!modname)) goto bad;
    module = PyModule_NewObject(modname);
    Py_DECREF(modname);
    if (unlikely(!module)) goto bad;
    moddict = PyModule_GetDict(module);
    if (unlikely(!moddict)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
    return module;
bad:
    Py_XDECREF(module);
    return NULL;
}


static CYTHON_SMALL_CODE int __pyx_pymod_exec__harfbuzz(PyObject *__pyx_pyinit_module)
#endif
{
  int stringtab_initialized = 0;
  #if CYTHON_USE_MODULE_STATE
  int pystate_addmodule_run = 0;
  #endif
  __pyx_mstatetype *__pyx_mstate = NULL;
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  Py_ssize_t __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module '_harfbuzz' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #else
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  /*--- Module creation code ---*/
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __pyx_t_1 = __pyx_pyinit_module;
  Py_INCREF(__pyx_t_1);
  #else
  __pyx_t_1 = PyModule_Create(&__pyx_moduledef); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #if CYTHON_USE_MODULE_STATE
  {
    int add_module_result = __Pyx_State_AddModule(__pyx_t_1, &__pyx_moduledef);
    __pyx_t_1 = 0; /* transfer ownership from __pyx_t_1 to "_harfbuzz" pseudovariable */
    if (unlikely((add_module_result < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    pystate_addmodule_run = 1;
  }
  #else
  __pyx_m = __pyx_t_1;
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  PyUnstable_Module_SetGIL(__pyx_m, Py_MOD_GIL_USED);
  #endif
  __pyx_mstate = __pyx_mstate_global;
  CYTHON_UNUSED_VAR(__pyx_t_1);
  __pyx_mstate->__pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_mstate->__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_mstate->__pyx_d);
  __pyx_mstate->__pyx_b = __Pyx_PyImport_AddModuleRef(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_mstate->__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_cython_runtime = __Pyx_PyImport_AddModuleRef("cython_runtime"); if (unlikely(!__pyx_mstate->__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_mstate->__pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /* ImportRefnannyAPI */
  #if CYTHON_REFNANNY
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
  if (!__Pyx_RefNanny) {
    PyErr_Clear();
    __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
    if (!__Pyx_RefNanny)
        Py_FatalError("failed to import 'refnanny' module");
  }
  #endif
  
__Pyx_RefNannySetupContext("PyInit__harfbuzz", 0);
  __Pyx_init_runtime_version();
  if (__Pyx_check_binary_version(__PYX_LIMITED_VERSION_HEX, __Pyx_get_runtime_version(), CYTHON_COMPILING_IN_LIMITED_API) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_mstate->__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_mstate->__pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_mstate->__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Library function declarations ---*/
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  stringtab_initialized = 1;
  if (__Pyx_InitGlobals() < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__pyx_module_is_main_uharfbuzz___harfbuzz) {
    if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_name, __pyx_mstate_global->__pyx_n_u_main) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "uharfbuzz._harfbuzz")) {
      if (unlikely((PyDict_SetItemString(modules, "uharfbuzz._harfbuzz", __pyx_m) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_CreateCodeObjects(__pyx_mstate) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Global type/function init code ---*/
  (void)__Pyx_modinit_global_init_code(__pyx_mstate);
  (void)__Pyx_modinit_variable_export_code(__pyx_mstate);
  (void)__Pyx_modinit_function_export_code(__pyx_mstate);
  if (unlikely((__Pyx_modinit_type_init_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  (void)__Pyx_modinit_type_import_code(__pyx_mstate);
  (void)__Pyx_modinit_variable_import_code(__pyx_mstate);
  (void)__Pyx_modinit_function_import_code(__pyx_mstate);
  /*--- Execution code ---*/

  /* "uharfbuzz/_harfbuzz.pyx":3
 * #cython: language_level=3
 * cimport cython
 * import os             # <<<<<<<<<<<<<<
 * import warnings
 * from enum import IntEnum, IntFlag
*/
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_os, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_os, __pyx_t_2) < (0)) __PYX_ERR(0, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":4
 * cimport cython
 * import os
 * import warnings             # <<<<<<<<<<<<<<
 * from enum import IntEnum, IntFlag
 * from .charfbuzz cimport *
*/
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_warnings, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_warnings, __pyx_t_2) < (0)) __PYX_ERR(0, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":5
 * import os
 * import warnings
 * from enum import IntEnum, IntFlag             # <<<<<<<<<<<<<<
 * from .charfbuzz cimport *
 * from libc.stdlib cimport free, malloc, calloc
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_IntEnum,__pyx_mstate_global->__pyx_n_u_IntFlag};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_enum, __pyx_imported_names, 2, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_IntEnum,__pyx_mstate_global->__pyx_n_u_IntFlag};
    for (__pyx_t_3=0; __pyx_t_3 < 2; __pyx_t_3++) {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 5, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":13
 * from cpython.unicode cimport PyUnicode_GetLength, PyUnicode_AsUCS4Copy
 * from cpython.mem cimport PyMem_Free
 * from typing import Callable, Dict, List, Sequence, Tuple, Union, NamedTuple             # <<<<<<<<<<<<<<
 * from pathlib import Path
 * from functools import wraps
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Callable,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Sequence,__pyx_mstate_global->__pyx_n_u_Tuple,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_NamedTuple};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_typing, __pyx_imported_names, 7, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Callable,__pyx_mstate_global->__pyx_n_u_Dict,__pyx_mstate_global->__pyx_n_u_List,__pyx_mstate_global->__pyx_n_u_Sequence,__pyx_mstate_global->__pyx_n_u_Tuple,__pyx_mstate_global->__pyx_n_u_Union,__pyx_mstate_global->__pyx_n_u_NamedTuple};
    for (__pyx_t_3=0; __pyx_t_3 < 7; __pyx_t_3++) {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 13, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":14
 * from cpython.mem cimport PyMem_Free
 * from typing import Callable, Dict, List, Sequence, Tuple, Union, NamedTuple
 * from pathlib import Path             # <<<<<<<<<<<<<<
 * from functools import wraps
 * 
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Path};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_pathlib, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_Path};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 14, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 14, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":15
 * from typing import Callable, Dict, List, Sequence, Tuple, Union, NamedTuple
 * from pathlib import Path
 * from functools import wraps             # <<<<<<<<<<<<<<
 * 
 * # Declare Limited API types and functions (Python 3.3+)
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_wraps};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_functools, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1;
  __Pyx_GOTREF(__pyx_t_2);
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_wraps};
    __pyx_t_3 = 0; {
      __pyx_t_4 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_3]); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_3], __pyx_t_4) < (0)) __PYX_ERR(0, 15, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":32
 * 
 * 
 * def version_string() -> str:             # <<<<<<<<<<<<<<
 *     cdef const char* cstr = hb_version_string()
 *     cdef bytes packed = cstr
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 32, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_1version_string, 0, __pyx_mstate_global->__pyx_n_u_version_string, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_version_string, __pyx_t_4) < (0)) __PYX_ERR(0, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":38
 * 
 * 
 * WARNED = set()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_WARNED, __pyx_t_4) < (0)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3deprecated, 0, __pyx_mstate_global->__pyx_n_u_deprecated, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[0]);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_deprecated, __pyx_t_4) < (0)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":60
 * 
 * 
 * class HarfBuzzError(Exception):             # <<<<<<<<<<<<<<
 *     pass
 * 
*/
  __pyx_t_4 = PyTuple_Pack(1, ((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_HarfBuzzError, __pyx_mstate_global->__pyx_n_u_HarfBuzzError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__pyx_t_2 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(0, 60, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HarfBuzzError, __pyx_t_2, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_HarfBuzzError, __pyx_t_4) < (0)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":4
 *     cdef hb_set_t* _hb_set
 * 
 *     INVALID_VALUE = HB_SET_VALUE_INVALID             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self, *args, **kwargs):
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_codepoint_t(HB_SET_VALUE_INVALID); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_INVALID_VALUE, __pyx_t_2) < (0)) __PYX_ERR(2, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":9
 *         self._hb_set = NULL
 * 
 *     def __init__(self, init = set()):             # <<<<<<<<<<<<<<
 *         self._hb_set = hb_set_create()
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k_ = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Set:             # <<<<<<<<<<<<<<
 *         c = Set()
 *         c._hb_set = hb_set_copy(self._hb_set)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 27, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_copy, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_copy, __pyx_t_5) < (0)) __PYX_ERR(2, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Set:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 32, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_9__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set___copy, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_copy_2, __pyx_t_2) < (0)) __PYX_ERR(2, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":35
 *         return self.copy()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_set_clear(self._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_11clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_clear, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_2) < (0)) __PYX_ERR(2, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":41
 *         return not hb_set_is_empty(self._hb_set)
 * 
 *     def invert(self):             # <<<<<<<<<<<<<<
 *         hb_set_invert(self._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_15invert, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_invert, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_invert, __pyx_t_2) < (0)) __PYX_ERR(2, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":44
 *         hb_set_invert(self._hb_set)
 * 
 *     def is_inverted(self) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_inverted(self._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(2, 44, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_17is_inverted, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_is_inverted, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_is_inverted, __pyx_t_5) < (0)) __PYX_ERR(2, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":54
 *         return hb_set_has(self._hb_set, c)
 * 
 *     def add(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_add(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_c, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 54, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_21add, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_add, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_add, __pyx_t_2) < (0)) __PYX_ERR(2, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":59
 *             raise MemoryError()
 * 
 *     def add_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_add_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_first, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 59, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_last, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 59, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_23add_range, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_add_range, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_add_range, __pyx_t_5) < (0)) __PYX_ERR(2, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":64
 *             raise MemoryError()
 * 
 *     def remove(self, c: int):             # <<<<<<<<<<<<<<
 *         if not c in self:
 *             raise KeyError, c
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_c, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 64, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_25remove, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_remove, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_remove, __pyx_t_2) < (0)) __PYX_ERR(2, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":71
 *             raise MemoryError()
 * 
 *     def discard(self, c: int):             # <<<<<<<<<<<<<<
 *         hb_set_del(self._hb_set, c)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_c, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 71, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_27discard, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_discard, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_discard, __pyx_t_5) < (0)) __PYX_ERR(2, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":76
 *             raise MemoryError()
 * 
 *     def del_range(self, first: int, last: int):             # <<<<<<<<<<<<<<
 *         hb_set_del_range(self._hb_set, first, last)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_first, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_last, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(2, 76, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_29del_range, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_del_range, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[17])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_del_range, __pyx_t_2) < (0)) __PYX_ERR(2, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":81
 *             raise MemoryError()
 * 
 *     def _is_equal(self, other: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_equal(self._hb_set, other._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 81, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(2, 81, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_31_is_equal, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set__is_equal, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[18])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_is_equal, __pyx_t_5) < (0)) __PYX_ERR(2, 81, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":89
 *         return self._is_equal(other)
 * 
 *     def issubset(self, larger_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_larger_set, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 89, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(2, 89, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_35issubset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_issubset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[19])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_issubset, __pyx_t_2) < (0)) __PYX_ERR(2, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":92
 *         return hb_set_is_subset(self._hb_set, larger_set._hb_set)
 * 
 *     def issuperset(self, smaller_set: Set) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_smaller_set, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 92, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(2, 92, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_37issuperset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_issuperset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[20])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_issuperset, __pyx_t_5) < (0)) __PYX_ERR(2, 92, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":95
 *         return hb_set_is_subset(smaller_set._hb_set, self._hb_set)
 * 
 *     def _set(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 95, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_39_set, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set__set, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[21])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_set_2, __pyx_t_2) < (0)) __PYX_ERR(2, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":98
 *         hb_set_set(self._hb_set, other._hb_set)
 * 
 *     def set(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._set(other)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_41set, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_set, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[22])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_set, __pyx_t_2) < (0)) __PYX_ERR(2, 98, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":108
 *             raise MemoryError()
 * 
 *     def _update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 108, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_43_update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set__update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_update, __pyx_t_5) < (0)) __PYX_ERR(2, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":111
 *         hb_set_union(self._hb_set, other._hb_set)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Set:
 *             self._update(other)
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_45update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_update_2, __pyx_t_5) < (0)) __PYX_ERR(2, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":125
 *         return self
 * 
 *     def intersection_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_intersect(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 125, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_49intersection_update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_intersection_update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_intersection_update, __pyx_t_2) < (0)) __PYX_ERR(2, 125, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_set.pxi":134
 *         return self
 * 
 *     def difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_subtract(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 134, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_53difference_update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_difference_update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_difference_update, __pyx_t_5) < (0)) __PYX_ERR(2, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_set.pxi":143
 *         return self
 * 
 *     def symmetric_difference_update(self, other: Set):             # <<<<<<<<<<<<<<
 *         hb_set_symmetric_difference(self._hb_set, other._hb_set)
 *         if not hb_set_allocation_successful(self._hb_set):
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(2, 143, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_57symmetric_difference_update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set_symmetric_difference_update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 143, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Set, __pyx_mstate_global->__pyx_n_u_symmetric_difference_update, __pyx_t_2) < (0)) __PYX_ERR(2, 143, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_67__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Set_69__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Set___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_7SetIter_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SetIter___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_7SetIter_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SetIter___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":4
 *     cdef hb_map_t* _hb_map
 * 
 *     INVALID_VALUE = HB_MAP_VALUE_INVALID             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self, *args, **kwargs):
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_codepoint_t(HB_MAP_VALUE_INVALID); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_INVALID_VALUE, __pyx_t_2) < (0)) __PYX_ERR(5, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":9
 *         self._hb_map = NULL
 * 
 *     def __init__(self, init = dict()):             # <<<<<<<<<<<<<<
 *         self._hb_map = hb_map_create()
 *         if not hb_map_allocation_successful(self._hb_map):
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_mstate_global->__pyx_k__3 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":27
 *         return wrapper
 * 
 *     def copy(self) -> Map:             # <<<<<<<<<<<<<<
 *         c = Map()
 *         c._hb_map = hb_map_copy(self._hb_map)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Map) < (0)) __PYX_ERR(5, 27, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_7copy, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_copy, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_copy, __pyx_t_5) < (0)) __PYX_ERR(5, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":32
 *         return c
 * 
 *     def __copy__(self) -> Map:             # <<<<<<<<<<<<<<
 *         return self.copy()
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Map) < (0)) __PYX_ERR(5, 32, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_9__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map___copy, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_copy_2, __pyx_t_2) < (0)) __PYX_ERR(5, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":35
 *         return self.copy()
 * 
 *     def _update(self, other : Map):             # <<<<<<<<<<<<<<
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Map) < (0)) __PYX_ERR(5, 35, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_11_update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map__update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_update, __pyx_t_5) < (0)) __PYX_ERR(5, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":38
 *         hb_map_update(self._hb_map, other._hb_map)
 * 
 *     def update(self, other):             # <<<<<<<<<<<<<<
 *         if type(other) == Map:
 *             self._update(other)
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_13update, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_update, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_update_2, __pyx_t_5) < (0)) __PYX_ERR(5, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":48
 *             raise MemoryError()
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_map_clear(self._hb_map)
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_15clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_clear, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_5) < (0)) __PYX_ERR(5, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":57
 *         return hb_map_get_population(self._hb_map)
 * 
 *     def _is_equal(self, other: Map) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_map_is_equal(self._hb_map, other._hb_map)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_other, __pyx_mstate_global->__pyx_n_u_Map) < (0)) __PYX_ERR(5, 57, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(5, 57, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_21_is_equal, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map__is_equal, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_is_equal, __pyx_t_2) < (0)) __PYX_ERR(5, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_map.pxi":70
 *             raise MemoryError()
 * 
 *     def get(self, k: int):             # <<<<<<<<<<<<<<
 *         if k < 0 or k >= self.INVALID_VALUE:
 *             return None
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_k, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(5, 70, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_27get, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_get, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_get, __pyx_t_5) < (0)) __PYX_ERR(5, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":96
 *         hb_map_del(self._hb_map, c)
 * 
 *     def items(self):             # <<<<<<<<<<<<<<
 *         return MapIter(self)
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_35items, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_items, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_items, __pyx_t_5) < (0)) __PYX_ERR(5, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":99
 *         return MapIter(self)
 * 
 *     def keys(self):             # <<<<<<<<<<<<<<
 *         return (k for k,v in self.items())
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_37keys, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_keys, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_keys, __pyx_t_5) < (0)) __PYX_ERR(5, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_map.pxi":102
 *         return (k for k,v in self.items())
 * 
 *     def values(self):             # <<<<<<<<<<<<<<
 *         return (v for k,v in self.items())
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_39values, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map_values, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Map, __pyx_mstate_global->__pyx_n_u_values, __pyx_t_5) < (0)) __PYX_ERR(5, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_45__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_3Map_47__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Map___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_7MapIter_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_MapIter___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_7MapIter_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_MapIter___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_blob.pxi":19
 *         return wrapper
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_file_path(cls, filename: Union[str, Path]) -> Blob:
 *         cdef bytes packed = os.fsencode(filename)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_filename, __pyx_mstate_global->__pyx_kp_u_Union_str_Path) < (0)) __PYX_ERR(6, 19, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(6, 19, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_3from_file_path, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Blob_from_file_path, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob, __pyx_mstate_global->__pyx_n_u_from_file_path, __pyx_t_2) < (0)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob, __pyx_mstate_global->__pyx_n_u_from_file_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Blob, __pyx_mstate_global->__pyx_n_u_from_file_path, __pyx_t_5) < (0)) __PYX_ERR(6, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_11__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Blob___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Blob_13__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Blob___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":1
 * class GlyphFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     UNSAFE_TO_BREAK = HB_GLYPH_FLAG_UNSAFE_TO_BREAK
 *     UNSAFE_TO_CONCAT = HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_6, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_GlyphFlags, __pyx_mstate_global->__pyx_n_u_GlyphFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_5 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(7, 1, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":2
 * class GlyphFlags(IntFlag):
 *     UNSAFE_TO_BREAK = HB_GLYPH_FLAG_UNSAFE_TO_BREAK             # <<<<<<<<<<<<<<
 *     UNSAFE_TO_CONCAT = HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
 *     SAFE_TO_INSERT_TATWEEL = HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_glyph_flags_t(HB_GLYPH_FLAG_UNSAFE_TO_BREAK); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UNSAFE_TO_BREAK, __pyx_t_2) < (0)) __PYX_ERR(7, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":3
 * class GlyphFlags(IntFlag):
 *     UNSAFE_TO_BREAK = HB_GLYPH_FLAG_UNSAFE_TO_BREAK
 *     UNSAFE_TO_CONCAT = HB_GLYPH_FLAG_UNSAFE_TO_CONCAT             # <<<<<<<<<<<<<<
 *     SAFE_TO_INSERT_TATWEEL = HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_glyph_flags_t(HB_GLYPH_FLAG_UNSAFE_TO_CONCAT); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UNSAFE_TO_CONCAT, __pyx_t_2) < (0)) __PYX_ERR(7, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":4
 *     UNSAFE_TO_BREAK = HB_GLYPH_FLAG_UNSAFE_TO_BREAK
 *     UNSAFE_TO_CONCAT = HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
 *     SAFE_TO_INSERT_TATWEEL = HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL             # <<<<<<<<<<<<<<
 * 
 * cdef class GlyphInfo:
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_glyph_flags_t(HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SAFE_TO_INSERT_TATWEEL, __pyx_t_2) < (0)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":1
 * class GlyphFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     UNSAFE_TO_BREAK = HB_GLYPH_FLAG_UNSAFE_TO_BREAK
 *     UNSAFE_TO_CONCAT = HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_GlyphFlags, __pyx_t_5, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_GlyphFlags, __pyx_t_2) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9GlyphInfo_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GlyphInfo___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[49])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)"
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9GlyphInfo_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GlyphInfo___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[50])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_13GlyphPosition_1__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GlyphPosition___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[51])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)"
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_13GlyphPosition_3__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_GlyphPosition___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[52])); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":60
 * 
 * 
 * class BufferFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_BUFFER_FLAG_DEFAULT
 *     BOT = HB_BUFFER_FLAG_BOT
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferFlags, __pyx_mstate_global->__pyx_n_u_BufferFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_5 != __pyx_t_6) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_6) < 0))) __PYX_ERR(7, 60, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":61
 * 
 * class BufferFlags(IntFlag):
 *     DEFAULT = HB_BUFFER_FLAG_DEFAULT             # <<<<<<<<<<<<<<
 *     BOT = HB_BUFFER_FLAG_BOT
 *     EOT = HB_BUFFER_FLAG_EOT
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_DEFAULT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEFAULT, __pyx_t_6) < (0)) __PYX_ERR(7, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":62
 * class BufferFlags(IntFlag):
 *     DEFAULT = HB_BUFFER_FLAG_DEFAULT
 *     BOT = HB_BUFFER_FLAG_BOT             # <<<<<<<<<<<<<<
 *     EOT = HB_BUFFER_FLAG_EOT
 *     PRESERVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_BOT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BOT, __pyx_t_6) < (0)) __PYX_ERR(7, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":63
 *     DEFAULT = HB_BUFFER_FLAG_DEFAULT
 *     BOT = HB_BUFFER_FLAG_BOT
 *     EOT = HB_BUFFER_FLAG_EOT             # <<<<<<<<<<<<<<
 *     PRESERVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
 *     REMOVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_EOT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_EOT, __pyx_t_6) < (0)) __PYX_ERR(7, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":64
 *     BOT = HB_BUFFER_FLAG_BOT
 *     EOT = HB_BUFFER_FLAG_EOT
 *     PRESERVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES             # <<<<<<<<<<<<<<
 *     REMOVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
 *     DO_NOT_INSERT_DOTTED_CIRCLE = HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_PRESERVE_DEFAULT_IGNORABLES, __pyx_t_6) < (0)) __PYX_ERR(7, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":65
 *     EOT = HB_BUFFER_FLAG_EOT
 *     PRESERVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
 *     REMOVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES             # <<<<<<<<<<<<<<
 *     DO_NOT_INSERT_DOTTED_CIRCLE = HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
 *     VERIFY = HB_BUFFER_FLAG_VERIFY
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_REMOVE_DEFAULT_IGNORABLES, __pyx_t_6) < (0)) __PYX_ERR(7, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":66
 *     PRESERVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES
 *     REMOVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
 *     DO_NOT_INSERT_DOTTED_CIRCLE = HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE             # <<<<<<<<<<<<<<
 *     VERIFY = HB_BUFFER_FLAG_VERIFY
 *     PRODUCE_UNSAFE_TO_CONCAT = HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DO_NOT_INSERT_DOTTED_CIRCLE, __pyx_t_6) < (0)) __PYX_ERR(7, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":67
 *     REMOVE_DEFAULT_IGNORABLES = HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
 *     DO_NOT_INSERT_DOTTED_CIRCLE = HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
 *     VERIFY = HB_BUFFER_FLAG_VERIFY             # <<<<<<<<<<<<<<
 *     PRODUCE_UNSAFE_TO_CONCAT = HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
 *     PRODUCE_SAFE_TO_INSERT_TATWEEL = HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_VERIFY); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_VERIFY, __pyx_t_6) < (0)) __PYX_ERR(7, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":68
 *     DO_NOT_INSERT_DOTTED_CIRCLE = HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE
 *     VERIFY = HB_BUFFER_FLAG_VERIFY
 *     PRODUCE_UNSAFE_TO_CONCAT = HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT             # <<<<<<<<<<<<<<
 *     PRODUCE_SAFE_TO_INSERT_TATWEEL = HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
 * 
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_PRODUCE_UNSAFE_TO_CONCAT, __pyx_t_6) < (0)) __PYX_ERR(7, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":69
 *     VERIFY = HB_BUFFER_FLAG_VERIFY
 *     PRODUCE_UNSAFE_TO_CONCAT = HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT
 *     PRODUCE_SAFE_TO_INSERT_TATWEEL = HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL             # <<<<<<<<<<<<<<
 * 
 * class BufferClusterLevel(IntEnum):
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_flags_t(HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_PRODUCE_SAFE_TO_INSERT_TATWEEL, __pyx_t_6) < (0)) __PYX_ERR(7, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":60
 * 
 * 
 * class BufferFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_BUFFER_FLAG_DEFAULT
 *     BOT = HB_BUFFER_FLAG_BOT
*/
  __pyx_t_6 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BufferFlags, __pyx_t_5, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_6);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_BufferFlags, __pyx_t_6) < (0)) __PYX_ERR(7, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":71
 *     PRODUCE_SAFE_TO_INSERT_TATWEEL = HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
 * 
 * class BufferClusterLevel(IntEnum):             # <<<<<<<<<<<<<<
 *     MONOTONE_GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__pyx_t_5 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(7, 71, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":72
 * 
 * class BufferClusterLevel(IntEnum):
 *     MONOTONE_GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES             # <<<<<<<<<<<<<<
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS
 *     CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_CHARACTERS
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 72, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_MONOTONE_GRAPHEMES, __pyx_t_4) < (0)) __PYX_ERR(7, 72, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":73
 * class BufferClusterLevel(IntEnum):
 *     MONOTONE_GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS             # <<<<<<<<<<<<<<
 *     CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_CHARACTERS
 *     GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_MONOTONE_CHARACTERS, __pyx_t_4) < (0)) __PYX_ERR(7, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":74
 *     MONOTONE_GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS
 *     CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_CHARACTERS             # <<<<<<<<<<<<<<
 *     GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES
 *     DEFAULT = HB_BUFFER_CLUSTER_LEVEL_DEFAULT
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(HB_BUFFER_CLUSTER_LEVEL_CHARACTERS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_CHARACTERS, __pyx_t_4) < (0)) __PYX_ERR(7, 74, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":75
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS
 *     CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_CHARACTERS
 *     GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_BUFFER_CLUSTER_LEVEL_DEFAULT
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_GRAPHEMES, __pyx_t_4) < (0)) __PYX_ERR(7, 75, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":76
 *     CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_CHARACTERS
 *     GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_GRAPHEMES
 *     DEFAULT = HB_BUFFER_CLUSTER_LEVEL_DEFAULT             # <<<<<<<<<<<<<<
 * 
 * class BufferContentType(IntEnum):
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_cluster_level_t(HB_BUFFER_CLUSTER_LEVEL_DEFAULT); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_DEFAULT, __pyx_t_4) < (0)) __PYX_ERR(7, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":71
 *     PRODUCE_SAFE_TO_INSERT_TATWEEL = HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL
 * 
 * class BufferClusterLevel(IntEnum):             # <<<<<<<<<<<<<<
 *     MONOTONE_GRAPHEMES = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES
 *     MONOTONE_CHARACTERS = HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel, __pyx_t_5, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_BufferClusterLevel, __pyx_t_4) < (0)) __PYX_ERR(7, 71, __pyx_L1_error)
  __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":78
 *     DEFAULT = HB_BUFFER_CLUSTER_LEVEL_DEFAULT
 * 
 * class BufferContentType(IntEnum):             # <<<<<<<<<<<<<<
 *     INVALID = HB_BUFFER_CONTENT_TYPE_INVALID
 *     UNICODE = HB_BUFFER_CONTENT_TYPE_UNICODE
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_6, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferContentType, __pyx_mstate_global->__pyx_n_u_BufferContentType, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_5 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(7, 78, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":79
 * 
 * class BufferContentType(IntEnum):
 *     INVALID = HB_BUFFER_CONTENT_TYPE_INVALID             # <<<<<<<<<<<<<<
 *     UNICODE = HB_BUFFER_CONTENT_TYPE_UNICODE
 *     GLYPHS = HB_BUFFER_CONTENT_TYPE_GLYPHS
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_buffer_content_type_t(HB_BUFFER_CONTENT_TYPE_INVALID); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_INVALID, __pyx_t_2) < (0)) __PYX_ERR(7, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":80
 * class BufferContentType(IntEnum):
 *     INVALID = HB_BUFFER_CONTENT_TYPE_INVALID
 *     UNICODE = HB_BUFFER_CONTENT_TYPE_UNICODE             # <<<<<<<<<<<<<<
 *     GLYPHS = HB_BUFFER_CONTENT_TYPE_GLYPHS
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_buffer_content_type_t(HB_BUFFER_CONTENT_TYPE_UNICODE); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UNICODE, __pyx_t_2) < (0)) __PYX_ERR(7, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":81
 *     INVALID = HB_BUFFER_CONTENT_TYPE_INVALID
 *     UNICODE = HB_BUFFER_CONTENT_TYPE_UNICODE
 *     GLYPHS = HB_BUFFER_CONTENT_TYPE_GLYPHS             # <<<<<<<<<<<<<<
 * 
 * class BufferSerializeFormat(IntEnum):
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_buffer_content_type_t(HB_BUFFER_CONTENT_TYPE_GLYPHS); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_GLYPHS, __pyx_t_2) < (0)) __PYX_ERR(7, 81, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":78
 *     DEFAULT = HB_BUFFER_CLUSTER_LEVEL_DEFAULT
 * 
 * class BufferContentType(IntEnum):             # <<<<<<<<<<<<<<
 *     INVALID = HB_BUFFER_CONTENT_TYPE_INVALID
 *     UNICODE = HB_BUFFER_CONTENT_TYPE_UNICODE
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_BufferContentType, __pyx_t_5, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_BufferContentType, __pyx_t_2) < (0)) __PYX_ERR(7, 78, __pyx_L1_error)
  __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":83
 *     GLYPHS = HB_BUFFER_CONTENT_TYPE_GLYPHS
 * 
 * class BufferSerializeFormat(IntEnum):             # <<<<<<<<<<<<<<
 *     TEXT = HB_BUFFER_SERIALIZE_FORMAT_TEXT
 *     JSON = HB_BUFFER_SERIALIZE_FORMAT_JSON
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_5 != __pyx_t_6) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_6) < 0))) __PYX_ERR(7, 83, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":84
 * 
 * class BufferSerializeFormat(IntEnum):
 *     TEXT = HB_BUFFER_SERIALIZE_FORMAT_TEXT             # <<<<<<<<<<<<<<
 *     JSON = HB_BUFFER_SERIALIZE_FORMAT_JSON
 *     INVALID = HB_BUFFER_SERIALIZE_FORMAT_INVALID
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_serialize_format_t(HB_BUFFER_SERIALIZE_FORMAT_TEXT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 84, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_TEXT, __pyx_t_6) < (0)) __PYX_ERR(7, 84, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":85
 * class BufferSerializeFormat(IntEnum):
 *     TEXT = HB_BUFFER_SERIALIZE_FORMAT_TEXT
 *     JSON = HB_BUFFER_SERIALIZE_FORMAT_JSON             # <<<<<<<<<<<<<<
 *     INVALID = HB_BUFFER_SERIALIZE_FORMAT_INVALID
 * 
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_serialize_format_t(HB_BUFFER_SERIALIZE_FORMAT_JSON); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_JSON, __pyx_t_6) < (0)) __PYX_ERR(7, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":86
 *     TEXT = HB_BUFFER_SERIALIZE_FORMAT_TEXT
 *     JSON = HB_BUFFER_SERIALIZE_FORMAT_JSON
 *     INVALID = HB_BUFFER_SERIALIZE_FORMAT_INVALID             # <<<<<<<<<<<<<<
 * 
 * class BufferSerializeFlags(IntFlag):
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_buffer_serialize_format_t(HB_BUFFER_SERIALIZE_FORMAT_INVALID); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 86, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_INVALID, __pyx_t_6) < (0)) __PYX_ERR(7, 86, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_buffer.pxi":83
 *     GLYPHS = HB_BUFFER_CONTENT_TYPE_GLYPHS
 * 
 * class BufferSerializeFormat(IntEnum):             # <<<<<<<<<<<<<<
 *     TEXT = HB_BUFFER_SERIALIZE_FORMAT_TEXT
 *     JSON = HB_BUFFER_SERIALIZE_FORMAT_JSON
*/
  __pyx_t_6 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat, __pyx_t_5, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_6);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat, __pyx_t_6) < (0)) __PYX_ERR(7, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":88
 *     INVALID = HB_BUFFER_SERIALIZE_FORMAT_INVALID
 * 
 * class BufferSerializeFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__pyx_t_5 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(7, 88, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":89
 * 
 * class BufferSerializeFlags(IntFlag):
 *     DEFAULT = HB_BUFFER_SERIALIZE_FLAG_DEFAULT             # <<<<<<<<<<<<<<
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS
 *     NO_POSITIONS = HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_DEFAULT); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_DEFAULT, __pyx_t_4) < (0)) __PYX_ERR(7, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":90
 * class BufferSerializeFlags(IntFlag):
 *     DEFAULT = HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS             # <<<<<<<<<<<<<<
 *     NO_POSITIONS = HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS
 *     NO_GLYPH_NAMES = HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_NO_CLUSTERS, __pyx_t_4) < (0)) __PYX_ERR(7, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":91
 *     DEFAULT = HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS
 *     NO_POSITIONS = HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS             # <<<<<<<<<<<<<<
 *     NO_GLYPH_NAMES = HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES
 *     GLYPH_EXTENTS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_NO_POSITIONS, __pyx_t_4) < (0)) __PYX_ERR(7, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":92
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS
 *     NO_POSITIONS = HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS
 *     NO_GLYPH_NAMES = HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES             # <<<<<<<<<<<<<<
 *     GLYPH_EXTENTS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS
 *     GLYPH_FLAGS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_NO_GLYPH_NAMES, __pyx_t_4) < (0)) __PYX_ERR(7, 92, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":93
 *     NO_POSITIONS = HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS
 *     NO_GLYPH_NAMES = HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES
 *     GLYPH_EXTENTS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS             # <<<<<<<<<<<<<<
 *     GLYPH_FLAGS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
 *     NO_ADVANCES = HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_GLYPH_EXTENTS, __pyx_t_4) < (0)) __PYX_ERR(7, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":94
 *     NO_GLYPH_NAMES = HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES
 *     GLYPH_EXTENTS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS
 *     GLYPH_FLAGS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS             # <<<<<<<<<<<<<<
 *     NO_ADVANCES = HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES
 *     DEFINED = HB_BUFFER_SERIALIZE_FLAG_DEFINED
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_GLYPH_FLAGS, __pyx_t_4) < (0)) __PYX_ERR(7, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":95
 *     GLYPH_EXTENTS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS
 *     GLYPH_FLAGS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
 *     NO_ADVANCES = HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES             # <<<<<<<<<<<<<<
 *     DEFINED = HB_BUFFER_SERIALIZE_FLAG_DEFINED
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_NO_ADVANCES, __pyx_t_4) < (0)) __PYX_ERR(7, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":96
 *     GLYPH_FLAGS = HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS
 *     NO_ADVANCES = HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES
 *     DEFINED = HB_BUFFER_SERIALIZE_FLAG_DEFINED             # <<<<<<<<<<<<<<
 * 
 * cdef class Buffer:
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_buffer_serialize_flags_t(HB_BUFFER_SERIALIZE_FLAG_DEFINED); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_DEFINED, __pyx_t_4) < (0)) __PYX_ERR(7, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_buffer.pxi":88
 *     INVALID = HB_BUFFER_SERIALIZE_FORMAT_INVALID
 * 
 * class BufferSerializeFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_BUFFER_SERIALIZE_FLAG_DEFAULT
 *     NO_CLUSTERS = HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags, __pyx_t_5, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags, __pyx_t_4) < (0)) __PYX_ERR(7, 88, __pyx_L1_error)
  __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_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":102
 *     cdef object _message_callback
 * 
 *     DEFAULT_REPLACEMENT_CODEPOINT = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT             # <<<<<<<<<<<<<<
 * 
 *     def __cinit__(self):
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_codepoint_t(HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_DEFAULT_REPLACEMENT_CODEPOINT, __pyx_t_5) < (0)) __PYX_ERR(7, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":114
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> Buffer:
 *         cdef Buffer inst = cls()
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Buffer) < (0)) __PYX_ERR(7, 114, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_5create, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_create, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_2) < (0)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_create); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_5) < (0)) __PYX_ERR(7, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":122
 *         return hb_buffer_get_length(self._hb_buffer)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_reset (self._hb_buffer)
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_9reset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_reset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[54])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_reset, __pyx_t_5) < (0)) __PYX_ERR(7, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":125
 *         hb_buffer_reset (self._hb_buffer)
 * 
 *     def clear_contents(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_clear_contents(self._hb_buffer)
 * 
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_11clear_contents, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_clear_contents, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[55])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_clear_contents, __pyx_t_5) < (0)) __PYX_ERR(7, 125, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":261
 *         hb_buffer_set_not_found_glyph(self._hb_buffer, value)
 * 
 *     def set_language_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_value, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(7, 261, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_13set_language_from_ot_tag, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_set_language_from_ot_tag, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[56])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_set_language_from_ot_tag, __pyx_t_2) < (0)) __PYX_ERR(7, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":267
 *             self._hb_buffer, hb_ot_tag_to_language(hb_tag_from_string(cstr, -1)))
 * 
 *     def set_script_from_ot_tag(self, value: str):             # <<<<<<<<<<<<<<
 *         cdef bytes packed = value.encode()
 *         cdef char* cstr = packed
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_value, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(7, 267, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_15set_script_from_ot_tag, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_set_script_from_ot_tag, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[57])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_set_script_from_ot_tag, __pyx_t_5) < (0)) __PYX_ERR(7, 267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":273
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
 * 
 *     def add_codepoints(self, codepoints: List[int],             # <<<<<<<<<<<<<<
 *                        item_offset: int = 0, item_length: int = -1):
 *         cdef unsigned int size = len(codepoints)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_codepoints, __pyx_mstate_global->__pyx_kp_u_List_int) < (0)) __PYX_ERR(7, 273, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_item_offset, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 273, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_item_length, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 273, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_17add_codepoints, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_add_codepoints, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[58])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_add_codepoints, __pyx_t_2) < (0)) __PYX_ERR(7, 273, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":289
 *             raise MemoryError()
 * 
 *     def add_utf8(self, text: bytes,             # <<<<<<<<<<<<<<
 *                  item_offset: int = 0, item_length: int = -1):
 *         hb_buffer_add_utf8(
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_text, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(7, 289, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_item_offset, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 289, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_item_length, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 289, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_19add_utf8, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_add_utf8, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[59])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_add_utf8, __pyx_t_5) < (0)) __PYX_ERR(7, 289, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":296
 *             raise MemoryError()
 * 
 *     def add_str(self, text: str,             # <<<<<<<<<<<<<<
 *                 item_offset: int = 0, item_length: int = -1):
 *         cdef Py_UCS4* ucs4_buffer
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_text, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(7, 296, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_item_offset, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 296, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_item_length, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(7, 296, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_21add_str, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_add_str, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[60])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_add_str, __pyx_t_2) < (0)) __PYX_ERR(7, 296, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":320
 *             PyMem_Free(ucs4_buffer)
 * 
 *     def guess_segment_properties(self):             # <<<<<<<<<<<<<<
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_23guess_segment_properties, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_guess_segment_properties, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[61])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_guess_segment_properties, __pyx_t_2) < (0)) __PYX_ERR(7, 320, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":323
 *         hb_buffer_guess_segment_properties(self._hb_buffer)
 * 
 *     def set_message_func(self, callback: Callable[str]):             # <<<<<<<<<<<<<<
 *         self._message_callback = callback
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_callback, __pyx_mstate_global->__pyx_kp_u_Callable_str) < (0)) __PYX_ERR(7, 323, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_25set_message_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_set_message_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[62])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_set_message_func, __pyx_t_5) < (0)) __PYX_ERR(7, 323, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":329
 *     def serialize(self,
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,             # <<<<<<<<<<<<<<
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_TEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_mstate_global->__pyx_k__6 = __pyx_t_2;
  __Pyx_GIVEREF(__pyx_t_2);
  __pyx_t_2 = 0;

  /* "src/uharfbuzz/_buffer.pxi":330
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:             # <<<<<<<<<<<<<<
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)
 *         cdef unsigned int start = 0
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEFAULT); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_mstate_global->__pyx_k__7 = __pyx_t_5;
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":329
 *     def serialize(self,
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,             # <<<<<<<<<<<<<<
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_TEXT); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":330
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
 *                   flags: BufferSerializeFlags = BufferSerializeFlags.DEFAULT) -> str:             # <<<<<<<<<<<<<<
 *         cdef unsigned int num_glyphs = hb_buffer_get_length(self._hb_buffer)
 *         cdef unsigned int start = 0
*/
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DEFAULT); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_buffer.pxi":327
 *         hb_buffer_set_message_func(self._hb_buffer, msgcallback, <void*>callback, NULL)
 * 
 *     def serialize(self,             # <<<<<<<<<<<<<<
 *                   font: Font,
 *                   format: BufferSerializeFormat = BufferSerializeFormat.TEXT,
*/
  __pyx_t_5 = PyTuple_Pack(2, __pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(7, 327, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_format, __pyx_mstate_global->__pyx_n_u_BufferSerializeFormat) < (0)) __PYX_ERR(7, 327, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_flags, __pyx_mstate_global->__pyx_n_u_BufferSerializeFlags) < (0)) __PYX_ERR(7, 327, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(7, 327, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_27serialize, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer_serialize, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[63])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Buffer, __pyx_mstate_global->__pyx_n_u_serialize, __pyx_t_2) < (0)) __PYX_ERR(7, 327, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_29__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[64])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_6Buffer_31__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Buffer___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[65])); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":1
 * class OTVarAxisFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     HIDDEN = HB_OT_VAR_AXIS_FLAG_HIDDEN
 * 
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTVarAxisFlags, __pyx_mstate_global->__pyx_n_u_OTVarAxisFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_2 != __pyx_t_6) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_6) < 0))) __PYX_ERR(1, 1, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_face.pxi":2
 * class OTVarAxisFlags(IntFlag):
 *     HIDDEN = HB_OT_VAR_AXIS_FLAG_HIDDEN             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_6 = __Pyx_PyLong_From_hb_ot_var_axis_flags_t(HB_OT_VAR_AXIS_FLAG_HIDDEN); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_HIDDEN, __pyx_t_6) < (0)) __PYX_ERR(1, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_face.pxi":1
 * class OTVarAxisFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     HIDDEN = HB_OT_VAR_AXIS_FLAG_HIDDEN
 * 
*/
  __pyx_t_6 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OTVarAxisFlags, __pyx_t_2, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_6);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTVarAxisFlags, __pyx_t_6) < (0)) __PYX_ERR(1, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":5
 * 
 * 
 * class OTVarAxisInfo(NamedTuple):             # <<<<<<<<<<<<<<
 *     axis_index: int
 *     tag: str
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTVarAxisInfo, __pyx_mstate_global->__pyx_n_u_OTVarAxisInfo, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (__pyx_t_2 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_6, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(1, 5, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_axis_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_name_id, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_flags, __pyx_mstate_global->__pyx_n_u_OTVarAxisFlags) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_min_value, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_default_value, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_max_value, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_face.pxi":12
 *     min_value: float
 *     default_value: float
 *     max_value: float             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_OTVarAxisInfo, __pyx_t_2, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTVarAxisInfo, __pyx_t_5) < (0)) __PYX_ERR(1, 5, __pyx_L1_error)
  __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_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":15
 * 
 * 
 * class OTVarNamedInstance(NamedTuple):             # <<<<<<<<<<<<<<
 *     subfamily_name_id: int
 *     postscript_name_id: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_6, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTVarNamedInstance, __pyx_mstate_global->__pyx_n_u_OTVarNamedInstance, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_2 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(1, 15, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_subfamily_name_id, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 15, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_postscript_name_id, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 15, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_design_coords, __pyx_mstate_global->__pyx_kp_u_List_float) < (0)) __PYX_ERR(1, 15, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_4) < (0)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":18
 *     subfamily_name_id: int
 *     postscript_name_id: int
 *     design_coords: List[float]             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_OTVarNamedInstance, __pyx_t_2, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTVarNamedInstance, __pyx_t_4) < (0)) __PYX_ERR(1, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":21
 * 
 * 
 * class Color(NamedTuple):             # <<<<<<<<<<<<<<
 *     red: int
 *     green: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_Color, __pyx_mstate_global->__pyx_n_u_Color, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_2 != __pyx_t_6) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_6) < 0))) __PYX_ERR(1, 21, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_red, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_green, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_blue, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_alpha, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_6) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "src/uharfbuzz/_face.pxi":27
 *     alpha: int
 * 
 *     def to_int(self) -> int:             # <<<<<<<<<<<<<<
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
*/
  __pyx_t_6 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 27, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_5Color_1to_int, 0, __pyx_mstate_global->__pyx_n_u_Color_to_int, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[66])); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_to_int, __pyx_t_7) < (0)) __PYX_ERR(1, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":30
 *         return HB_COLOR(self.blue, self.green, self.red, self.alpha)
 * 
 *     @staticmethod             # <<<<<<<<<<<<<<
 *     def from_int(value: int) -> Color:
 *         r = hb_color_get_red(value)
*/
  __pyx_t_6 = NULL;
  __pyx_t_8 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  if (PyDict_SetItem(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_value, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 30, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Color) < (0)) __PYX_ERR(1, 30, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_5Color_3from_int, __Pyx_CYFUNCTION_STATICMETHOD, __pyx_mstate_global->__pyx_n_u_Color_from_int, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[67])); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_8);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_9};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_builtin_staticmethod, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 30, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_from_int, __pyx_t_7) < (0)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":21
 * 
 * 
 * class Color(NamedTuple):             # <<<<<<<<<<<<<<
 *     red: int
 *     green: int
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_Color, __pyx_t_2, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_Color, __pyx_t_7) < (0)) __PYX_ERR(1, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":39
 * 
 * 
 * class OTColor(Color):             # <<<<<<<<<<<<<<
 *     name_id: int | None
 * 
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_Color); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTColor, __pyx_mstate_global->__pyx_n_u_OTColor, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_2 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(1, 39, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_name_id, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(1, 39, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_face.pxi":40
 * 
 * class OTColor(Color):
 *     name_id: int | None             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_OTColor, __pyx_t_2, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTColor, __pyx_t_5) < (0)) __PYX_ERR(1, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":43
 * 
 * 
 * class OTColorPaletteFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_OT_COLOR_PALETTE_FLAG_DEFAULT
 *     USABLE_WITH_LIGHT_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_2 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(1, 43, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":44
 * 
 * class OTColorPaletteFlags(IntFlag):
 *     DEFAULT = HB_OT_COLOR_PALETTE_FLAG_DEFAULT             # <<<<<<<<<<<<<<
 *     USABLE_WITH_LIGHT_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND
 *     USABLE_WITH_DARK_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_color_palette_flags_t(HB_OT_COLOR_PALETTE_FLAG_DEFAULT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DEFAULT, __pyx_t_4) < (0)) __PYX_ERR(1, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":45
 * class OTColorPaletteFlags(IntFlag):
 *     DEFAULT = HB_OT_COLOR_PALETTE_FLAG_DEFAULT
 *     USABLE_WITH_LIGHT_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND             # <<<<<<<<<<<<<<
 *     USABLE_WITH_DARK_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_color_palette_flags_t(HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_USABLE_WITH_LIGHT_BACKGROUND, __pyx_t_4) < (0)) __PYX_ERR(1, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":46
 *     DEFAULT = HB_OT_COLOR_PALETTE_FLAG_DEFAULT
 *     USABLE_WITH_LIGHT_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND
 *     USABLE_WITH_DARK_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_color_palette_flags_t(HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_USABLE_WITH_DARK_BACKGROUND, __pyx_t_4) < (0)) __PYX_ERR(1, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":43
 * 
 * 
 * class OTColorPaletteFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_OT_COLOR_PALETTE_FLAG_DEFAULT
 *     USABLE_WITH_LIGHT_BACKGROUND = HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags, __pyx_t_2, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags, __pyx_t_4) < (0)) __PYX_ERR(1, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":49
 * 
 * 
 * class OTColorPalette(NamedTuple):             # <<<<<<<<<<<<<<
 *     colors: List[OTColor]
 *     name_id: int | None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTColorPalette, __pyx_mstate_global->__pyx_n_u_OTColorPalette, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_2 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(1, 49, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_colors, __pyx_mstate_global->__pyx_kp_u_List_OTColor) < (0)) __PYX_ERR(1, 49, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_name_id, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(1, 49, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_flags, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags) < (0)) __PYX_ERR(1, 49, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_7) < (0)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":52
 *     colors: List[OTColor]
 *     name_id: int | None
 *     flags: OTColorPaletteFlags             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OTColorPalette, __pyx_t_2, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTColorPalette, __pyx_t_7) < (0)) __PYX_ERR(1, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":55
 * 
 * 
 * class OTColorLayer(NamedTuple):             # <<<<<<<<<<<<<<
 *     glyph: int
 *     color_index: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTColorLayer, __pyx_mstate_global->__pyx_n_u_OTColorLayer, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_2 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(1, 55, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 55, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_color_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 55, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_face.pxi":57
 * class OTColorLayer(NamedTuple):
 *     glyph: int
 *     color_index: int             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_OTColorLayer, __pyx_t_2, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTColorLayer, __pyx_t_5) < (0)) __PYX_ERR(1, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":60
 * 
 * 
 * class OTLayoutGlyphClass(IntEnum):             # <<<<<<<<<<<<<<
 *     UNCLASSIFIED = HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_2 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(1, 60, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":61
 * 
 * class OTLayoutGlyphClass(IntEnum):
 *     UNCLASSIFIED = HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED             # <<<<<<<<<<<<<<
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH
 *     LIGATURE = HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNCLASSIFIED, __pyx_t_4) < (0)) __PYX_ERR(1, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":62
 * class OTLayoutGlyphClass(IntEnum):
 *     UNCLASSIFIED = HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH             # <<<<<<<<<<<<<<
 *     LIGATURE = HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
 *     MARK = HB_OT_LAYOUT_GLYPH_CLASS_MARK
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_BASE_GLYPH, __pyx_t_4) < (0)) __PYX_ERR(1, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":63
 *     UNCLASSIFIED = HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH
 *     LIGATURE = HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE             # <<<<<<<<<<<<<<
 *     MARK = HB_OT_LAYOUT_GLYPH_CLASS_MARK
 *     COMPONENT = HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_LIGATURE, __pyx_t_4) < (0)) __PYX_ERR(1, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":64
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH
 *     LIGATURE = HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
 *     MARK = HB_OT_LAYOUT_GLYPH_CLASS_MARK             # <<<<<<<<<<<<<<
 *     COMPONENT = HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(HB_OT_LAYOUT_GLYPH_CLASS_MARK); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_MARK, __pyx_t_4) < (0)) __PYX_ERR(1, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":65
 *     LIGATURE = HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE
 *     MARK = HB_OT_LAYOUT_GLYPH_CLASS_MARK
 *     COMPONENT = HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_COMPONENT, __pyx_t_4) < (0)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":60
 * 
 * 
 * class OTLayoutGlyphClass(IntEnum):             # <<<<<<<<<<<<<<
 *     UNCLASSIFIED = HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED
 *     BASE_GLYPH = HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass, __pyx_t_2, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass, __pyx_t_4) < (0)) __PYX_ERR(1, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":88
 * 
 * 
 * class OTNameIdPredefined(IntEnum):             # <<<<<<<<<<<<<<
 *     COPYRIGHT = HB_OT_NAME_ID_COPYRIGHT
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_2 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(1, 88, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":89
 * 
 * class OTNameIdPredefined(IntEnum):
 *     COPYRIGHT = HB_OT_NAME_ID_COPYRIGHT             # <<<<<<<<<<<<<<
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY
 *     FONT_SUBFAMILY = HB_OT_NAME_ID_FONT_SUBFAMILY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_COPYRIGHT); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 89, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_COPYRIGHT, __pyx_t_7) < (0)) __PYX_ERR(1, 89, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":90
 * class OTNameIdPredefined(IntEnum):
 *     COPYRIGHT = HB_OT_NAME_ID_COPYRIGHT
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY             # <<<<<<<<<<<<<<
 *     FONT_SUBFAMILY = HB_OT_NAME_ID_FONT_SUBFAMILY
 *     UNIQUE_ID = HB_OT_NAME_ID_UNIQUE_ID
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_FONT_FAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FONT_FAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":91
 *     COPYRIGHT = HB_OT_NAME_ID_COPYRIGHT
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY
 *     FONT_SUBFAMILY = HB_OT_NAME_ID_FONT_SUBFAMILY             # <<<<<<<<<<<<<<
 *     UNIQUE_ID = HB_OT_NAME_ID_UNIQUE_ID
 *     FULL_NAME = HB_OT_NAME_ID_FULL_NAME
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_FONT_SUBFAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FONT_SUBFAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":92
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY
 *     FONT_SUBFAMILY = HB_OT_NAME_ID_FONT_SUBFAMILY
 *     UNIQUE_ID = HB_OT_NAME_ID_UNIQUE_ID             # <<<<<<<<<<<<<<
 *     FULL_NAME = HB_OT_NAME_ID_FULL_NAME
 *     VERSION_STRING = HB_OT_NAME_ID_VERSION_STRING
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_UNIQUE_ID); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 92, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_UNIQUE_ID, __pyx_t_7) < (0)) __PYX_ERR(1, 92, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":93
 *     FONT_SUBFAMILY = HB_OT_NAME_ID_FONT_SUBFAMILY
 *     UNIQUE_ID = HB_OT_NAME_ID_UNIQUE_ID
 *     FULL_NAME = HB_OT_NAME_ID_FULL_NAME             # <<<<<<<<<<<<<<
 *     VERSION_STRING = HB_OT_NAME_ID_VERSION_STRING
 *     POSTSCRIPT_NAME = HB_OT_NAME_ID_POSTSCRIPT_NAME
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_FULL_NAME); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 93, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_FULL_NAME, __pyx_t_7) < (0)) __PYX_ERR(1, 93, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":94
 *     UNIQUE_ID = HB_OT_NAME_ID_UNIQUE_ID
 *     FULL_NAME = HB_OT_NAME_ID_FULL_NAME
 *     VERSION_STRING = HB_OT_NAME_ID_VERSION_STRING             # <<<<<<<<<<<<<<
 *     POSTSCRIPT_NAME = HB_OT_NAME_ID_POSTSCRIPT_NAME
 *     TRADEMARK = HB_OT_NAME_ID_TRADEMARK
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_VERSION_STRING); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_VERSION_STRING, __pyx_t_7) < (0)) __PYX_ERR(1, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":95
 *     FULL_NAME = HB_OT_NAME_ID_FULL_NAME
 *     VERSION_STRING = HB_OT_NAME_ID_VERSION_STRING
 *     POSTSCRIPT_NAME = HB_OT_NAME_ID_POSTSCRIPT_NAME             # <<<<<<<<<<<<<<
 *     TRADEMARK = HB_OT_NAME_ID_TRADEMARK
 *     MANUFACTURER = HB_OT_NAME_ID_MANUFACTURER
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_POSTSCRIPT_NAME); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 95, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_POSTSCRIPT_NAME, __pyx_t_7) < (0)) __PYX_ERR(1, 95, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":96
 *     VERSION_STRING = HB_OT_NAME_ID_VERSION_STRING
 *     POSTSCRIPT_NAME = HB_OT_NAME_ID_POSTSCRIPT_NAME
 *     TRADEMARK = HB_OT_NAME_ID_TRADEMARK             # <<<<<<<<<<<<<<
 *     MANUFACTURER = HB_OT_NAME_ID_MANUFACTURER
 *     DESIGNER = HB_OT_NAME_ID_DESIGNER
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_TRADEMARK); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 96, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TRADEMARK, __pyx_t_7) < (0)) __PYX_ERR(1, 96, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":97
 *     POSTSCRIPT_NAME = HB_OT_NAME_ID_POSTSCRIPT_NAME
 *     TRADEMARK = HB_OT_NAME_ID_TRADEMARK
 *     MANUFACTURER = HB_OT_NAME_ID_MANUFACTURER             # <<<<<<<<<<<<<<
 *     DESIGNER = HB_OT_NAME_ID_DESIGNER
 *     DESCRIPTION = HB_OT_NAME_ID_DESCRIPTION
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_MANUFACTURER); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_MANUFACTURER, __pyx_t_7) < (0)) __PYX_ERR(1, 97, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":98
 *     TRADEMARK = HB_OT_NAME_ID_TRADEMARK
 *     MANUFACTURER = HB_OT_NAME_ID_MANUFACTURER
 *     DESIGNER = HB_OT_NAME_ID_DESIGNER             # <<<<<<<<<<<<<<
 *     DESCRIPTION = HB_OT_NAME_ID_DESCRIPTION
 *     VENDOR_URL = HB_OT_NAME_ID_VENDOR_URL
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_DESIGNER); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DESIGNER, __pyx_t_7) < (0)) __PYX_ERR(1, 98, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":99
 *     MANUFACTURER = HB_OT_NAME_ID_MANUFACTURER
 *     DESIGNER = HB_OT_NAME_ID_DESIGNER
 *     DESCRIPTION = HB_OT_NAME_ID_DESCRIPTION             # <<<<<<<<<<<<<<
 *     VENDOR_URL = HB_OT_NAME_ID_VENDOR_URL
 *     DESIGNER_URL = HB_OT_NAME_ID_DESIGNER_URL
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_DESCRIPTION); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 99, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DESCRIPTION, __pyx_t_7) < (0)) __PYX_ERR(1, 99, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":100
 *     DESIGNER = HB_OT_NAME_ID_DESIGNER
 *     DESCRIPTION = HB_OT_NAME_ID_DESCRIPTION
 *     VENDOR_URL = HB_OT_NAME_ID_VENDOR_URL             # <<<<<<<<<<<<<<
 *     DESIGNER_URL = HB_OT_NAME_ID_DESIGNER_URL
 *     LICENSE = HB_OT_NAME_ID_LICENSE
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_VENDOR_URL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 100, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_VENDOR_URL, __pyx_t_7) < (0)) __PYX_ERR(1, 100, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":101
 *     DESCRIPTION = HB_OT_NAME_ID_DESCRIPTION
 *     VENDOR_URL = HB_OT_NAME_ID_VENDOR_URL
 *     DESIGNER_URL = HB_OT_NAME_ID_DESIGNER_URL             # <<<<<<<<<<<<<<
 *     LICENSE = HB_OT_NAME_ID_LICENSE
 *     LICENSE_URL = HB_OT_NAME_ID_LICENSE_URL
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_DESIGNER_URL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 101, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DESIGNER_URL, __pyx_t_7) < (0)) __PYX_ERR(1, 101, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":102
 *     VENDOR_URL = HB_OT_NAME_ID_VENDOR_URL
 *     DESIGNER_URL = HB_OT_NAME_ID_DESIGNER_URL
 *     LICENSE = HB_OT_NAME_ID_LICENSE             # <<<<<<<<<<<<<<
 *     LICENSE_URL = HB_OT_NAME_ID_LICENSE_URL
 *     TYPOGRAPHIC_FAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_LICENSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LICENSE, __pyx_t_7) < (0)) __PYX_ERR(1, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":103
 *     DESIGNER_URL = HB_OT_NAME_ID_DESIGNER_URL
 *     LICENSE = HB_OT_NAME_ID_LICENSE
 *     LICENSE_URL = HB_OT_NAME_ID_LICENSE_URL             # <<<<<<<<<<<<<<
 *     TYPOGRAPHIC_FAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
 *     TYPOGRAPHIC_SUBFAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_LICENSE_URL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LICENSE_URL, __pyx_t_7) < (0)) __PYX_ERR(1, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":104
 *     LICENSE = HB_OT_NAME_ID_LICENSE
 *     LICENSE_URL = HB_OT_NAME_ID_LICENSE_URL
 *     TYPOGRAPHIC_FAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY             # <<<<<<<<<<<<<<
 *     TYPOGRAPHIC_SUBFAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
 *     MAC_FULL_NAME = HB_OT_NAME_ID_MAC_FULL_NAME
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TYPOGRAPHIC_FAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":105
 *     LICENSE_URL = HB_OT_NAME_ID_LICENSE_URL
 *     TYPOGRAPHIC_FAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
 *     TYPOGRAPHIC_SUBFAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY             # <<<<<<<<<<<<<<
 *     MAC_FULL_NAME = HB_OT_NAME_ID_MAC_FULL_NAME
 *     SAMPLE_TEXT = HB_OT_NAME_ID_SAMPLE_TEXT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_TYPOGRAPHIC_SUBFAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":106
 *     TYPOGRAPHIC_FAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_FAMILY
 *     TYPOGRAPHIC_SUBFAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
 *     MAC_FULL_NAME = HB_OT_NAME_ID_MAC_FULL_NAME             # <<<<<<<<<<<<<<
 *     SAMPLE_TEXT = HB_OT_NAME_ID_SAMPLE_TEXT
 *     CID_FINDFONT_NAME = HB_OT_NAME_ID_CID_FINDFONT_NAME
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_MAC_FULL_NAME); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_MAC_FULL_NAME, __pyx_t_7) < (0)) __PYX_ERR(1, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":107
 *     TYPOGRAPHIC_SUBFAMILY = HB_OT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
 *     MAC_FULL_NAME = HB_OT_NAME_ID_MAC_FULL_NAME
 *     SAMPLE_TEXT = HB_OT_NAME_ID_SAMPLE_TEXT             # <<<<<<<<<<<<<<
 *     CID_FINDFONT_NAME = HB_OT_NAME_ID_CID_FINDFONT_NAME
 *     WWS_FAMILY = HB_OT_NAME_ID_WWS_FAMILY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_SAMPLE_TEXT); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SAMPLE_TEXT, __pyx_t_7) < (0)) __PYX_ERR(1, 107, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":108
 *     MAC_FULL_NAME = HB_OT_NAME_ID_MAC_FULL_NAME
 *     SAMPLE_TEXT = HB_OT_NAME_ID_SAMPLE_TEXT
 *     CID_FINDFONT_NAME = HB_OT_NAME_ID_CID_FINDFONT_NAME             # <<<<<<<<<<<<<<
 *     WWS_FAMILY = HB_OT_NAME_ID_WWS_FAMILY
 *     WWS_SUBFAMILY = HB_OT_NAME_ID_WWS_SUBFAMILY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_CID_FINDFONT_NAME); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_CID_FINDFONT_NAME, __pyx_t_7) < (0)) __PYX_ERR(1, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":109
 *     SAMPLE_TEXT = HB_OT_NAME_ID_SAMPLE_TEXT
 *     CID_FINDFONT_NAME = HB_OT_NAME_ID_CID_FINDFONT_NAME
 *     WWS_FAMILY = HB_OT_NAME_ID_WWS_FAMILY             # <<<<<<<<<<<<<<
 *     WWS_SUBFAMILY = HB_OT_NAME_ID_WWS_SUBFAMILY
 *     LIGHT_BACKGROUND = HB_OT_NAME_ID_LIGHT_BACKGROUND
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_WWS_FAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_WWS_FAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":110
 *     CID_FINDFONT_NAME = HB_OT_NAME_ID_CID_FINDFONT_NAME
 *     WWS_FAMILY = HB_OT_NAME_ID_WWS_FAMILY
 *     WWS_SUBFAMILY = HB_OT_NAME_ID_WWS_SUBFAMILY             # <<<<<<<<<<<<<<
 *     LIGHT_BACKGROUND = HB_OT_NAME_ID_LIGHT_BACKGROUND
 *     DARK_BACKGROUND = HB_OT_NAME_ID_DARK_BACKGROUND
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_WWS_SUBFAMILY); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_WWS_SUBFAMILY, __pyx_t_7) < (0)) __PYX_ERR(1, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":111
 *     WWS_FAMILY = HB_OT_NAME_ID_WWS_FAMILY
 *     WWS_SUBFAMILY = HB_OT_NAME_ID_WWS_SUBFAMILY
 *     LIGHT_BACKGROUND = HB_OT_NAME_ID_LIGHT_BACKGROUND             # <<<<<<<<<<<<<<
 *     DARK_BACKGROUND = HB_OT_NAME_ID_DARK_BACKGROUND
 *     VARIATIONS_PS_PREFIX = HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_LIGHT_BACKGROUND); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_LIGHT_BACKGROUND, __pyx_t_7) < (0)) __PYX_ERR(1, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":112
 *     WWS_SUBFAMILY = HB_OT_NAME_ID_WWS_SUBFAMILY
 *     LIGHT_BACKGROUND = HB_OT_NAME_ID_LIGHT_BACKGROUND
 *     DARK_BACKGROUND = HB_OT_NAME_ID_DARK_BACKGROUND             # <<<<<<<<<<<<<<
 *     VARIATIONS_PS_PREFIX = HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
 *     INVALID = HB_OT_NAME_ID_INVALID
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_DARK_BACKGROUND); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DARK_BACKGROUND, __pyx_t_7) < (0)) __PYX_ERR(1, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":113
 *     LIGHT_BACKGROUND = HB_OT_NAME_ID_LIGHT_BACKGROUND
 *     DARK_BACKGROUND = HB_OT_NAME_ID_DARK_BACKGROUND
 *     VARIATIONS_PS_PREFIX = HB_OT_NAME_ID_VARIATIONS_PS_PREFIX             # <<<<<<<<<<<<<<
 *     INVALID = HB_OT_NAME_ID_INVALID
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_VARIATIONS_PS_PREFIX); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_VARIATIONS_PS_PREFIX, __pyx_t_7) < (0)) __PYX_ERR(1, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":114
 *     DARK_BACKGROUND = HB_OT_NAME_ID_DARK_BACKGROUND
 *     VARIATIONS_PS_PREFIX = HB_OT_NAME_ID_VARIATIONS_PS_PREFIX
 *     INVALID = HB_OT_NAME_ID_INVALID             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_name_id_predefined_t(HB_OT_NAME_ID_INVALID); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_INVALID, __pyx_t_7) < (0)) __PYX_ERR(1, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_face.pxi":88
 * 
 * 
 * class OTNameIdPredefined(IntEnum):             # <<<<<<<<<<<<<<
 *     COPYRIGHT = HB_OT_NAME_ID_COPYRIGHT
 *     FONT_FAMILY = HB_OT_NAME_ID_FONT_FAMILY
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined, __pyx_t_2, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTNameIdPredefined, __pyx_t_7) < (0)) __PYX_ERR(1, 88, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":117
 * 
 * 
 * class OTNameEntry(NamedTuple):             # <<<<<<<<<<<<<<
 *     name_id: OTNameIdPredefined | int
 *     language: str | None
*/
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_4, __pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTNameEntry, __pyx_mstate_global->__pyx_n_u_OTNameEntry, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_2 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(1, 117, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_name_id, __pyx_mstate_global->__pyx_kp_u_OTNameIdPredefined_int) < (0)) __PYX_ERR(1, 117, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_language, __pyx_mstate_global->__pyx_kp_u_str_None) < (0)) __PYX_ERR(1, 117, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_face.pxi":119
 * class OTNameEntry(NamedTuple):
 *     name_id: OTNameIdPredefined | int
 *     language: str | None             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_OTNameEntry, __pyx_t_2, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTNameEntry, __pyx_t_5) < (0)) __PYX_ERR(1, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":151
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_blob, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(1, 151, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 151, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(1, 151, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_5create, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_create, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[68])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_4) < (0)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetNameInClass(__pyx_t_4, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_2) < (0)) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":156
 *         return inst
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create_for_tables(cls,
 *                           func: Callable[[
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Face_str_object_bytes) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_7create_for_tables, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_create_for_tables, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[69])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create_for_tables, __pyx_t_4) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetNameInClass(__pyx_t_4, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create_for_tables); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = __Pyx_Method_ClassMethod(__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_create_for_tables, __pyx_t_2) < (0)) __PYX_ERR(1, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":206
 *         return Blob.from_ptr(blob)
 * 
 *     def reference_table(self, tag: str) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(1, 206, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(1, 206, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_9reference_table, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_reference_table, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[70])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_reference_table, __pyx_t_4) < (0)) __PYX_ERR(1, 206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":245
 *         return s
 * 
 *     def variation_unicodes(self, variation_selector: int) -> Set[int]:             # <<<<<<<<<<<<<<
 *         s = Set()
 *         hb_face_collect_variation_unicodes(self._hb_face, variation_selector, s._hb_set)
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_variation_selector, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 245, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Set_int) < (0)) __PYX_ERR(1, 245, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_11variation_unicodes, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_variation_unicodes, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[71])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_variation_unicodes, __pyx_t_2) < (0)) __PYX_ERR(1, 245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":313
 *         return hb_ot_math_has_data(self._hb_face)
 * 
 *     def is_glyph_extended_math_shape(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_is_glyph_extended_shape(self._hb_face, glyph)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 313, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(1, 313, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_13is_glyph_extended_math_shape, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_is_glyph_extended_math_shap, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[72])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 313, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_is_glyph_extended_math_shape, __pyx_t_4) < (0)) __PYX_ERR(1, 313, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":321
 *         return hb_ot_color_has_layers(self._hb_face)
 * 
 *     def get_glyph_color_layers(self, glyph: int) -> List[OTColorLayer]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int i
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 321, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTColorLayer) < (0)) __PYX_ERR(1, 321, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_15get_glyph_color_layers, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_glyph_color_layers, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[73])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 321, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_glyph_color_layers, __pyx_t_2) < (0)) __PYX_ERR(1, 321, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":338
 *         return hb_ot_color_has_palettes(self._hb_face)
 * 
 *     def get_color_palette(self, palette_index: int) -> OTColorPalette:             # <<<<<<<<<<<<<<
 *         cdef hb_face_t* face = self._hb_face
 *         cdef list colors = []
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_palette_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 338, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_OTColorPalette) < (0)) __PYX_ERR(1, 338, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_17get_color_palette, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_color_palette, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[74])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_color_palette, __pyx_t_4) < (0)) __PYX_ERR(1, 338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":364
 *         return palettes
 * 
 *     def color_palette_color_get_name_id(self, color_index: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_ot_name_id_t name_id
 *         name_id =  hb_ot_color_palette_color_get_name_id(self._hb_face, color_index)
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_color_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 364, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(1, 364, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_19color_palette_color_get_name_id, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_color_palette_color_get_nam, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[75])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 364, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_color_palette_color_get_name_id, __pyx_t_2) < (0)) __PYX_ERR(1, 364, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":375
 *         return hb_ot_color_has_paint(self._hb_face)
 * 
 *     def glyph_has_color_paint(self, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_ot_color_glyph_has_paint(self._hb_face, glyph)
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 375, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(1, 375, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_21glyph_has_color_paint, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_glyph_has_color_paint, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[76])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 375, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_glyph_has_color_paint, __pyx_t_4) < (0)) __PYX_ERR(1, 375, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":382
 *         return hb_ot_color_has_svg(self._hb_face)
 * 
 *     def get_glyph_color_svg(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_svg(self._hb_face, glyph)
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 382, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(1, 382, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_23get_glyph_color_svg, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_glyph_color_svg, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[77])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_glyph_color_svg, __pyx_t_2) < (0)) __PYX_ERR(1, 382, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":396
 *         return hb_ot_layout_has_glyph_classes(self._hb_face)
 * 
 *     def get_layout_glyph_class(self, glyph: int) -> OTLayoutGlyphClass:             # <<<<<<<<<<<<<<
 *         return OTLayoutGlyphClass(hb_ot_layout_get_glyph_class(self._hb_face, glyph))
 * 
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 396, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass) < (0)) __PYX_ERR(1, 396, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_25get_layout_glyph_class, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_layout_glyph_class, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[78])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 396, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_layout_glyph_class, __pyx_t_4) < (0)) __PYX_ERR(1, 396, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":407
 *         return hb_ot_layout_has_substitution(self._hb_face)
 * 
 *     def get_lookup_glyph_alternates(self, lookup_index: int, glyph: int) -> List[int]:             # <<<<<<<<<<<<<<
 *         cdef list alternates = []
 *         cdef unsigned int i
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_lookup_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 407, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 407, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_int) < (0)) __PYX_ERR(1, 407, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_27get_lookup_glyph_alternates, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_lookup_glyph_alternates, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[79])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 407, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_lookup_glyph_alternates, __pyx_t_2) < (0)) __PYX_ERR(1, 407, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":421
 *         return alternates
 * 
 *     def get_language_feature_tags(self,             # <<<<<<<<<<<<<<
 *                                   tag: str,
 *                                   script_index: int = 0,
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(1, 421, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_script_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 421, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_language_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 421, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(1, 421, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_29get_language_feature_tags, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_language_feature_tags, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[80])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_language_feature_tags, __pyx_t_4) < (0)) __PYX_ERR(1, 421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":449
 *         return tags
 * 
 *     def get_script_language_tags(self, tag: str, script_index: int = 0) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(1, 449, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_script_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(1, 449, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(1, 449, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_31get_script_language_tags, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_script_language_tags, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[81])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 449, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_script_language_tags, __pyx_t_2) < (0)) __PYX_ERR(1, 449, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":474
 *         return tags
 * 
 *     def get_table_script_tags(self, tag: str) -> List[str]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = tag.encode()
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(1, 474, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(1, 474, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_33get_table_script_tags, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_table_script_tags, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[82])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_table_script_tags, __pyx_t_4) < (0)) __PYX_ERR(1, 474, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_face.pxi":498
 *         return tags
 * 
 *     def list_names(self) -> List[OTNameEntry]:             # <<<<<<<<<<<<<<
 *         cdef list ret = []
 *         cdef unsigned int num_entries
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTNameEntry) < (0)) __PYX_ERR(1, 498, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_35list_names, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_list_names, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[83])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_list_names, __pyx_t_2) < (0)) __PYX_ERR(1, 498, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_face.pxi":521
 *         return ret
 * 
 *     def get_name(self, name_id: OTNameIdPredefined | int, language: str | None = None) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef bytes packed
 *         cdef hb_language_t lang
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_name_id, __pyx_mstate_global->__pyx_kp_u_OTNameIdPredefined_int) < (0)) __PYX_ERR(1, 521, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_language, __pyx_mstate_global->__pyx_kp_u_str_None) < (0)) __PYX_ERR(1, 521, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_str_None) < (0)) __PYX_ERR(1, 521, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_37get_name, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face_get_name, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[84])); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Face, __pyx_mstate_global->__pyx_n_u_get_name, __pyx_t_4) < (0)) __PYX_ERR(1, 521, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_39__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[85])); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_4) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Face_41__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Face___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[86])); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_4) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_draw.pxi":65
 *         hb_draw_funcs_destroy(self._hb_drawfuncs)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def get_glyph_shape(self, font: Font, gid: int):
 *         font.draw_glyph(gid, self)
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(8, 65, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(8, 65, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_5get_glyph_shape, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_get_glyph_shape, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[87])); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_get_glyph_shape, __pyx_t_2) < (0)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Font_draw_glyph};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 65, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __Pyx_GetNameInClass(__pyx_t_9, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_get_glyph_shape); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_9};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 65, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_get_glyph_shape, __pyx_t_2) < (0)) __PYX_ERR(8, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_draw.pxi":69
 *         font.draw_glyph(gid, self)
 * 
 *     @deprecated("Font.draw_glyph()")             # <<<<<<<<<<<<<<
 *     def draw_glyph(self, font: Font, gid: int, draw_data: object = None):
 *         font.draw_glyph(gid, self, draw_data)
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(8, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(8, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_draw_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 69, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_7draw_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_draw_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[88])); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_t_7) < (0)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Font_draw_glyph};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __Pyx_GetNameInClass(__pyx_t_5, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_draw_glyph); if (unlikely(!__pyx_t_5)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 69, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_t_7) < (0)) __PYX_ERR(8, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_draw.pxi":73
 *         font.draw_glyph(gid, self, draw_data)
 * 
 *     def set_move_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_object_None) < (0)) __PYX_ERR(8, 73, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 73, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_9set_move_to_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_set_move_to_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[89])); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_set_move_to_func, __pyx_t_9) < (0)) __PYX_ERR(8, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_draw.pxi":97
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_line_to_func(self,             # <<<<<<<<<<<<<<
 *                          func: Callable[[
 *                              float,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_object_None) < (0)) __PYX_ERR(8, 97, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 97, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_11set_line_to_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_set_line_to_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[90])); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 97, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_set_line_to_func, __pyx_t_7) < (0)) __PYX_ERR(8, 97, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_draw.pxi":121
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_cubic_to_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                              float,
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_float_float) < (0)) __PYX_ERR(8, 121, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 121, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_13set_cubic_to_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_set_cubic_to_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[91])); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_set_cubic_to_func, __pyx_t_9) < (0)) __PYX_ERR(8, 121, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_draw.pxi":149
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_quadratic_to_func(self,             # <<<<<<<<<<<<<<
 *                               func: Callable[[
 *                                  float,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_float_float_2) < (0)) __PYX_ERR(8, 149, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 149, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_15set_quadratic_to_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_set_quadratic_to_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[92])); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_set_quadratic_to_func, __pyx_t_7) < (0)) __PYX_ERR(8, 149, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_draw.pxi":175
 *             self._hb_drawfuncs, func_p, user_data_p, NULL)
 * 
 *     def set_close_path_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_object_None) < (0)) __PYX_ERR(8, 175, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(8, 175, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_17set_close_path_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs_set_close_path_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[93])); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_DrawFuncs, __pyx_mstate_global->__pyx_n_u_set_close_path_func, __pyx_t_9) < (0)) __PYX_ERR(8, 175, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_19__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[94])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9DrawFuncs_21__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_DrawFuncs___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[95])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":1
 * class PaintCompositeMode(IntEnum):             # <<<<<<<<<<<<<<
 *     CLEAR = HB_PAINT_COMPOSITE_MODE_CLEAR
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_PaintCompositeMode, __pyx_mstate_global->__pyx_n_u_PaintCompositeMode, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_9 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(9, 1, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":2
 * class PaintCompositeMode(IntEnum):
 *     CLEAR = HB_PAINT_COMPOSITE_MODE_CLEAR             # <<<<<<<<<<<<<<
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC
 *     DEST = HB_PAINT_COMPOSITE_MODE_DEST
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_CLEAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_CLEAR, __pyx_t_7) < (0)) __PYX_ERR(9, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":3
 * class PaintCompositeMode(IntEnum):
 *     CLEAR = HB_PAINT_COMPOSITE_MODE_CLEAR
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC             # <<<<<<<<<<<<<<
 *     DEST = HB_PAINT_COMPOSITE_MODE_DEST
 *     SRC_OVER = HB_PAINT_COMPOSITE_MODE_SRC_OVER
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SRC); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SRC, __pyx_t_7) < (0)) __PYX_ERR(9, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":4
 *     CLEAR = HB_PAINT_COMPOSITE_MODE_CLEAR
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC
 *     DEST = HB_PAINT_COMPOSITE_MODE_DEST             # <<<<<<<<<<<<<<
 *     SRC_OVER = HB_PAINT_COMPOSITE_MODE_SRC_OVER
 *     DEST_OVER = HB_PAINT_COMPOSITE_MODE_DEST_OVER
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DEST); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEST, __pyx_t_7) < (0)) __PYX_ERR(9, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":5
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC
 *     DEST = HB_PAINT_COMPOSITE_MODE_DEST
 *     SRC_OVER = HB_PAINT_COMPOSITE_MODE_SRC_OVER             # <<<<<<<<<<<<<<
 *     DEST_OVER = HB_PAINT_COMPOSITE_MODE_DEST_OVER
 *     SRC_IN = HB_PAINT_COMPOSITE_MODE_SRC_IN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SRC_OVER); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SRC_OVER, __pyx_t_7) < (0)) __PYX_ERR(9, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":6
 *     DEST = HB_PAINT_COMPOSITE_MODE_DEST
 *     SRC_OVER = HB_PAINT_COMPOSITE_MODE_SRC_OVER
 *     DEST_OVER = HB_PAINT_COMPOSITE_MODE_DEST_OVER             # <<<<<<<<<<<<<<
 *     SRC_IN = HB_PAINT_COMPOSITE_MODE_SRC_IN
 *     DEST_IN = HB_PAINT_COMPOSITE_MODE_DEST_IN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DEST_OVER); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEST_OVER, __pyx_t_7) < (0)) __PYX_ERR(9, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":7
 *     SRC_OVER = HB_PAINT_COMPOSITE_MODE_SRC_OVER
 *     DEST_OVER = HB_PAINT_COMPOSITE_MODE_DEST_OVER
 *     SRC_IN = HB_PAINT_COMPOSITE_MODE_SRC_IN             # <<<<<<<<<<<<<<
 *     DEST_IN = HB_PAINT_COMPOSITE_MODE_DEST_IN
 *     SRC_OUT = HB_PAINT_COMPOSITE_MODE_SRC_OUT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SRC_IN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SRC_IN, __pyx_t_7) < (0)) __PYX_ERR(9, 7, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":8
 *     DEST_OVER = HB_PAINT_COMPOSITE_MODE_DEST_OVER
 *     SRC_IN = HB_PAINT_COMPOSITE_MODE_SRC_IN
 *     DEST_IN = HB_PAINT_COMPOSITE_MODE_DEST_IN             # <<<<<<<<<<<<<<
 *     SRC_OUT = HB_PAINT_COMPOSITE_MODE_SRC_OUT
 *     DEST_OUT = HB_PAINT_COMPOSITE_MODE_DEST_OUT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DEST_IN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEST_IN, __pyx_t_7) < (0)) __PYX_ERR(9, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":9
 *     SRC_IN = HB_PAINT_COMPOSITE_MODE_SRC_IN
 *     DEST_IN = HB_PAINT_COMPOSITE_MODE_DEST_IN
 *     SRC_OUT = HB_PAINT_COMPOSITE_MODE_SRC_OUT             # <<<<<<<<<<<<<<
 *     DEST_OUT = HB_PAINT_COMPOSITE_MODE_DEST_OUT
 *     SRC_ATOP = HB_PAINT_COMPOSITE_MODE_SRC_ATOP
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SRC_OUT); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SRC_OUT, __pyx_t_7) < (0)) __PYX_ERR(9, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":10
 *     DEST_IN = HB_PAINT_COMPOSITE_MODE_DEST_IN
 *     SRC_OUT = HB_PAINT_COMPOSITE_MODE_SRC_OUT
 *     DEST_OUT = HB_PAINT_COMPOSITE_MODE_DEST_OUT             # <<<<<<<<<<<<<<
 *     SRC_ATOP = HB_PAINT_COMPOSITE_MODE_SRC_ATOP
 *     DEST_ATOP = HB_PAINT_COMPOSITE_MODE_DEST_ATOP
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DEST_OUT); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEST_OUT, __pyx_t_7) < (0)) __PYX_ERR(9, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":11
 *     SRC_OUT = HB_PAINT_COMPOSITE_MODE_SRC_OUT
 *     DEST_OUT = HB_PAINT_COMPOSITE_MODE_DEST_OUT
 *     SRC_ATOP = HB_PAINT_COMPOSITE_MODE_SRC_ATOP             # <<<<<<<<<<<<<<
 *     DEST_ATOP = HB_PAINT_COMPOSITE_MODE_DEST_ATOP
 *     XOR = HB_PAINT_COMPOSITE_MODE_XOR
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SRC_ATOP); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SRC_ATOP, __pyx_t_7) < (0)) __PYX_ERR(9, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":12
 *     DEST_OUT = HB_PAINT_COMPOSITE_MODE_DEST_OUT
 *     SRC_ATOP = HB_PAINT_COMPOSITE_MODE_SRC_ATOP
 *     DEST_ATOP = HB_PAINT_COMPOSITE_MODE_DEST_ATOP             # <<<<<<<<<<<<<<
 *     XOR = HB_PAINT_COMPOSITE_MODE_XOR
 *     PLUS = HB_PAINT_COMPOSITE_MODE_PLUS
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DEST_ATOP); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DEST_ATOP, __pyx_t_7) < (0)) __PYX_ERR(9, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":13
 *     SRC_ATOP = HB_PAINT_COMPOSITE_MODE_SRC_ATOP
 *     DEST_ATOP = HB_PAINT_COMPOSITE_MODE_DEST_ATOP
 *     XOR = HB_PAINT_COMPOSITE_MODE_XOR             # <<<<<<<<<<<<<<
 *     PLUS = HB_PAINT_COMPOSITE_MODE_PLUS
 *     SCREEN = HB_PAINT_COMPOSITE_MODE_SCREEN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_XOR); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_XOR, __pyx_t_7) < (0)) __PYX_ERR(9, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":14
 *     DEST_ATOP = HB_PAINT_COMPOSITE_MODE_DEST_ATOP
 *     XOR = HB_PAINT_COMPOSITE_MODE_XOR
 *     PLUS = HB_PAINT_COMPOSITE_MODE_PLUS             # <<<<<<<<<<<<<<
 *     SCREEN = HB_PAINT_COMPOSITE_MODE_SCREEN
 *     OVERLAY = HB_PAINT_COMPOSITE_MODE_OVERLAY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_PLUS); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_PLUS, __pyx_t_7) < (0)) __PYX_ERR(9, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":15
 *     XOR = HB_PAINT_COMPOSITE_MODE_XOR
 *     PLUS = HB_PAINT_COMPOSITE_MODE_PLUS
 *     SCREEN = HB_PAINT_COMPOSITE_MODE_SCREEN             # <<<<<<<<<<<<<<
 *     OVERLAY = HB_PAINT_COMPOSITE_MODE_OVERLAY
 *     DARKEN = HB_PAINT_COMPOSITE_MODE_DARKEN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SCREEN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SCREEN, __pyx_t_7) < (0)) __PYX_ERR(9, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":16
 *     PLUS = HB_PAINT_COMPOSITE_MODE_PLUS
 *     SCREEN = HB_PAINT_COMPOSITE_MODE_SCREEN
 *     OVERLAY = HB_PAINT_COMPOSITE_MODE_OVERLAY             # <<<<<<<<<<<<<<
 *     DARKEN = HB_PAINT_COMPOSITE_MODE_DARKEN
 *     LIGHTEN = HB_PAINT_COMPOSITE_MODE_LIGHTEN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_OVERLAY); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_OVERLAY, __pyx_t_7) < (0)) __PYX_ERR(9, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":17
 *     SCREEN = HB_PAINT_COMPOSITE_MODE_SCREEN
 *     OVERLAY = HB_PAINT_COMPOSITE_MODE_OVERLAY
 *     DARKEN = HB_PAINT_COMPOSITE_MODE_DARKEN             # <<<<<<<<<<<<<<
 *     LIGHTEN = HB_PAINT_COMPOSITE_MODE_LIGHTEN
 *     COLOR_DODGE = HB_PAINT_COMPOSITE_MODE_COLOR_DODGE
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DARKEN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DARKEN, __pyx_t_7) < (0)) __PYX_ERR(9, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":18
 *     OVERLAY = HB_PAINT_COMPOSITE_MODE_OVERLAY
 *     DARKEN = HB_PAINT_COMPOSITE_MODE_DARKEN
 *     LIGHTEN = HB_PAINT_COMPOSITE_MODE_LIGHTEN             # <<<<<<<<<<<<<<
 *     COLOR_DODGE = HB_PAINT_COMPOSITE_MODE_COLOR_DODGE
 *     COLOR_BURN = HB_PAINT_COMPOSITE_MODE_COLOR_BURN
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_LIGHTEN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_LIGHTEN, __pyx_t_7) < (0)) __PYX_ERR(9, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":19
 *     DARKEN = HB_PAINT_COMPOSITE_MODE_DARKEN
 *     LIGHTEN = HB_PAINT_COMPOSITE_MODE_LIGHTEN
 *     COLOR_DODGE = HB_PAINT_COMPOSITE_MODE_COLOR_DODGE             # <<<<<<<<<<<<<<
 *     COLOR_BURN = HB_PAINT_COMPOSITE_MODE_COLOR_BURN
 *     HARD_LIGHT = HB_PAINT_COMPOSITE_MODE_HARD_LIGHT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_COLOR_DODGE); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_COLOR_DODGE, __pyx_t_7) < (0)) __PYX_ERR(9, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":20
 *     LIGHTEN = HB_PAINT_COMPOSITE_MODE_LIGHTEN
 *     COLOR_DODGE = HB_PAINT_COMPOSITE_MODE_COLOR_DODGE
 *     COLOR_BURN = HB_PAINT_COMPOSITE_MODE_COLOR_BURN             # <<<<<<<<<<<<<<
 *     HARD_LIGHT = HB_PAINT_COMPOSITE_MODE_HARD_LIGHT
 *     SOFT_LIGHT = HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_COLOR_BURN); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_COLOR_BURN, __pyx_t_7) < (0)) __PYX_ERR(9, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":21
 *     COLOR_DODGE = HB_PAINT_COMPOSITE_MODE_COLOR_DODGE
 *     COLOR_BURN = HB_PAINT_COMPOSITE_MODE_COLOR_BURN
 *     HARD_LIGHT = HB_PAINT_COMPOSITE_MODE_HARD_LIGHT             # <<<<<<<<<<<<<<
 *     SOFT_LIGHT = HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT
 *     DIFFERENCE = HB_PAINT_COMPOSITE_MODE_DIFFERENCE
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_HARD_LIGHT); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HARD_LIGHT, __pyx_t_7) < (0)) __PYX_ERR(9, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":22
 *     COLOR_BURN = HB_PAINT_COMPOSITE_MODE_COLOR_BURN
 *     HARD_LIGHT = HB_PAINT_COMPOSITE_MODE_HARD_LIGHT
 *     SOFT_LIGHT = HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT             # <<<<<<<<<<<<<<
 *     DIFFERENCE = HB_PAINT_COMPOSITE_MODE_DIFFERENCE
 *     EXCLUSION = HB_PAINT_COMPOSITE_MODE_EXCLUSION
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SOFT_LIGHT, __pyx_t_7) < (0)) __PYX_ERR(9, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":23
 *     HARD_LIGHT = HB_PAINT_COMPOSITE_MODE_HARD_LIGHT
 *     SOFT_LIGHT = HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT
 *     DIFFERENCE = HB_PAINT_COMPOSITE_MODE_DIFFERENCE             # <<<<<<<<<<<<<<
 *     EXCLUSION = HB_PAINT_COMPOSITE_MODE_EXCLUSION
 *     MULTIPLY = HB_PAINT_COMPOSITE_MODE_MULTIPLY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_DIFFERENCE); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_DIFFERENCE, __pyx_t_7) < (0)) __PYX_ERR(9, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":24
 *     SOFT_LIGHT = HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT
 *     DIFFERENCE = HB_PAINT_COMPOSITE_MODE_DIFFERENCE
 *     EXCLUSION = HB_PAINT_COMPOSITE_MODE_EXCLUSION             # <<<<<<<<<<<<<<
 *     MULTIPLY = HB_PAINT_COMPOSITE_MODE_MULTIPLY
 *     HSL_HUE = HB_PAINT_COMPOSITE_MODE_HSL_HUE
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_EXCLUSION); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_EXCLUSION, __pyx_t_7) < (0)) __PYX_ERR(9, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":25
 *     DIFFERENCE = HB_PAINT_COMPOSITE_MODE_DIFFERENCE
 *     EXCLUSION = HB_PAINT_COMPOSITE_MODE_EXCLUSION
 *     MULTIPLY = HB_PAINT_COMPOSITE_MODE_MULTIPLY             # <<<<<<<<<<<<<<
 *     HSL_HUE = HB_PAINT_COMPOSITE_MODE_HSL_HUE
 *     HSL_SATURATION = HB_PAINT_COMPOSITE_MODE_HSL_SATURATION
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_MULTIPLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_MULTIPLY, __pyx_t_7) < (0)) __PYX_ERR(9, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":26
 *     EXCLUSION = HB_PAINT_COMPOSITE_MODE_EXCLUSION
 *     MULTIPLY = HB_PAINT_COMPOSITE_MODE_MULTIPLY
 *     HSL_HUE = HB_PAINT_COMPOSITE_MODE_HSL_HUE             # <<<<<<<<<<<<<<
 *     HSL_SATURATION = HB_PAINT_COMPOSITE_MODE_HSL_SATURATION
 *     HSL_COLOR = HB_PAINT_COMPOSITE_MODE_HSL_COLOR
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_HSL_HUE); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HSL_HUE, __pyx_t_7) < (0)) __PYX_ERR(9, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":27
 *     MULTIPLY = HB_PAINT_COMPOSITE_MODE_MULTIPLY
 *     HSL_HUE = HB_PAINT_COMPOSITE_MODE_HSL_HUE
 *     HSL_SATURATION = HB_PAINT_COMPOSITE_MODE_HSL_SATURATION             # <<<<<<<<<<<<<<
 *     HSL_COLOR = HB_PAINT_COMPOSITE_MODE_HSL_COLOR
 *     HSL_LUMINOSITY = HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_HSL_SATURATION); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HSL_SATURATION, __pyx_t_7) < (0)) __PYX_ERR(9, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":28
 *     HSL_HUE = HB_PAINT_COMPOSITE_MODE_HSL_HUE
 *     HSL_SATURATION = HB_PAINT_COMPOSITE_MODE_HSL_SATURATION
 *     HSL_COLOR = HB_PAINT_COMPOSITE_MODE_HSL_COLOR             # <<<<<<<<<<<<<<
 *     HSL_LUMINOSITY = HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_HSL_COLOR); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HSL_COLOR, __pyx_t_7) < (0)) __PYX_ERR(9, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":29
 *     HSL_SATURATION = HB_PAINT_COMPOSITE_MODE_HSL_SATURATION
 *     HSL_COLOR = HB_PAINT_COMPOSITE_MODE_HSL_COLOR
 *     HSL_LUMINOSITY = HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_paint_composite_mode_t(HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_HSL_LUMINOSITY, __pyx_t_7) < (0)) __PYX_ERR(9, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":1
 * class PaintCompositeMode(IntEnum):             # <<<<<<<<<<<<<<
 *     CLEAR = HB_PAINT_COMPOSITE_MODE_CLEAR
 *     SRC = HB_PAINT_COMPOSITE_MODE_SRC
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_PaintCompositeMode, __pyx_t_9, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_PaintCompositeMode, __pyx_t_7) < (0)) __PYX_ERR(9, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":32
 * 
 * 
 * class ColorStop(NamedTuple):             # <<<<<<<<<<<<<<
 *     offset: float
 *     is_foreground: bool
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_ColorStop, __pyx_mstate_global->__pyx_n_u_ColorStop, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_9 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(9, 32, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_offset, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(9, 32, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_is_foreground, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(9, 32, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_color, __pyx_mstate_global->__pyx_n_u_Color) < (0)) __PYX_ERR(9, 32, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_paint.pxi":35
 *     offset: float
 *     is_foreground: bool
 *     color: Color             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ColorStop, __pyx_t_9, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ColorStop, __pyx_t_5) < (0)) __PYX_ERR(9, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":38
 * 
 * 
 * class PaintExtend(IntEnum):             # <<<<<<<<<<<<<<
 *     PAD = HB_PAINT_EXTEND_PAD
 *     REPEAT = HB_PAINT_EXTEND_REPEAT
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_PaintExtend, __pyx_mstate_global->__pyx_n_u_PaintExtend, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_9 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(9, 38, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_paint.pxi":39
 * 
 * class PaintExtend(IntEnum):
 *     PAD = HB_PAINT_EXTEND_PAD             # <<<<<<<<<<<<<<
 *     REPEAT = HB_PAINT_EXTEND_REPEAT
 *     REFLECT = HB_PAINT_EXTEND_REFLECT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_paint_extend_t(HB_PAINT_EXTEND_PAD); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_PAD, __pyx_t_2) < (0)) __PYX_ERR(9, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_paint.pxi":40
 * class PaintExtend(IntEnum):
 *     PAD = HB_PAINT_EXTEND_PAD
 *     REPEAT = HB_PAINT_EXTEND_REPEAT             # <<<<<<<<<<<<<<
 *     REFLECT = HB_PAINT_EXTEND_REFLECT
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_paint_extend_t(HB_PAINT_EXTEND_REPEAT); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_REPEAT, __pyx_t_2) < (0)) __PYX_ERR(9, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_paint.pxi":41
 *     PAD = HB_PAINT_EXTEND_PAD
 *     REPEAT = HB_PAINT_EXTEND_REPEAT
 *     REFLECT = HB_PAINT_EXTEND_REFLECT             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_paint_extend_t(HB_PAINT_EXTEND_REFLECT); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_REFLECT, __pyx_t_2) < (0)) __PYX_ERR(9, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_paint.pxi":38
 * 
 * 
 * class PaintExtend(IntEnum):             # <<<<<<<<<<<<<<
 *     PAD = HB_PAINT_EXTEND_PAD
 *     REPEAT = HB_PAINT_EXTEND_REPEAT
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_PaintExtend, __pyx_t_9, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_PaintExtend, __pyx_t_2) < (0)) __PYX_ERR(9, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9ColorLine_3__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ColorLine___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[96])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9ColorLine_5__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_ColorLine___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[97])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":279
 *         hb_paint_funcs_destroy(self._hb_paintfuncs)
 * 
 *     def set_push_transform_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     float,  # xx
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_float_float) < (0)) __PYX_ERR(9, 279, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_5set_push_transform_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_push_transform_fu, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[98])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 279, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_push_transform_func, __pyx_t_7) < (0)) __PYX_ERR(9, 279, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":293
 *             self._hb_paintfuncs, _paint_push_transform_func, <void*>self, NULL)
 * 
 *     def set_pop_transform_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    object,  # paint_data
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_object_None) < (0)) __PYX_ERR(9, 293, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_7set_pop_transform_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_pop_transform_fun, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[99])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_pop_transform_func, __pyx_t_9) < (0)) __PYX_ERR(9, 293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":301
 *             self._hb_paintfuncs, _paint_pop_transform_func, <void*>self, NULL)
 * 
 *     def set_color_glyph_func(self,             # <<<<<<<<<<<<<<
 *                              func: Callable[[
 *                                  int,  # gid
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_int_object_bool) < (0)) __PYX_ERR(9, 301, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_9set_color_glyph_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_color_glyph_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[100])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_color_glyph_func, __pyx_t_7) < (0)) __PYX_ERR(9, 301, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":310
 *             self._hb_paintfuncs, _paint_color_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      int,  # gid
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_int_object_None) < (0)) __PYX_ERR(9, 310, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_11set_push_clip_glyph_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_push_clip_glyph_f, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[101])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_push_clip_glyph_func, __pyx_t_9) < (0)) __PYX_ERR(9, 310, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":319
 *             self._hb_paintfuncs, _paint_push_clip_glyph_func, <void*>self, NULL)
 * 
 *     def set_push_clip_rectangle_func(self,             # <<<<<<<<<<<<<<
 *                                      func: Callable[[
 *                                          float,  # xmin
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_float_float_float_float_2) < (0)) __PYX_ERR(9, 319, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_13set_push_clip_rectangle_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_push_clip_rectang, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[102])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 319, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_push_clip_rectangle_func, __pyx_t_7) < (0)) __PYX_ERR(9, 319, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":331
 *             self._hb_paintfuncs, _paint_push_clip_rectangle_func, <void*>self, NULL)
 * 
 *     def set_pop_clip_func(self,             # <<<<<<<<<<<<<<
 *                           func: Callable[[
 *                               object,  # paint_data
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_object_None) < (0)) __PYX_ERR(9, 331, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_15set_pop_clip_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_pop_clip_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[103])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_pop_clip_func, __pyx_t_9) < (0)) __PYX_ERR(9, 331, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":339
 *             self._hb_paintfuncs, _paint_pop_clip_func, <void*>self, NULL)
 * 
 *     def set_color_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Color,  # color
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Color_bool_object_None) < (0)) __PYX_ERR(9, 339, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_17set_color_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_color_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[104])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_color_func, __pyx_t_7) < (0)) __PYX_ERR(9, 339, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":349
 *             self._hb_paintfuncs, _paint_color_func, <void*>self, NULL)
 * 
 *     def set_image_func(self,             # <<<<<<<<<<<<<<
 *                        func: Callable[[
 *                            Blob,  # image
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Blob_int_int_str_float) < (0)) __PYX_ERR(9, 349, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_19set_image_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_image_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[105])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_image_func, __pyx_t_9) < (0)) __PYX_ERR(9, 349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":363
 *             self._hb_paintfuncs, _paint_image_func, <void*>self, NULL)
 * 
 *     def set_linear_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_ColorLine_float_float_f) < (0)) __PYX_ERR(9, 363, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_21set_linear_gradient_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_linear_gradient_f, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[106])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_linear_gradient_func, __pyx_t_7) < (0)) __PYX_ERR(9, 363, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":378
 *             self._hb_paintfuncs, _paint_linear_gradient_func, <void*>self, NULL)
 * 
 *     def set_radial_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                     ColorLine,  # color_line
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_ColorLine_float_float_f) < (0)) __PYX_ERR(9, 378, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_23set_radial_gradient_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_radial_gradient_f, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[107])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_radial_gradient_func, __pyx_t_9) < (0)) __PYX_ERR(9, 378, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":393
 *             self._hb_paintfuncs, _paint_radial_gradient_func, <void*>self, NULL)
 * 
 *     def set_sweep_gradient_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     ColorLine,  # color_line
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_ColorLine_float_float_f_2) < (0)) __PYX_ERR(9, 393, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_25set_sweep_gradient_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_sweep_gradient_fu, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[108])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_sweep_gradient_func, __pyx_t_7) < (0)) __PYX_ERR(9, 393, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":406
 *             self._hb_paintfuncs, _paint_sweep_gradient_func, <void*>self, NULL)
 * 
 *     def set_push_group_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 object,  # paint_data
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_object_None) < (0)) __PYX_ERR(9, 406, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_27set_push_group_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_push_group_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[109])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 406, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_push_group_func, __pyx_t_9) < (0)) __PYX_ERR(9, 406, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_paint.pxi":414
 *             self._hb_paintfuncs, _paint_push_group_func, <void*>self, NULL)
 * 
 *     def set_pop_group_func(self,             # <<<<<<<<<<<<<<
 *                            func: Callable[[
 *                                PaintCompositeMode,  # mode
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_PaintCompositeMode_obje) < (0)) __PYX_ERR(9, 414, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_29set_pop_group_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_pop_group_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[110])); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 414, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_pop_group_func, __pyx_t_7) < (0)) __PYX_ERR(9, 414, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_paint.pxi":423
 *             self._hb_paintfuncs, _paint_pop_group_func, <void*>self, NULL)
 * 
 *     def set_custom_palette_color_func(self,             # <<<<<<<<<<<<<<
 *                                       func: Callable[[
 *                                           int,  # color_index
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(9, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_int_object_Color) < (0)) __PYX_ERR(9, 423, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_31set_custom_palette_color_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs_set_custom_palette_co, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[111])); if (unlikely(!__pyx_t_9)) __PYX_ERR(9, 423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_PaintFuncs, __pyx_mstate_global->__pyx_n_u_set_custom_palette_color_func, __pyx_t_9) < (0)) __PYX_ERR(9, 423, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_33__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[112])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10PaintFuncs_35__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_PaintFuncs___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[113])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":1
 * class GlyphExtents(NamedTuple):             # <<<<<<<<<<<<<<
 *     x_bearing: int
 *     y_bearing: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_GlyphExtents, __pyx_mstate_global->__pyx_n_u_GlyphExtents, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_9 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(3, 1, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_x_bearing, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_y_bearing, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_width, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_height, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_7) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":5
 *     y_bearing: int
 *     width: int
 *     height: int             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_GlyphExtents, __pyx_t_9, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_GlyphExtents, __pyx_t_7) < (0)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":8
 * 
 * 
 * class FontExtents(NamedTuple):             # <<<<<<<<<<<<<<
 *     ascender: int
 *     descender: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_FontExtents, __pyx_mstate_global->__pyx_n_u_FontExtents, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_9 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(3, 8, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ascender, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 8, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_descender, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 8, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_line_gap, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 8, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":11
 *     ascender: int
 *     descender: int
 *     line_gap: int             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_FontExtents, __pyx_t_9, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_FontExtents, __pyx_t_5) < (0)) __PYX_ERR(3, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":14
 * 
 * 
 * class OTMathConstant(IntEnum):             # <<<<<<<<<<<<<<
 *     SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathConstant, __pyx_mstate_global->__pyx_n_u_OTMathConstant, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_9 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(3, 14, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":15
 * 
 * class OTMathConstant(IntEnum):
 *     SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN             # <<<<<<<<<<<<<<
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
 *     DELIMITED_SUB_FORMULA_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SCRIPT_PERCENT_SCALE_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":16
 * class OTMathConstant(IntEnum):
 *     SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN             # <<<<<<<<<<<<<<
 *     DELIMITED_SUB_FORMULA_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT
 *     DISPLAY_OPERATOR_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":17
 *     SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
 *     DELIMITED_SUB_FORMULA_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT             # <<<<<<<<<<<<<<
 *     DISPLAY_OPERATOR_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT
 *     MATH_LEADING = HB_OT_MATH_CONSTANT_MATH_LEADING
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DELIMITED_SUB_FORMULA_MIN_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":18
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
 *     DELIMITED_SUB_FORMULA_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT
 *     DISPLAY_OPERATOR_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT             # <<<<<<<<<<<<<<
 *     MATH_LEADING = HB_OT_MATH_CONSTANT_MATH_LEADING
 *     AXIS_HEIGHT = HB_OT_MATH_CONSTANT_AXIS_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_DISPLAY_OPERATOR_MIN_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":19
 *     DELIMITED_SUB_FORMULA_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT
 *     DISPLAY_OPERATOR_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT
 *     MATH_LEADING = HB_OT_MATH_CONSTANT_MATH_LEADING             # <<<<<<<<<<<<<<
 *     AXIS_HEIGHT = HB_OT_MATH_CONSTANT_AXIS_HEIGHT
 *     ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_MATH_LEADING); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_MATH_LEADING, __pyx_t_2) < (0)) __PYX_ERR(3, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":20
 *     DISPLAY_OPERATOR_MIN_HEIGHT = HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT
 *     MATH_LEADING = HB_OT_MATH_CONSTANT_MATH_LEADING
 *     AXIS_HEIGHT = HB_OT_MATH_CONSTANT_AXIS_HEIGHT             # <<<<<<<<<<<<<<
 *     ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT
 *     FLATTENED_ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_AXIS_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 20, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_AXIS_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 20, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":21
 *     MATH_LEADING = HB_OT_MATH_CONSTANT_MATH_LEADING
 *     AXIS_HEIGHT = HB_OT_MATH_CONSTANT_AXIS_HEIGHT
 *     ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT             # <<<<<<<<<<<<<<
 *     FLATTENED_ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT
 *     SUBSCRIPT_SHIFT_DOWN = HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 21, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ACCENT_BASE_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 21, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":22
 *     AXIS_HEIGHT = HB_OT_MATH_CONSTANT_AXIS_HEIGHT
 *     ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT
 *     FLATTENED_ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_SHIFT_DOWN = HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN
 *     SUBSCRIPT_TOP_MAX = HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FLATTENED_ACCENT_BASE_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":23
 *     ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT
 *     FLATTENED_ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT
 *     SUBSCRIPT_SHIFT_DOWN = HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_TOP_MAX = HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX
 *     SUBSCRIPT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_SHIFT_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":24
 *     FLATTENED_ACCENT_BASE_HEIGHT = HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT
 *     SUBSCRIPT_SHIFT_DOWN = HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN
 *     SUBSCRIPT_TOP_MAX = HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN
 *     SUPERSCRIPT_SHIFT_UP = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_TOP_MAX, __pyx_t_2) < (0)) __PYX_ERR(3, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":25
 *     SUBSCRIPT_SHIFT_DOWN = HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN
 *     SUBSCRIPT_TOP_MAX = HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX
 *     SUBSCRIPT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_SHIFT_UP = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP
 *     SUPERSCRIPT_SHIFT_UP_CRAMPED = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_BASELINE_DROP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":26
 *     SUBSCRIPT_TOP_MAX = HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX
 *     SUBSCRIPT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN
 *     SUPERSCRIPT_SHIFT_UP = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_SHIFT_UP_CRAMPED = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED
 *     SUPERSCRIPT_BOTTOM_MIN = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_SHIFT_UP, __pyx_t_2) < (0)) __PYX_ERR(3, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":27
 *     SUBSCRIPT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN
 *     SUPERSCRIPT_SHIFT_UP = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP
 *     SUPERSCRIPT_SHIFT_UP_CRAMPED = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_BOTTOM_MIN = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN
 *     SUPERSCRIPT_BASELINE_DROP_MAX = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_SHIFT_UP_CRAMPED, __pyx_t_2) < (0)) __PYX_ERR(3, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":28
 *     SUPERSCRIPT_SHIFT_UP = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP
 *     SUPERSCRIPT_SHIFT_UP_CRAMPED = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED
 *     SUPERSCRIPT_BOTTOM_MIN = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_BASELINE_DROP_MAX = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX
 *     SUB_SUPERSCRIPT_GAP_MIN = HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_BOTTOM_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":29
 *     SUPERSCRIPT_SHIFT_UP_CRAMPED = HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED
 *     SUPERSCRIPT_BOTTOM_MIN = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN
 *     SUPERSCRIPT_BASELINE_DROP_MAX = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX             # <<<<<<<<<<<<<<
 *     SUB_SUPERSCRIPT_GAP_MIN = HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN
 *     SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_BASELINE_DROP_MAX, __pyx_t_2) < (0)) __PYX_ERR(3, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":30
 *     SUPERSCRIPT_BOTTOM_MIN = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN
 *     SUPERSCRIPT_BASELINE_DROP_MAX = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX
 *     SUB_SUPERSCRIPT_GAP_MIN = HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT
 *     SPACE_AFTER_SCRIPT = HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUB_SUPERSCRIPT_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":31
 *     SUPERSCRIPT_BASELINE_DROP_MAX = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX
 *     SUB_SUPERSCRIPT_GAP_MIN = HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN
 *     SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT             # <<<<<<<<<<<<<<
 *     SPACE_AFTER_SCRIPT = HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT
 *     UPPER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBS, __pyx_t_2) < (0)) __PYX_ERR(3, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":32
 *     SUB_SUPERSCRIPT_GAP_MIN = HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN
 *     SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT
 *     SPACE_AFTER_SCRIPT = HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT             # <<<<<<<<<<<<<<
 *     UPPER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN
 *     UPPER_LIMIT_BASELINE_RISE_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SPACE_AFTER_SCRIPT, __pyx_t_2) < (0)) __PYX_ERR(3, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":33
 *     SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT
 *     SPACE_AFTER_SCRIPT = HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT
 *     UPPER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN             # <<<<<<<<<<<<<<
 *     UPPER_LIMIT_BASELINE_RISE_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN
 *     LOWER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UPPER_LIMIT_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":34
 *     SPACE_AFTER_SCRIPT = HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT
 *     UPPER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN
 *     UPPER_LIMIT_BASELINE_RISE_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN             # <<<<<<<<<<<<<<
 *     LOWER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN
 *     LOWER_LIMIT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 34, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UPPER_LIMIT_BASELINE_RISE_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 34, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":35
 *     UPPER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN
 *     UPPER_LIMIT_BASELINE_RISE_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN
 *     LOWER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN             # <<<<<<<<<<<<<<
 *     LOWER_LIMIT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN
 *     STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_LOWER_LIMIT_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":36
 *     UPPER_LIMIT_BASELINE_RISE_MIN = HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN
 *     LOWER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN
 *     LOWER_LIMIT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN             # <<<<<<<<<<<<<<
 *     STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP
 *     STACK_TOP_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_LOWER_LIMIT_BASELINE_DROP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":37
 *     LOWER_LIMIT_GAP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN
 *     LOWER_LIMIT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN
 *     STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP             # <<<<<<<<<<<<<<
 *     STACK_TOP_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP
 *     STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_TOP_SHIFT_UP, __pyx_t_2) < (0)) __PYX_ERR(3, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":38
 *     LOWER_LIMIT_BASELINE_DROP_MIN = HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN
 *     STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP
 *     STACK_TOP_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP             # <<<<<<<<<<<<<<
 *     STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN
 *     STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_TOP_DISPLAY_STYLE_SHIFT_UP, __pyx_t_2) < (0)) __PYX_ERR(3, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":39
 *     STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP
 *     STACK_TOP_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP
 *     STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN
 *     STACK_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_BOTTOM_SHIFT_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":40
 *     STACK_TOP_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP
 *     STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN
 *     STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     STACK_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_GAP_MIN
 *     STACK_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_BOTTOM_DISPLAY_STYLE_SHIFT, __pyx_t_2) < (0)) __PYX_ERR(3, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":41
 *     STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN
 *     STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN
 *     STACK_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_GAP_MIN             # <<<<<<<<<<<<<<
 *     STACK_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN
 *     STRETCH_STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":42
 *     STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN
 *     STACK_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_GAP_MIN
 *     STACK_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN             # <<<<<<<<<<<<<<
 *     STRETCH_STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP
 *     STRETCH_STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STACK_DISPLAY_STYLE_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":43
 *     STACK_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_GAP_MIN
 *     STACK_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN
 *     STRETCH_STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP             # <<<<<<<<<<<<<<
 *     STRETCH_STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN
 *     STRETCH_STACK_GAP_ABOVE_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRETCH_STACK_TOP_SHIFT_UP, __pyx_t_2) < (0)) __PYX_ERR(3, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":44
 *     STACK_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN
 *     STRETCH_STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP
 *     STRETCH_STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     STRETCH_STACK_GAP_ABOVE_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN
 *     STRETCH_STACK_GAP_BELOW_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRETCH_STACK_BOTTOM_SHIFT_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":45
 *     STRETCH_STACK_TOP_SHIFT_UP = HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP
 *     STRETCH_STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN
 *     STRETCH_STACK_GAP_ABOVE_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN             # <<<<<<<<<<<<<<
 *     STRETCH_STACK_GAP_BELOW_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN
 *     FRACTION_NUMERATOR_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRETCH_STACK_GAP_ABOVE_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":46
 *     STRETCH_STACK_BOTTOM_SHIFT_DOWN = HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN
 *     STRETCH_STACK_GAP_ABOVE_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN
 *     STRETCH_STACK_GAP_BELOW_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN             # <<<<<<<<<<<<<<
 *     FRACTION_NUMERATOR_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP
 *     FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRETCH_STACK_GAP_BELOW_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":47
 *     STRETCH_STACK_GAP_ABOVE_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN
 *     STRETCH_STACK_GAP_BELOW_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN
 *     FRACTION_NUMERATOR_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP             # <<<<<<<<<<<<<<
 *     FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP
 *     FRACTION_DENOMINATOR_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_NUMERATOR_SHIFT_UP, __pyx_t_2) < (0)) __PYX_ERR(3, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":48
 *     STRETCH_STACK_GAP_BELOW_MIN = HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN
 *     FRACTION_NUMERATOR_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP
 *     FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP             # <<<<<<<<<<<<<<
 *     FRACTION_DENOMINATOR_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN
 *     FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_NUMERATOR_DISPLAY_STYLE, __pyx_t_2) < (0)) __PYX_ERR(3, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":49
 *     FRACTION_NUMERATOR_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP
 *     FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP
 *     FRACTION_DENOMINATOR_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN
 *     FRACTION_NUMERATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_DENOMINATOR_SHIFT_DOWN, __pyx_t_2) < (0)) __PYX_ERR(3, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":50
 *     FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP
 *     FRACTION_DENOMINATOR_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN
 *     FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN             # <<<<<<<<<<<<<<
 *     FRACTION_NUMERATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN
 *     FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_DENOMINATOR_DISPLAY_STY, __pyx_t_2) < (0)) __PYX_ERR(3, 50, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":51
 *     FRACTION_DENOMINATOR_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN
 *     FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN
 *     FRACTION_NUMERATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN             # <<<<<<<<<<<<<<
 *     FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN
 *     FRACTION_RULE_THICKNESS = HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_NUMERATOR_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":52
 *     FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN
 *     FRACTION_NUMERATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN
 *     FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN             # <<<<<<<<<<<<<<
 *     FRACTION_RULE_THICKNESS = HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS
 *     FRACTION_DENOMINATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 52, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_NUM_DISPLAY_STYLE_GAP_M, __pyx_t_2) < (0)) __PYX_ERR(3, 52, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":53
 *     FRACTION_NUMERATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN
 *     FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN
 *     FRACTION_RULE_THICKNESS = HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS             # <<<<<<<<<<<<<<
 *     FRACTION_DENOMINATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN
 *     FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_RULE_THICKNESS, __pyx_t_2) < (0)) __PYX_ERR(3, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":54
 *     FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN
 *     FRACTION_RULE_THICKNESS = HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS
 *     FRACTION_DENOMINATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN             # <<<<<<<<<<<<<<
 *     FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN
 *     SKEWED_FRACTION_HORIZONTAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_DENOMINATOR_GAP_MIN, __pyx_t_2) < (0)) __PYX_ERR(3, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":55
 *     FRACTION_RULE_THICKNESS = HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS
 *     FRACTION_DENOMINATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN
 *     FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN             # <<<<<<<<<<<<<<
 *     SKEWED_FRACTION_HORIZONTAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP
 *     SKEWED_FRACTION_VERTICAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 55, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_FRACTION_DENOM_DISPLAY_STYLE_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":56
 *     FRACTION_DENOMINATOR_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN
 *     FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN
 *     SKEWED_FRACTION_HORIZONTAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP             # <<<<<<<<<<<<<<
 *     SKEWED_FRACTION_VERTICAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP
 *     OVERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SKEWED_FRACTION_HORIZONTAL_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":57
 *     FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN
 *     SKEWED_FRACTION_HORIZONTAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP
 *     SKEWED_FRACTION_VERTICAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP             # <<<<<<<<<<<<<<
 *     OVERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP
 *     OVERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SKEWED_FRACTION_VERTICAL_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":58
 *     SKEWED_FRACTION_HORIZONTAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP
 *     SKEWED_FRACTION_VERTICAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP
 *     OVERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP             # <<<<<<<<<<<<<<
 *     OVERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS
 *     OVERBAR_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OVERBAR_VERTICAL_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":59
 *     SKEWED_FRACTION_VERTICAL_GAP = HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP
 *     OVERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP
 *     OVERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS             # <<<<<<<<<<<<<<
 *     OVERBAR_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER
 *     UNDERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OVERBAR_RULE_THICKNESS, __pyx_t_2) < (0)) __PYX_ERR(3, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":60
 *     OVERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP
 *     OVERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS
 *     OVERBAR_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER             # <<<<<<<<<<<<<<
 *     UNDERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP
 *     UNDERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OVERBAR_EXTRA_ASCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":61
 *     OVERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS
 *     OVERBAR_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER
 *     UNDERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP             # <<<<<<<<<<<<<<
 *     UNDERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS
 *     UNDERBAR_EXTRA_DESCENDER = HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNDERBAR_VERTICAL_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":62
 *     OVERBAR_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER
 *     UNDERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP
 *     UNDERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS             # <<<<<<<<<<<<<<
 *     UNDERBAR_EXTRA_DESCENDER = HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER
 *     RADICAL_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNDERBAR_RULE_THICKNESS, __pyx_t_2) < (0)) __PYX_ERR(3, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":63
 *     UNDERBAR_VERTICAL_GAP = HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP
 *     UNDERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS
 *     UNDERBAR_EXTRA_DESCENDER = HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER             # <<<<<<<<<<<<<<
 *     RADICAL_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP
 *     RADICAL_DISPLAY_STYLE_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNDERBAR_EXTRA_DESCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":64
 *     UNDERBAR_RULE_THICKNESS = HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS
 *     UNDERBAR_EXTRA_DESCENDER = HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER
 *     RADICAL_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP             # <<<<<<<<<<<<<<
 *     RADICAL_DISPLAY_STYLE_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP
 *     RADICAL_RULE_THICKNESS = HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_VERTICAL_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":65
 *     UNDERBAR_EXTRA_DESCENDER = HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER
 *     RADICAL_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP
 *     RADICAL_DISPLAY_STYLE_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP             # <<<<<<<<<<<<<<
 *     RADICAL_RULE_THICKNESS = HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS
 *     RADICAL_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_DISPLAY_STYLE_VERTICAL_G, __pyx_t_2) < (0)) __PYX_ERR(3, 65, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":66
 *     RADICAL_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP
 *     RADICAL_DISPLAY_STYLE_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP
 *     RADICAL_RULE_THICKNESS = HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS             # <<<<<<<<<<<<<<
 *     RADICAL_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER
 *     RADICAL_KERN_BEFORE_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_RULE_THICKNESS, __pyx_t_2) < (0)) __PYX_ERR(3, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":67
 *     RADICAL_DISPLAY_STYLE_VERTICAL_GAP = HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP
 *     RADICAL_RULE_THICKNESS = HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS
 *     RADICAL_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER             # <<<<<<<<<<<<<<
 *     RADICAL_KERN_BEFORE_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE
 *     RADICAL_KERN_AFTER_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_EXTRA_ASCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":68
 *     RADICAL_RULE_THICKNESS = HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS
 *     RADICAL_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER
 *     RADICAL_KERN_BEFORE_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE             # <<<<<<<<<<<<<<
 *     RADICAL_KERN_AFTER_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE
 *     RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_KERN_BEFORE_DEGREE, __pyx_t_2) < (0)) __PYX_ERR(3, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":69
 *     RADICAL_EXTRA_ASCENDER = HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER
 *     RADICAL_KERN_BEFORE_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE
 *     RADICAL_KERN_AFTER_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE             # <<<<<<<<<<<<<<
 *     RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_KERN_AFTER_DEGREE, __pyx_t_2) < (0)) __PYX_ERR(3, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":70
 *     RADICAL_KERN_BEFORE_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE
 *     RADICAL_KERN_AFTER_DEGREE = HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE
 *     RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_math_constant_t(HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 70, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_RADICAL_DEGREE_BOTTOM_RAISE_PERC, __pyx_t_2) < (0)) __PYX_ERR(3, 70, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":14
 * 
 * 
 * class OTMathConstant(IntEnum):             # <<<<<<<<<<<<<<
 *     SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN
 *     SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTMathConstant, __pyx_t_9, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathConstant, __pyx_t_2) < (0)) __PYX_ERR(3, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":73
 * 
 * 
 * class OTMathKernEntry(NamedTuple):             # <<<<<<<<<<<<<<
 *     max_correction_height: int
 *     kern_value: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathKernEntry, __pyx_mstate_global->__pyx_n_u_OTMathKernEntry, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_9 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(3, 73, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_max_correction_height, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 73, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_kern_value, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 73, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_7) < (0)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":75
 * class OTMathKernEntry(NamedTuple):
 *     max_correction_height: int
 *     kern_value: int             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OTMathKernEntry, __pyx_t_9, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathKernEntry, __pyx_t_7) < (0)) __PYX_ERR(3, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":78
 * 
 * 
 * class OTMathKern(IntEnum):             # <<<<<<<<<<<<<<
 *     TOP_RIGHT = HB_OT_MATH_KERN_TOP_RIGHT
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathKern, __pyx_mstate_global->__pyx_n_u_OTMathKern, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_9 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(3, 78, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":79
 * 
 * class OTMathKern(IntEnum):
 *     TOP_RIGHT = HB_OT_MATH_KERN_TOP_RIGHT             # <<<<<<<<<<<<<<
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT
 *     BOTTOM_RIGHT = HB_OT_MATH_KERN_BOTTOM_RIGHT
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_math_kern_t(HB_OT_MATH_KERN_TOP_RIGHT); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_TOP_RIGHT, __pyx_t_5) < (0)) __PYX_ERR(3, 79, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":80
 * class OTMathKern(IntEnum):
 *     TOP_RIGHT = HB_OT_MATH_KERN_TOP_RIGHT
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT             # <<<<<<<<<<<<<<
 *     BOTTOM_RIGHT = HB_OT_MATH_KERN_BOTTOM_RIGHT
 *     BOTTOM_LEFT = HB_OT_MATH_KERN_BOTTOM_LEFT
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_math_kern_t(HB_OT_MATH_KERN_TOP_LEFT); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_TOP_LEFT, __pyx_t_5) < (0)) __PYX_ERR(3, 80, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":81
 *     TOP_RIGHT = HB_OT_MATH_KERN_TOP_RIGHT
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT
 *     BOTTOM_RIGHT = HB_OT_MATH_KERN_BOTTOM_RIGHT             # <<<<<<<<<<<<<<
 *     BOTTOM_LEFT = HB_OT_MATH_KERN_BOTTOM_LEFT
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_math_kern_t(HB_OT_MATH_KERN_BOTTOM_RIGHT); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 81, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BOTTOM_RIGHT, __pyx_t_5) < (0)) __PYX_ERR(3, 81, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":82
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT
 *     BOTTOM_RIGHT = HB_OT_MATH_KERN_BOTTOM_RIGHT
 *     BOTTOM_LEFT = HB_OT_MATH_KERN_BOTTOM_LEFT             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_ot_math_kern_t(HB_OT_MATH_KERN_BOTTOM_LEFT); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 82, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BOTTOM_LEFT, __pyx_t_5) < (0)) __PYX_ERR(3, 82, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":78
 * 
 * 
 * class OTMathKern(IntEnum):             # <<<<<<<<<<<<<<
 *     TOP_RIGHT = HB_OT_MATH_KERN_TOP_RIGHT
 *     TOP_LEFT = HB_OT_MATH_KERN_TOP_LEFT
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTMathKern, __pyx_t_9, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathKern, __pyx_t_5) < (0)) __PYX_ERR(3, 78, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":85
 * 
 * 
 * class OTMathGlyphVariant(NamedTuple):             # <<<<<<<<<<<<<<
 *     glyph: int
 *     advance: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathGlyphVariant, __pyx_mstate_global->__pyx_n_u_OTMathGlyphVariant, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_9 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(3, 85, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 85, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_advance, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 85, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_2) < (0)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":87
 * class OTMathGlyphVariant(NamedTuple):
 *     glyph: int
 *     advance: int             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTMathGlyphVariant, __pyx_t_9, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathGlyphVariant, __pyx_t_2) < (0)) __PYX_ERR(3, 85, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":90
 * 
 * 
 * class OTMathGlyphPartFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     EXTENDER = HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER
 * 
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_9 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(3, 90, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":91
 * 
 * class OTMathGlyphPartFlags(IntFlag):
 *     EXTENDER = HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_ot_math_glyph_part_flags_t(HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 91, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_EXTENDER, __pyx_t_7) < (0)) __PYX_ERR(3, 91, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":90
 * 
 * 
 * class OTMathGlyphPartFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     EXTENDER = HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER
 * 
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags, __pyx_t_9, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags, __pyx_t_7) < (0)) __PYX_ERR(3, 90, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":94
 * 
 * 
 * class OTMathGlyphPart(NamedTuple):             # <<<<<<<<<<<<<<
 *     glyph: int
 *     start_connector_length: int
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPart, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPart, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_9 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(3, 94, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_start_connector_length, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_end_connector_length, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_full_advance, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_flags, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPartFlags) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_5) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":99
 *     end_connector_length: int
 *     full_advance: int
 *     flags: OTMathGlyphPartFlags             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPart, __pyx_t_9, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMathGlyphPart, __pyx_t_5) < (0)) __PYX_ERR(3, 94, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":102
 * 
 * 
 * class OTMetricsTag(IntEnum):             # <<<<<<<<<<<<<<
 *     HORIZONTAL_ASCENDER = HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_OTMetricsTag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_9 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(3, 102, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":103
 * 
 * class OTMetricsTag(IntEnum):
 *     HORIZONTAL_ASCENDER = HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER             # <<<<<<<<<<<<<<
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER
 *     HORIZONTAL_LINE_GAP = HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 103, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_ASCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 103, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":104
 * class OTMetricsTag(IntEnum):
 *     HORIZONTAL_ASCENDER = HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER             # <<<<<<<<<<<<<<
 *     HORIZONTAL_LINE_GAP = HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP
 *     HORIZONTAL_CLIPPING_ASCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_DESCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 104, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":105
 *     HORIZONTAL_ASCENDER = HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER
 *     HORIZONTAL_LINE_GAP = HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP             # <<<<<<<<<<<<<<
 *     HORIZONTAL_CLIPPING_ASCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT
 *     HORIZONTAL_CLIPPING_DESCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_LINE_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 105, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":106
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER
 *     HORIZONTAL_LINE_GAP = HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP
 *     HORIZONTAL_CLIPPING_ASCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT             # <<<<<<<<<<<<<<
 *     HORIZONTAL_CLIPPING_DESCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT
 *     VERTICAL_ASCENDER = HB_OT_METRICS_TAG_VERTICAL_ASCENDER
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_CLIPPING_ASCENT, __pyx_t_2) < (0)) __PYX_ERR(3, 106, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":107
 *     HORIZONTAL_LINE_GAP = HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP
 *     HORIZONTAL_CLIPPING_ASCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT
 *     HORIZONTAL_CLIPPING_DESCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT             # <<<<<<<<<<<<<<
 *     VERTICAL_ASCENDER = HB_OT_METRICS_TAG_VERTICAL_ASCENDER
 *     VERTICAL_DESCENDER = HB_OT_METRICS_TAG_VERTICAL_DESCENDER
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 107, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_CLIPPING_DESCENT, __pyx_t_2) < (0)) __PYX_ERR(3, 107, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":108
 *     HORIZONTAL_CLIPPING_ASCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT
 *     HORIZONTAL_CLIPPING_DESCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT
 *     VERTICAL_ASCENDER = HB_OT_METRICS_TAG_VERTICAL_ASCENDER             # <<<<<<<<<<<<<<
 *     VERTICAL_DESCENDER = HB_OT_METRICS_TAG_VERTICAL_DESCENDER
 *     VERTICAL_LINE_GAP = HB_OT_METRICS_TAG_VERTICAL_LINE_GAP
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_ASCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_ASCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 108, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":109
 *     HORIZONTAL_CLIPPING_DESCENT = HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT
 *     VERTICAL_ASCENDER = HB_OT_METRICS_TAG_VERTICAL_ASCENDER
 *     VERTICAL_DESCENDER = HB_OT_METRICS_TAG_VERTICAL_DESCENDER             # <<<<<<<<<<<<<<
 *     VERTICAL_LINE_GAP = HB_OT_METRICS_TAG_VERTICAL_LINE_GAP
 *     HORIZONTAL_CARET_RISE = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_DESCENDER); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_DESCENDER, __pyx_t_2) < (0)) __PYX_ERR(3, 109, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":110
 *     VERTICAL_ASCENDER = HB_OT_METRICS_TAG_VERTICAL_ASCENDER
 *     VERTICAL_DESCENDER = HB_OT_METRICS_TAG_VERTICAL_DESCENDER
 *     VERTICAL_LINE_GAP = HB_OT_METRICS_TAG_VERTICAL_LINE_GAP             # <<<<<<<<<<<<<<
 *     HORIZONTAL_CARET_RISE = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE
 *     HORIZONTAL_CARET_RUN = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_LINE_GAP); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 110, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_LINE_GAP, __pyx_t_2) < (0)) __PYX_ERR(3, 110, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":111
 *     VERTICAL_DESCENDER = HB_OT_METRICS_TAG_VERTICAL_DESCENDER
 *     VERTICAL_LINE_GAP = HB_OT_METRICS_TAG_VERTICAL_LINE_GAP
 *     HORIZONTAL_CARET_RISE = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE             # <<<<<<<<<<<<<<
 *     HORIZONTAL_CARET_RUN = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN
 *     HORIZONTAL_CARET_OFFSET = HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_CARET_RISE, __pyx_t_2) < (0)) __PYX_ERR(3, 111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":112
 *     VERTICAL_LINE_GAP = HB_OT_METRICS_TAG_VERTICAL_LINE_GAP
 *     HORIZONTAL_CARET_RISE = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE
 *     HORIZONTAL_CARET_RUN = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN             # <<<<<<<<<<<<<<
 *     HORIZONTAL_CARET_OFFSET = HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET
 *     VERTICAL_CARET_RISE = HB_OT_METRICS_TAG_VERTICAL_CARET_RISE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 112, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_CARET_RUN, __pyx_t_2) < (0)) __PYX_ERR(3, 112, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":113
 *     HORIZONTAL_CARET_RISE = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE
 *     HORIZONTAL_CARET_RUN = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN
 *     HORIZONTAL_CARET_OFFSET = HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET             # <<<<<<<<<<<<<<
 *     VERTICAL_CARET_RISE = HB_OT_METRICS_TAG_VERTICAL_CARET_RISE
 *     VERTICAL_CARET_RUN = HB_OT_METRICS_TAG_VERTICAL_CARET_RUN
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_HORIZONTAL_CARET_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 113, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":114
 *     HORIZONTAL_CARET_RUN = HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN
 *     HORIZONTAL_CARET_OFFSET = HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET
 *     VERTICAL_CARET_RISE = HB_OT_METRICS_TAG_VERTICAL_CARET_RISE             # <<<<<<<<<<<<<<
 *     VERTICAL_CARET_RUN = HB_OT_METRICS_TAG_VERTICAL_CARET_RUN
 *     VERTICAL_CARET_OFFSET = HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_CARET_RISE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_CARET_RISE, __pyx_t_2) < (0)) __PYX_ERR(3, 114, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":115
 *     HORIZONTAL_CARET_OFFSET = HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET
 *     VERTICAL_CARET_RISE = HB_OT_METRICS_TAG_VERTICAL_CARET_RISE
 *     VERTICAL_CARET_RUN = HB_OT_METRICS_TAG_VERTICAL_CARET_RUN             # <<<<<<<<<<<<<<
 *     VERTICAL_CARET_OFFSET = HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET
 *     X_HEIGHT = HB_OT_METRICS_TAG_X_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_CARET_RUN); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_CARET_RUN, __pyx_t_2) < (0)) __PYX_ERR(3, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":116
 *     VERTICAL_CARET_RISE = HB_OT_METRICS_TAG_VERTICAL_CARET_RISE
 *     VERTICAL_CARET_RUN = HB_OT_METRICS_TAG_VERTICAL_CARET_RUN
 *     VERTICAL_CARET_OFFSET = HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET             # <<<<<<<<<<<<<<
 *     X_HEIGHT = HB_OT_METRICS_TAG_X_HEIGHT
 *     CAP_HEIGHT = HB_OT_METRICS_TAG_CAP_HEIGHT
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_VERTICAL_CARET_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 116, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":117
 *     VERTICAL_CARET_RUN = HB_OT_METRICS_TAG_VERTICAL_CARET_RUN
 *     VERTICAL_CARET_OFFSET = HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET
 *     X_HEIGHT = HB_OT_METRICS_TAG_X_HEIGHT             # <<<<<<<<<<<<<<
 *     CAP_HEIGHT = HB_OT_METRICS_TAG_CAP_HEIGHT
 *     SUBSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_X_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 117, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_X_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 117, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":118
 *     VERTICAL_CARET_OFFSET = HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET
 *     X_HEIGHT = HB_OT_METRICS_TAG_X_HEIGHT
 *     CAP_HEIGHT = HB_OT_METRICS_TAG_CAP_HEIGHT             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE
 *     SUBSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_CAP_HEIGHT); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_CAP_HEIGHT, __pyx_t_2) < (0)) __PYX_ERR(3, 118, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":119
 *     X_HEIGHT = HB_OT_METRICS_TAG_X_HEIGHT
 *     CAP_HEIGHT = HB_OT_METRICS_TAG_CAP_HEIGHT
 *     SUBSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE
 *     SUBSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_EM_X_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 119, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":120
 *     CAP_HEIGHT = HB_OT_METRICS_TAG_CAP_HEIGHT
 *     SUBSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE
 *     SUBSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET
 *     SUBSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_EM_Y_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 120, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":121
 *     SUBSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE
 *     SUBSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE
 *     SUBSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET             # <<<<<<<<<<<<<<
 *     SUBSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET
 *     SUPERSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_EM_X_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 121, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":122
 *     SUBSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE
 *     SUBSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET
 *     SUBSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE
 *     SUPERSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUBSCRIPT_EM_Y_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 122, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":123
 *     SUBSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET
 *     SUBSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET
 *     SUPERSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE
 *     SUPERSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_EM_X_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 123, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":124
 *     SUBSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET
 *     SUPERSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE
 *     SUPERSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET
 *     SUPERSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_EM_Y_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 124, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":125
 *     SUPERSCRIPT_EM_X_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE
 *     SUPERSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE
 *     SUPERSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET             # <<<<<<<<<<<<<<
 *     SUPERSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET
 *     STRIKEOUT_SIZE = HB_OT_METRICS_TAG_STRIKEOUT_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_EM_X_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 125, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":126
 *     SUPERSCRIPT_EM_Y_SIZE = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE
 *     SUPERSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET
 *     SUPERSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET             # <<<<<<<<<<<<<<
 *     STRIKEOUT_SIZE = HB_OT_METRICS_TAG_STRIKEOUT_SIZE
 *     STRIKEOUT_OFFSET = HB_OT_METRICS_TAG_STRIKEOUT_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SUPERSCRIPT_EM_Y_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 126, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":127
 *     SUPERSCRIPT_EM_X_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET
 *     SUPERSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET
 *     STRIKEOUT_SIZE = HB_OT_METRICS_TAG_STRIKEOUT_SIZE             # <<<<<<<<<<<<<<
 *     STRIKEOUT_OFFSET = HB_OT_METRICS_TAG_STRIKEOUT_OFFSET
 *     UNDERLINE_SIZE = HB_OT_METRICS_TAG_UNDERLINE_SIZE
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_STRIKEOUT_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRIKEOUT_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 127, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":128
 *     SUPERSCRIPT_EM_Y_OFFSET = HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET
 *     STRIKEOUT_SIZE = HB_OT_METRICS_TAG_STRIKEOUT_SIZE
 *     STRIKEOUT_OFFSET = HB_OT_METRICS_TAG_STRIKEOUT_OFFSET             # <<<<<<<<<<<<<<
 *     UNDERLINE_SIZE = HB_OT_METRICS_TAG_UNDERLINE_SIZE
 *     UNDERLINE_OFFSET = HB_OT_METRICS_TAG_UNDERLINE_OFFSET
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_STRIKEOUT_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_STRIKEOUT_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":129
 *     STRIKEOUT_SIZE = HB_OT_METRICS_TAG_STRIKEOUT_SIZE
 *     STRIKEOUT_OFFSET = HB_OT_METRICS_TAG_STRIKEOUT_OFFSET
 *     UNDERLINE_SIZE = HB_OT_METRICS_TAG_UNDERLINE_SIZE             # <<<<<<<<<<<<<<
 *     UNDERLINE_OFFSET = HB_OT_METRICS_TAG_UNDERLINE_OFFSET
 * 
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_UNDERLINE_SIZE); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 129, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNDERLINE_SIZE, __pyx_t_2) < (0)) __PYX_ERR(3, 129, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":130
 *     STRIKEOUT_OFFSET = HB_OT_METRICS_TAG_STRIKEOUT_OFFSET
 *     UNDERLINE_SIZE = HB_OT_METRICS_TAG_UNDERLINE_SIZE
 *     UNDERLINE_OFFSET = HB_OT_METRICS_TAG_UNDERLINE_OFFSET             # <<<<<<<<<<<<<<
 * 
 * class StyleTag(IntEnum):
*/
  __pyx_t_2 = __Pyx_PyLong_From_hb_ot_metrics_tag_t(HB_OT_METRICS_TAG_UNDERLINE_OFFSET); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_UNDERLINE_OFFSET, __pyx_t_2) < (0)) __PYX_ERR(3, 130, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_font.pxi":102
 * 
 * 
 * class OTMetricsTag(IntEnum):             # <<<<<<<<<<<<<<
 *     HORIZONTAL_ASCENDER = HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER
 *     HORIZONTAL_DESCENDER = HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_OTMetricsTag, __pyx_t_9, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_OTMetricsTag, __pyx_t_2) < (0)) __PYX_ERR(3, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":132
 *     UNDERLINE_OFFSET = HB_OT_METRICS_TAG_UNDERLINE_OFFSET
 * 
 * class StyleTag(IntEnum):             # <<<<<<<<<<<<<<
 *     ITALIC = HB_STYLE_TAG_ITALIC
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_StyleTag, __pyx_mstate_global->__pyx_n_u_StyleTag, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_9 != __pyx_t_7) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_7) < 0))) __PYX_ERR(3, 132, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":133
 * 
 * class StyleTag(IntEnum):
 *     ITALIC = HB_STYLE_TAG_ITALIC             # <<<<<<<<<<<<<<
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE
 *     SLANT_ANGLE = HB_STYLE_TAG_SLANT_ANGLE
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_ITALIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 133, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ITALIC, __pyx_t_7) < (0)) __PYX_ERR(3, 133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":134
 * class StyleTag(IntEnum):
 *     ITALIC = HB_STYLE_TAG_ITALIC
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE             # <<<<<<<<<<<<<<
 *     SLANT_ANGLE = HB_STYLE_TAG_SLANT_ANGLE
 *     SLANT_RATIO = HB_STYLE_TAG_SLANT_RATIO
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_OPTICAL_SIZE); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_OPTICAL_SIZE, __pyx_t_7) < (0)) __PYX_ERR(3, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":135
 *     ITALIC = HB_STYLE_TAG_ITALIC
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE
 *     SLANT_ANGLE = HB_STYLE_TAG_SLANT_ANGLE             # <<<<<<<<<<<<<<
 *     SLANT_RATIO = HB_STYLE_TAG_SLANT_RATIO
 *     WIDTH = HB_STYLE_TAG_WIDTH
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_SLANT_ANGLE); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 135, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SLANT_ANGLE, __pyx_t_7) < (0)) __PYX_ERR(3, 135, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":136
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE
 *     SLANT_ANGLE = HB_STYLE_TAG_SLANT_ANGLE
 *     SLANT_RATIO = HB_STYLE_TAG_SLANT_RATIO             # <<<<<<<<<<<<<<
 *     WIDTH = HB_STYLE_TAG_WIDTH
 *     WEIGHT = HB_STYLE_TAG_WEIGHT
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_SLANT_RATIO); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 136, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_SLANT_RATIO, __pyx_t_7) < (0)) __PYX_ERR(3, 136, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":137
 *     SLANT_ANGLE = HB_STYLE_TAG_SLANT_ANGLE
 *     SLANT_RATIO = HB_STYLE_TAG_SLANT_RATIO
 *     WIDTH = HB_STYLE_TAG_WIDTH             # <<<<<<<<<<<<<<
 *     WEIGHT = HB_STYLE_TAG_WEIGHT
 * 
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_WIDTH); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 137, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WIDTH, __pyx_t_7) < (0)) __PYX_ERR(3, 137, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":138
 *     SLANT_RATIO = HB_STYLE_TAG_SLANT_RATIO
 *     WIDTH = HB_STYLE_TAG_WIDTH
 *     WEIGHT = HB_STYLE_TAG_WEIGHT             # <<<<<<<<<<<<<<
 * 
 * cdef class Font:
*/
  __pyx_t_7 = __Pyx_PyLong_From_hb_style_tag_t(HB_STYLE_TAG_WEIGHT); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_WEIGHT, __pyx_t_7) < (0)) __PYX_ERR(3, 138, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_font.pxi":132
 *     UNDERLINE_OFFSET = HB_OT_METRICS_TAG_UNDERLINE_OFFSET
 * 
 * class StyleTag(IntEnum):             # <<<<<<<<<<<<<<
 *     ITALIC = HB_STYLE_TAG_ITALIC
 *     OPTICAL_SIZE = HB_STYLE_TAG_OPTICAL_SIZE
*/
  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_StyleTag, __pyx_t_9, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_StyleTag, __pyx_t_7) < (0)) __PYX_ERR(3, 132, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":178
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, face: Face) -> Font:
 *         cdef Font inst = cls(face)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(3, 178, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(3, 178, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_5create, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_create, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[114])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_5) < (0)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetNameInClass(__pyx_t_5, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_create); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_Method_ClassMethod(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_9) < (0)) __PYX_ERR(3, 178, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":267
 *         hb_font_set_var_named_instance(self._hb_font, value)
 * 
 *     def set_variations(self, variations: Dict[str, float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int size
 *         cdef hb_variation_t* hb_variations
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_variations, __pyx_mstate_global->__pyx_kp_u_Dict_str_float) < (0)) __PYX_ERR(3, 267, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_7set_variations, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_set_variations, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[115])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_set_variations, __pyx_t_5) < (0)) __PYX_ERR(3, 267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":287
 *             free(hb_variations)
 * 
 *     def set_variation(self, name: str, value: float):             # <<<<<<<<<<<<<<
 *         packed = name.encode()
 *         cdef hb_tag_t tag = hb_tag_from_string(packed, -1)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 287, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_value, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(3, 287, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_9set_variation, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_set_variation, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[116])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_set_variation, __pyx_t_9) < (0)) __PYX_ERR(3, 287, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":292
 *         hb_font_set_variation(self._hb_font, tag, value)
 * 
 *     def get_glyph_name(self, gid: int) -> str | None:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 292, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_str_None) < (0)) __PYX_ERR(3, 292, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_11get_glyph_name, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_name, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[117])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_name, __pyx_t_5) < (0)) __PYX_ERR(3, 292, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":302
 *             return None
 * 
 *     def get_glyph_from_name(self, name: str) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_name_2, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 302, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(3, 302, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_13get_glyph_from_name, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_from_name, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[118])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_from_name, __pyx_t_9) < (0)) __PYX_ERR(3, 302, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":309
 *         return gid if success else None
 * 
 *     def get_glyph_extents(self, gid: int) -> GlyphExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t extents
 *         success = hb_font_get_glyph_extents(self._hb_font, gid, &extents)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 309, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_GlyphExtents) < (0)) __PYX_ERR(3, 309, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_15get_glyph_extents, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_extents, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[119])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_extents, __pyx_t_5) < (0)) __PYX_ERR(3, 309, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":322
 *             return None
 * 
 *     def get_glyph_h_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 322, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 322, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_17get_glyph_h_advance, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_h_advance, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[120])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_h_advance, __pyx_t_9) < (0)) __PYX_ERR(3, 322, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":325
 *         return hb_font_get_glyph_h_advance(self._hb_font, gid)
 * 
 *     def get_glyph_v_advance(self, gid: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 325, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 325, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_19get_glyph_v_advance, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_v_advance, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[121])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_v_advance, __pyx_t_5) < (0)) __PYX_ERR(3, 325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":328
 *         return hb_font_get_glyph_v_advance(self._hb_font, gid)
 * 
 *     def get_glyph_h_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_h_origin(self._hb_font, gid, &x, &y)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 328, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Tuple_int_int_None) < (0)) __PYX_ERR(3, 328, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_21get_glyph_h_origin, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_h_origin, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[122])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_h_origin, __pyx_t_9) < (0)) __PYX_ERR(3, 328, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":333
 *         return (x, y) if success else None
 * 
 *     def get_glyph_v_origin(self, gid: int) -> Tuple[int, int] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t x, y
 *         success = hb_font_get_glyph_v_origin(self._hb_font, gid, &x, &y)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 333, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Tuple_int_int_None) < (0)) __PYX_ERR(3, 333, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_23get_glyph_v_origin, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_v_origin, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[123])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_v_origin, __pyx_t_5) < (0)) __PYX_ERR(3, 333, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":338
 *         return (x, y) if success else None
 * 
 *     def get_font_extents(self, direction: str) -> FontExtents:             # <<<<<<<<<<<<<<
 *         cdef hb_font_extents_t extents
 *         cdef hb_direction_t hb_direction
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 338, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_FontExtents) < (0)) __PYX_ERR(3, 338, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_25get_font_extents, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_font_extents, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[124])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_font_extents, __pyx_t_9) < (0)) __PYX_ERR(3, 338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":353
 *         )
 * 
 *     def get_variation_glyph(self, unicode: int, variation_selector: int) -> int | None:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_variation_glyph(self._hb_font, unicode, variation_selector, &gid)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_unicode, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 353, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_variation_selector, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 353, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(3, 353, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_27get_variation_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_variation_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[125])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 353, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_variation_glyph, __pyx_t_5) < (0)) __PYX_ERR(3, 353, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":358
 *         return gid if success else None
 * 
 *     def get_nominal_glyph(self, unicode: int) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         success = hb_font_get_nominal_glyph(self._hb_font, unicode, &gid)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_unicode, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 358, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 358, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_29get_nominal_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_nominal_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[126])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 358, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_nominal_glyph, __pyx_t_9) < (0)) __PYX_ERR(3, 358, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":363
 *         return gid if success else None
 * 
 *     def get_var_coords_normalized(self) -> List[float]:             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const int *coords
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_float) < (0)) __PYX_ERR(3, 363, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_31get_var_coords_normalized, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_var_coords_normalized, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[127])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 363, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_var_coords_normalized, __pyx_t_5) < (0)) __PYX_ERR(3, 363, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":370
 *         return [coords[i] / 0x4000 for i in range(length)]
 * 
 *     def set_var_coords_normalized(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef int *coords_2dot14
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_coords, __pyx_mstate_global->__pyx_kp_u_List_float) < (0)) __PYX_ERR(3, 370, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_33set_var_coords_normalized, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_set_var_coords_normalized, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[128])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 370, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_set_var_coords_normalized, __pyx_t_9) < (0)) __PYX_ERR(3, 370, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":385
 *             free(coords_2dot14)
 * 
 *     def get_var_coords_design(self):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef const float *coords
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_35get_var_coords_design, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_var_coords_design, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[129])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_var_coords_design, __pyx_t_9) < (0)) __PYX_ERR(3, 385, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":391
 *         return [coords[i] for i in range(length)]
 * 
 *     def set_var_coords_design(self, coords: List[float]):             # <<<<<<<<<<<<<<
 *         cdef unsigned int length
 *         cdef cython.float *c_coords
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_coords, __pyx_mstate_global->__pyx_kp_u_List_float) < (0)) __PYX_ERR(3, 391, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_37set_var_coords_design, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_set_var_coords_design, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[130])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_set_var_coords_design, __pyx_t_5) < (0)) __PYX_ERR(3, 391, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":405
 *             free(c_coords)
 * 
 *     def glyph_to_string(self, gid: int) -> str:             # <<<<<<<<<<<<<<
 *         cdef char name[64]
 *         cdef bytes packed
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 405, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 405, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_39glyph_to_string, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_glyph_to_string, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[131])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_glyph_to_string, __pyx_t_9) < (0)) __PYX_ERR(3, 405, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":412
 *         return packed.decode()
 * 
 *     def glyph_from_string(self, string: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_codepoint_t gid
 *         cdef bytes packed
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_string, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 412, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 412, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_41glyph_from_string, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_glyph_from_string, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[132])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_glyph_from_string, __pyx_t_5) < (0)) __PYX_ERR(3, 412, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":419
 *         return gid if success else None
 * 
 *     def draw_glyph(self, gid: int, draw_funcs: DrawFuncs, draw_state: object = None):             # <<<<<<<<<<<<<<
 *         cdef void *draw_state_p = <void *>draw_state
 *         if PyCapsule_IsValid(draw_state, NULL):
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 419, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_draw_funcs, __pyx_mstate_global->__pyx_n_u_DrawFuncs) < (0)) __PYX_ERR(3, 419, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_draw_state, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 419, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_43draw_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_draw_glyph_2, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[133])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_t_9) < (0)) __PYX_ERR(3, 419, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":425
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
 *     def paint_glyph(self, gid: int,             # <<<<<<<<<<<<<<
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_paint_funcs, __pyx_mstate_global->__pyx_n_u_PaintFuncs) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_paint_state, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_palette_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_foreground, __pyx_mstate_global->__pyx_kp_u_Color_None) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_45paint_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_paint_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[134])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_paint_glyph, __pyx_t_5) < (0)) __PYX_ERR(3, 425, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":441
 *                             c_foreground)
 * 
 *     def draw_glyph_with_pen(self, gid: int, pen):             # <<<<<<<<<<<<<<
 *         global drawfuncs
 *         if drawfuncs == NULL:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gid, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 441, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_47draw_glyph_with_pen, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_draw_glyph_with_pen, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[135])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_draw_glyph_with_pen, __pyx_t_9) < (0)) __PYX_ERR(3, 441, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":468
 * 
 *     # math
 *     def get_math_constant(self, constant: OTMathConstant) -> int:             # <<<<<<<<<<<<<<
 *         if constant >= len(OTMathConstant):
 *             raise ValueError("invalid constant")
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_constant, __pyx_mstate_global->__pyx_n_u_OTMathConstant) < (0)) __PYX_ERR(3, 468, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 468, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_49get_math_constant, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_constant, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[136])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_constant, __pyx_t_5) < (0)) __PYX_ERR(3, 468, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":473
 *         return hb_ot_math_get_constant(self._hb_font, constant)
 * 
 *     def get_math_glyph_italics_correction(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 473, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 473, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_51get_math_glyph_italics_correction, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_italics_corr, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[137])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_italics_correctio, __pyx_t_9) < (0)) __PYX_ERR(3, 473, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":476
 *         return hb_ot_math_get_glyph_italics_correction(self._hb_font, glyph)
 * 
 *     def get_math_glyph_top_accent_attachment(self, glyph: int) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 476, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 476, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_53get_math_glyph_top_accent_attachment, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_top_accent_a, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[138])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_top_accent_attach, __pyx_t_5) < (0)) __PYX_ERR(3, 476, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":479
 *         return hb_ot_math_get_glyph_top_accent_attachment(self._hb_font, glyph)
 * 
 *     def get_math_min_connector_overlap(self, direction: str) -> int:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 479, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 479, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_55get_math_min_connector_overlap, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_min_connector_over, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[139])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_min_connector_overlap, __pyx_t_9) < (0)) __PYX_ERR(3, 479, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":485
 *         return hb_ot_math_get_min_connector_overlap(self._hb_font, hb_direction)
 * 
 *     def get_math_glyph_kerning(self, glyph: int, kern: OTMathKern, correction_height: int) -> int:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 485, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_kern, __pyx_mstate_global->__pyx_n_u_OTMathKern) < (0)) __PYX_ERR(3, 485, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_correction_height, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 485, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 485, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_57get_math_glyph_kerning, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_kerning, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[140])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 485, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_kerning, __pyx_t_5) < (0)) __PYX_ERR(3, 485, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":490
 *         return hb_ot_math_get_glyph_kerning(self._hb_font, glyph, kern, correction_height)
 * 
 *     def get_math_glyph_kernings(self, glyph: int, kern: OTMathKern) -> List[OTMathKernEntry]:             # <<<<<<<<<<<<<<
 *         if kern >= len(OTMathKern):
 *             raise ValueError("invalid kern")
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 490, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_kern, __pyx_mstate_global->__pyx_n_u_OTMathKern) < (0)) __PYX_ERR(3, 490, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTMathKernEntry) < (0)) __PYX_ERR(3, 490, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_59get_math_glyph_kernings, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_kernings, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[141])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_kernings, __pyx_t_9) < (0)) __PYX_ERR(3, 490, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":506
 *         return kerns
 * 
 *     def get_math_glyph_variants(self, glyph: int, direction: str) -> List[OTMathGlyphVariant]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 506, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 506, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTMathGlyphVariant) < (0)) __PYX_ERR(3, 506, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_61get_math_glyph_variants, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_variants, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[142])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_variants, __pyx_t_5) < (0)) __PYX_ERR(3, 506, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":523
 *         return variants
 * 
 *     def get_math_glyph_assembly(self, glyph: int, direction: str) -> Tuple[List[OTMathGlyphPart], int]:             # <<<<<<<<<<<<<<
 *         cdef bytes packed = direction.encode()
 *         cdef char* cstr = packed
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 523, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 523, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 523, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Tuple_List_OTMathGlyphPart_int) < (0)) __PYX_ERR(3, 523, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_63get_math_glyph_assembly, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_math_glyph_assembly, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[143])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 523, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_math_glyph_assembly, __pyx_t_9) < (0)) __PYX_ERR(3, 523, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":546
 * 
 *     # metrics
 *     def get_metric_position(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         if hb_ot_metrics_get_position(self._hb_font, tag, &position):
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag) < (0)) __PYX_ERR(3, 546, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 546, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_65get_metric_position, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_metric_position, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[144])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_metric_position, __pyx_t_5) < (0)) __PYX_ERR(3, 546, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":552
 *         return None
 * 
 *     def get_metric_position_with_fallback(font, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         cdef hb_position_t position
 *         hb_ot_metrics_get_position_with_fallback(font._hb_font, tag, &position)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag) < (0)) __PYX_ERR(3, 552, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 552, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_67get_metric_position_with_fallback, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_metric_position_with_fa, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[145])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_metric_position_with_fallbac, __pyx_t_9) < (0)) __PYX_ERR(3, 552, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":557
 *         return position
 * 
 *     def get_metric_variation(self, tag: OTMetricsTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag) < (0)) __PYX_ERR(3, 557, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(3, 557, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_69get_metric_variation, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_metric_variation, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[146])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 557, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_metric_variation, __pyx_t_5) < (0)) __PYX_ERR(3, 557, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":560
 *         return hb_ot_metrics_get_variation(self._hb_font, tag)
 * 
 *     def get_metric_x_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag) < (0)) __PYX_ERR(3, 560, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 560, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_71get_metric_x_variation, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_metric_x_variation, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[147])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_metric_x_variation, __pyx_t_9) < (0)) __PYX_ERR(3, 560, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":563
 *         return hb_ot_metrics_get_x_variation(self._hb_font, tag)
 * 
 *     def get_metric_y_variation(self, tag: OTMetricsTag) -> int:             # <<<<<<<<<<<<<<
 *         return hb_ot_metrics_get_y_variation(self._hb_font, tag)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_OTMetricsTag) < (0)) __PYX_ERR(3, 563, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 563, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_73get_metric_y_variation, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_metric_y_variation, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[148])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_metric_y_variation, __pyx_t_5) < (0)) __PYX_ERR(3, 563, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":567
 * 
 *     # color
 *     def get_glyph_color_png(self, glyph: int) -> Blob:             # <<<<<<<<<<<<<<
 *         cdef hb_blob_t* blob
 *         blob = hb_ot_color_glyph_reference_png(self._hb_font, glyph)
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 567, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(3, 567, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_75get_glyph_color_png, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_glyph_color_png, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[149])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_glyph_color_png, __pyx_t_9) < (0)) __PYX_ERR(3, 567, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":573
 * 
 *     #layout
 *     def get_layout_baseline(self,             # <<<<<<<<<<<<<<
 *                            baseline_tag: str,
 *                            direction: str,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_baseline_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_script_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_language_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_77get_layout_baseline, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_layout_baseline, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[150])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 573, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_layout_baseline, __pyx_t_5) < (0)) __PYX_ERR(3, 573, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":620
 * 
 *     # style
 *     def get_style_value(self, tag: StyleTag) -> float:             # <<<<<<<<<<<<<<
 *         return hb_style_get_value(self._hb_font, tag)
 * 
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_StyleTag) < (0)) __PYX_ERR(3, 620, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(3, 620, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_79get_style_value, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font_get_style_value, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[151])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 620, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_Font, __pyx_mstate_global->__pyx_n_u_get_style_value, __pyx_t_9) < (0)) __PYX_ERR(3, 620, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_81__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[152])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_4Font_83__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Font___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[153])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":630
 *     void *closePath
 * 
 * cdef hb_draw_funcs_t* drawfuncs = NULL             # <<<<<<<<<<<<<<
 * 
 * cdef void _pen_move_to_func(hb_draw_funcs_t *dfuncs,
*/
  __pyx_v_9uharfbuzz_9_harfbuzz_drawfuncs = NULL;

  /* "src/uharfbuzz/_font.pxi":793
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls) -> FontFuncs:
 *         cdef FontFuncs inst = cls()
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_FontFuncs) < (0)) __PYX_ERR(3, 793, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_5create, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_create, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[154])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_5) < (0)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetNameInClass(__pyx_t_5, (PyObject*)__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_create); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_Method_ClassMethod(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_create, __pyx_t_9) < (0)) __PYX_ERR(3, 793, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":798
 *         return inst
 * 
 *     def set_glyph_h_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_object_int) < (0)) __PYX_ERR(3, 798, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 798, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_7set_glyph_h_advance_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_glyph_h_advance_fu, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[155])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 798, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_glyph_h_advance_func, __pyx_t_5) < (0)) __PYX_ERR(3, 798, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":809
 *         self._glyph_h_advance_func = func
 * 
 *     def set_glyph_v_advance_func(self,             # <<<<<<<<<<<<<<
 *                                  func: Callable[[
 *                                      Font,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_object_int) < (0)) __PYX_ERR(3, 809, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 809, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_9set_glyph_v_advance_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_glyph_v_advance_fu, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[156])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 809, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_glyph_v_advance_func, __pyx_t_9) < (0)) __PYX_ERR(3, 809, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":820
 *         self._glyph_v_advance_func = func
 * 
 *     def set_glyph_v_origin_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 820, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_object_int_int) < (0)) __PYX_ERR(3, 820, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 820, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_11set_glyph_v_origin_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_glyph_v_origin_fun, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[157])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 820, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_glyph_v_origin_func, __pyx_t_5) < (0)) __PYX_ERR(3, 820, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":831
 *         self._glyph_v_origin_func = func
 * 
 *     def set_glyph_name_func(self,             # <<<<<<<<<<<<<<
 *                             func: Callable[[
 *                                 Font,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_object_str) < (0)) __PYX_ERR(3, 831, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 831, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_13set_glyph_name_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_glyph_name_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[158])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 831, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_glyph_name_func, __pyx_t_9) < (0)) __PYX_ERR(3, 831, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":842
 *         self._glyph_name_func = func
 * 
 *     def set_nominal_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_object_int) < (0)) __PYX_ERR(3, 842, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 842, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_15set_nominal_glyph_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_nominal_glyph_func, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[159])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 842, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_nominal_glyph_func, __pyx_t_5) < (0)) __PYX_ERR(3, 842, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":853
 *         self._nominal_glyph_func = func
 * 
 *     def set_variation_glyph_func(self,             # <<<<<<<<<<<<<<
 *                                func: Callable[[
 *                                    Font,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_int_int_object_int) < (0)) __PYX_ERR(3, 853, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 853, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_17set_variation_glyph_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_variation_glyph_fu, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[160])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 853, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_variation_glyph_func, __pyx_t_9) < (0)) __PYX_ERR(3, 853, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_font.pxi":865
 *         self._variation_glyph_func = func
 * 
 *     def set_font_h_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_object_FontExtents) < (0)) __PYX_ERR(3, 865, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 865, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_19set_font_h_extents_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_font_h_extents_fun, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[161])); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 865, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_5, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_font_h_extents_func, __pyx_t_5) < (0)) __PYX_ERR(3, 865, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_font.pxi":875
 *         self._font_h_extents_func = func
 * 
 *     def set_font_v_extents_func(self,             # <<<<<<<<<<<<<<
 *                                 func: Callable[[
 *                                     Font,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(3, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_func, __pyx_mstate_global->__pyx_kp_u_Callable_Font_object_FontExtents) < (0)) __PYX_ERR(3, 875, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_user_data, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(3, 875, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_21set_font_v_extents_func, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs_set_font_v_extents_fun, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[162])); if (unlikely(!__pyx_t_9)) __PYX_ERR(3, 875, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_FontFuncs, __pyx_mstate_global->__pyx_n_u_set_font_v_extents_func, __pyx_t_9) < (0)) __PYX_ERR(3, 875, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_23__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[163])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9FontFuncs_25__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_FontFuncs___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[164])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":1
 * class RasterFormat(IntEnum):             # <<<<<<<<<<<<<<
 *     A8 = HB_RASTER_FORMAT_A8
 *     BGRA32 = HB_RASTER_FORMAT_BGRA32
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_RasterFormat, __pyx_mstate_global->__pyx_n_u_RasterFormat, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (__pyx_t_9 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_7, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(10, 1, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_raster.pxi":2
 * class RasterFormat(IntEnum):
 *     A8 = HB_RASTER_FORMAT_A8             # <<<<<<<<<<<<<<
 *     BGRA32 = HB_RASTER_FORMAT_BGRA32
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_raster_format_t(HB_RASTER_FORMAT_A8); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 2, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_A8, __pyx_t_5) < (0)) __PYX_ERR(10, 2, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_raster.pxi":3
 * class RasterFormat(IntEnum):
 *     A8 = HB_RASTER_FORMAT_A8
 *     BGRA32 = HB_RASTER_FORMAT_BGRA32             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_raster_format_t(HB_RASTER_FORMAT_BGRA32); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_BGRA32, __pyx_t_5) < (0)) __PYX_ERR(10, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_raster.pxi":1
 * class RasterFormat(IntEnum):             # <<<<<<<<<<<<<<
 *     A8 = HB_RASTER_FORMAT_A8
 *     BGRA32 = HB_RASTER_FORMAT_BGRA32
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_RasterFormat, __pyx_t_9, __pyx_t_7, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RasterFormat, __pyx_t_5) < (0)) __PYX_ERR(10, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":6
 * 
 * 
 * class RasterExtents(NamedTuple):             # <<<<<<<<<<<<<<
 *     x_origin: int = 0
 *     y_origin: int = 0
*/
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NamedTuple); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyTuple_Pack(1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PEP560_update_bases(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_9, __pyx_mstate_global->__pyx_n_u_RasterExtents, __pyx_mstate_global->__pyx_n_u_RasterExtents, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__pyx_t_9 != __pyx_t_2) {
    if (unlikely((PyDict_SetItemString(__pyx_t_5, "__orig_bases__", __pyx_t_2) < 0))) __PYX_ERR(10, 6, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_x_origin, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_y_origin, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_width, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_height, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_stride, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_annotations, __pyx_t_2) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "src/uharfbuzz/_raster.pxi":7
 * 
 * class RasterExtents(NamedTuple):
 *     x_origin: int = 0             # <<<<<<<<<<<<<<
 *     y_origin: int = 0
 *     width: int = 0
*/
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_x_origin, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(10, 7, __pyx_L1_error)

  /* "src/uharfbuzz/_raster.pxi":8
 * class RasterExtents(NamedTuple):
 *     x_origin: int = 0
 *     y_origin: int = 0             # <<<<<<<<<<<<<<
 *     width: int = 0
 *     height: int = 0
*/
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_y_origin, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(10, 8, __pyx_L1_error)

  /* "src/uharfbuzz/_raster.pxi":9
 *     x_origin: int = 0
 *     y_origin: int = 0
 *     width: int = 0             # <<<<<<<<<<<<<<
 *     height: int = 0
 *     stride: int = 0
*/
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_width, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(10, 9, __pyx_L1_error)

  /* "src/uharfbuzz/_raster.pxi":10
 *     y_origin: int = 0
 *     width: int = 0
 *     height: int = 0             # <<<<<<<<<<<<<<
 *     stride: int = 0
 * 
*/
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_height, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(10, 10, __pyx_L1_error)

  /* "src/uharfbuzz/_raster.pxi":11
 *     width: int = 0
 *     height: int = 0
 *     stride: int = 0             # <<<<<<<<<<<<<<
 * 
 * 
*/
  if (__Pyx_SetNameInClass(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_stride, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(10, 11, __pyx_L1_error)

  /* "src/uharfbuzz/_raster.pxi":6
 * 
 * 
 * class RasterExtents(NamedTuple):             # <<<<<<<<<<<<<<
 *     x_origin: int = 0
 *     y_origin: int = 0
*/
  __pyx_t_2 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_RasterExtents, __pyx_t_9, __pyx_t_5, NULL, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_2);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RasterExtents, __pyx_t_2) < (0)) __PYX_ERR(10, 6, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":35
 *         return wrapper
 * 
 *     def configure(self, format: RasterFormat,             # <<<<<<<<<<<<<<
 *                   extents: RasterExtents | None = None) -> bool:
 *         cdef hb_raster_extents_t c_extents
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_format, __pyx_mstate_global->__pyx_n_u_RasterFormat) < (0)) __PYX_ERR(10, 35, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_extents, __pyx_mstate_global->__pyx_kp_u_RasterExtents_None) < (0)) __PYX_ERR(10, 35, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 35, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_7configure, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterImage_configure, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[165])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 35, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage, __pyx_mstate_global->__pyx_n_u_configure, __pyx_t_7) < (0)) __PYX_ERR(10, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":48
 *         return hb_raster_image_configure(self._hb_raster_image, format, c_extents_ptr)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_image_clear(self._hb_raster_image)
 * 
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_9clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterImage_clear, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[166])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterImage, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_7) < (0)) __PYX_ERR(10, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_11__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterImage___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[167])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterImage_13__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterImage___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[168])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":134
 *         hb_raster_draw_set_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_extents, __pyx_mstate_global->__pyx_n_u_GlyphExtents) < (0)) __PYX_ERR(10, 134, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 134, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_5set_glyph_extents, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_set_glyph_extents, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[169])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_set_glyph_extents, __pyx_t_9) < (0)) __PYX_ERR(10, 134, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":142
 *         return hb_raster_draw_set_glyph_extents(self._hb_raster_draw, &c_extents)
 * 
 *     def draw_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(10, 142, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 142, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_7draw_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_draw_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[170])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 142, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_draw_glyph, __pyx_t_7) < (0)) __PYX_ERR(10, 142, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":145
 *         hb_raster_draw_glyph(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def draw_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(10, 145, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 145, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 145, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_9draw_glyph_or_fail, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_draw_glyph_or_fail, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[171])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_draw_glyph_or_fail, __pyx_t_9) < (0)) __PYX_ERR(10, 145, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":148
 *         return hb_raster_draw_glyph_or_fail(self._hb_raster_draw, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_draw_render(self._hb_raster_draw)
 *         if img is NULL:
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_RasterImage_None) < (0)) __PYX_ERR(10, 148, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_11render, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_render, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[172])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 148, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_render, __pyx_t_7) < (0)) __PYX_ERR(10, 148, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":154
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_13clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_clear, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[173])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_7) < (0)) __PYX_ERR(10, 154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":157
 *         hb_raster_draw_clear(self._hb_raster_draw)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_draw_reset(self._hb_raster_draw)
 * 
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_15reset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw_reset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[174])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 157, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterDraw, __pyx_mstate_global->__pyx_n_u_reset, __pyx_t_7) < (0)) __PYX_ERR(10, 157, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_17__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[175])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10RasterDraw_19__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterDraw___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[176])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":217
 *         hb_raster_paint_set_extents(self._hb_raster_paint, &c_extents)
 * 
 *     def set_glyph_extents(self, extents: GlyphExtents) -> bool:             # <<<<<<<<<<<<<<
 *         cdef hb_glyph_extents_t c_extents
 *         c_extents.x_bearing = extents.x_bearing
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_extents, __pyx_mstate_global->__pyx_n_u_GlyphExtents) < (0)) __PYX_ERR(10, 217, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 217, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_5set_glyph_extents, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_set_glyph_extents, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[177])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_set_glyph_extents, __pyx_t_9) < (0)) __PYX_ERR(10, 217, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":249
 *         hb_raster_paint_set_palette(self._hb_raster_paint, value)
 * 
 *     def set_custom_palette_color(self, color_index: int, color: Color) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_set_custom_palette_color(
 *             self._hb_raster_paint, color_index, color.to_int())
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_color_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 249, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_color, __pyx_mstate_global->__pyx_n_u_Color) < (0)) __PYX_ERR(10, 249, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 249, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_7set_custom_palette_color, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_set_custom_palette_c, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[178])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_set_custom_palette_color, __pyx_t_7) < (0)) __PYX_ERR(10, 249, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":253
 *             self._hb_raster_paint, color_index, color.to_int())
 * 
 *     def clear_custom_palette_colors(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_9clear_custom_palette_colors, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_clear_custom_palette, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[179])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_clear_custom_palette_colors, __pyx_t_7) < (0)) __PYX_ERR(10, 253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":256
 *         hb_raster_paint_clear_custom_palette_colors(self._hb_raster_paint)
 * 
 *     def paint_glyph(self, font: Font, glyph: int):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(10, 256, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 256, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_11paint_glyph, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_paint_glyph, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[180])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_paint_glyph, __pyx_t_9) < (0)) __PYX_ERR(10, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":259
 *         hb_raster_paint_glyph(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def paint_glyph_or_fail(self, font: Font, glyph: int) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(10, 259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(10, 259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(10, 259, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_13paint_glyph_or_fail, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_paint_glyph_or_fail, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[181])); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_paint_glyph_or_fail, __pyx_t_7) < (0)) __PYX_ERR(10, 259, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_raster.pxi":262
 *         return hb_raster_paint_glyph_or_fail(self._hb_raster_paint, font._hb_font, glyph)
 * 
 *     def render(self) -> RasterImage | None:             # <<<<<<<<<<<<<<
 *         cdef hb_raster_image_t* img = hb_raster_paint_render(self._hb_raster_paint)
 *         if img is NULL:
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(10, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_RasterImage_None) < (0)) __PYX_ERR(10, 262, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_15render, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_render, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[182])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_render, __pyx_t_9) < (0)) __PYX_ERR(10, 262, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":268
 *         return RasterImage.from_ptr(img)
 * 
 *     def clear(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_17clear, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_clear, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[183])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_clear, __pyx_t_9) < (0)) __PYX_ERR(10, 268, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_raster.pxi":271
 *         hb_raster_paint_clear(self._hb_raster_paint)
 * 
 *     def reset(self):             # <<<<<<<<<<<<<<
 *         hb_raster_paint_reset(self._hb_raster_paint)
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_19reset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint_reset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[184])); if (unlikely(!__pyx_t_9)) __PYX_ERR(10, 271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_RasterPaint, __pyx_mstate_global->__pyx_n_u_reset, __pyx_t_9) < (0)) __PYX_ERR(10, 271, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_21__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[185])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11RasterPaint_23__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_RasterPaint___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[186])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_8HBObject_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_HBObject___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[187])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_8HBObject_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_HBObject___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[188])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_serialize.pxi":59
 *             l[i].objidx = links[i][2]
 * 
 * class SerializerError(Exception):             # <<<<<<<<<<<<<<
 *     pass
 * 
*/
  __pyx_t_9 = PyTuple_Pack(1, ((PyObject *)(((PyTypeObject*)PyExc_Exception)))); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_7 = __Pyx_PEP560_update_bases(__pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_7, __pyx_mstate_global->__pyx_n_u_SerializerError, __pyx_mstate_global->__pyx_n_u_SerializerError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (__pyx_t_7 != __pyx_t_9) {
    if (unlikely((PyDict_SetItemString(__pyx_t_2, "__orig_bases__", __pyx_t_9) < 0))) __PYX_ERR(11, 59, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SerializerError, __pyx_t_7, __pyx_t_2, NULL, 0, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SerializerError, __pyx_t_9) < (0)) __PYX_ERR(11, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_serialize.pxi":62
 *     pass
 * 
 * class RepackerError(SerializerError):             # <<<<<<<<<<<<<<
 *     pass
 * 
*/
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_SerializerError); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_7, __pyx_mstate_global->__pyx_n_u_RepackerError, __pyx_mstate_global->__pyx_n_u_RepackerError, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__pyx_t_7 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_9, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(11, 62, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_RepackerError, __pyx_t_7, __pyx_t_9, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_RepackerError, __pyx_t_5) < (0)) __PYX_ERR(11, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_serialize.pxi":66
 * 
 * 
 * @deprecated("serialize()")             # <<<<<<<<<<<<<<
 * def repack(subtables, graphnodes):
 *     return serialize(subtables, graphnodes)
*/
  __pyx_t_2 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_serialize_2};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_5repack, 0, __pyx_mstate_global->__pyx_n_u_repack, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[189])); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_9, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 66, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_repack, __pyx_t_7) < (0)) __PYX_ERR(11, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_serialize.pxi":71
 * 
 * 
 * @deprecated("serialize_with_tag()")             # <<<<<<<<<<<<<<
 * def repack_with_tag(tag, subtables, graphnodes):
 *     return serialize_with_tag(tag, subtables, graphnodes)
*/
  __pyx_t_9 = NULL;
  __pyx_t_2 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_mstate_global->__pyx_kp_u_serialize_with_tag_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_7repack_with_tag, 0, __pyx_mstate_global->__pyx_n_u_repack_with_tag, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[190])); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 71, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_repack_with_tag, __pyx_t_7) < (0)) __PYX_ERR(11, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_serialize.pxi":76
 * 
 * 
 * def serialize(subtables: List[bytes],             # <<<<<<<<<<<<<<
 *               graphnodes: List[Tuple[List[Tuple[int, int, int]],
 *                                      List[Tuple[int, int, int]]
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_subtables, __pyx_mstate_global->__pyx_kp_u_List_bytes) < (0)) __PYX_ERR(11, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_graphnodes, __pyx_mstate_global->__pyx_kp_u_List_Tuple_List_Tuple_int_int_in) < (0)) __PYX_ERR(11, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(11, 76, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_9serialize, 0, __pyx_mstate_global->__pyx_n_u_serialize, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[191])); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_serialize, __pyx_t_4) < (0)) __PYX_ERR(11, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_serialize.pxi":83
 * 
 * 
 * def serialize_with_tag(tag: str,             # <<<<<<<<<<<<<<
 *                        subtables: List[bytes],
 *                        graphnodes: List[Tuple[List[Tuple[int, int, int]],
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(11, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_subtables, __pyx_mstate_global->__pyx_kp_u_List_bytes) < (0)) __PYX_ERR(11, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_graphnodes, __pyx_mstate_global->__pyx_kp_u_List_Tuple_List_Tuple_int_int_in) < (0)) __PYX_ERR(11, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bytes) < (0)) __PYX_ERR(11, 83, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11serialize_with_tag, 0, __pyx_mstate_global->__pyx_n_u_serialize_with_tag, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[192])); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_serialize_with_tag, __pyx_t_7) < (0)) __PYX_ERR(11, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":1
 * def subset_preprocess(face: Face) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_preprocess(face._hb_face)
 *     return Face.from_ptr(new_face)
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 1, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_13subset_preprocess, 0, __pyx_mstate_global->__pyx_n_u_subset_preprocess, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[193])); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_subset_preprocess, __pyx_t_4) < (0)) __PYX_ERR(12, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":5
 *     return Face.from_ptr(new_face)
 * 
 * def subset(face: Face, input: SubsetInput) -> Face:             # <<<<<<<<<<<<<<
 *     new_face = hb_subset_or_fail(face._hb_face, input._hb_input)
 *     if new_face == NULL:
*/
  __pyx_t_4 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_input, __pyx_mstate_global->__pyx_n_u_SubsetInput) < (0)) __PYX_ERR(12, 5, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 5, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_15subset, 0, __pyx_mstate_global->__pyx_n_u_subset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[194])); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_4);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_subset, __pyx_t_7) < (0)) __PYX_ERR(12, 5, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":11
 *     return Face.from_ptr(new_face)
 * 
 * class SubsetInputSets(IntEnum):             # <<<<<<<<<<<<<<
 *     GLYPH_INDEX = HB_SUBSET_SETS_GLYPH_INDEX
 *     UNICODE = HB_SUBSET_SETS_UNICODE
*/
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_IntEnum); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_4 = PyTuple_Pack(1, __pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PEP560_update_bases(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_Py3MetaclassPrepare(__pyx_t_5, __pyx_t_7, __pyx_mstate_global->__pyx_n_u_SubsetInputSets, __pyx_mstate_global->__pyx_n_u_SubsetInputSets, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (__pyx_t_7 != __pyx_t_4) {
    if (unlikely((PyDict_SetItemString(__pyx_t_9, "__orig_bases__", __pyx_t_4) < 0))) __PYX_ERR(12, 11, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":12
 * 
 * class SubsetInputSets(IntEnum):
 *     GLYPH_INDEX = HB_SUBSET_SETS_GLYPH_INDEX             # <<<<<<<<<<<<<<
 *     UNICODE = HB_SUBSET_SETS_UNICODE
 *     NO_SUBSET_TABLE_TAG = HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_GLYPH_INDEX); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_GLYPH_INDEX, __pyx_t_4) < (0)) __PYX_ERR(12, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":13
 * class SubsetInputSets(IntEnum):
 *     GLYPH_INDEX = HB_SUBSET_SETS_GLYPH_INDEX
 *     UNICODE = HB_SUBSET_SETS_UNICODE             # <<<<<<<<<<<<<<
 *     NO_SUBSET_TABLE_TAG = HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG
 *     DROP_TABLE_TAG = HB_SUBSET_SETS_DROP_TABLE_TAG
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_UNICODE); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 13, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_UNICODE, __pyx_t_4) < (0)) __PYX_ERR(12, 13, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":14
 *     GLYPH_INDEX = HB_SUBSET_SETS_GLYPH_INDEX
 *     UNICODE = HB_SUBSET_SETS_UNICODE
 *     NO_SUBSET_TABLE_TAG = HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG             # <<<<<<<<<<<<<<
 *     DROP_TABLE_TAG = HB_SUBSET_SETS_DROP_TABLE_TAG
 *     NAME_ID = HB_SUBSET_SETS_NAME_ID
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 14, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NO_SUBSET_TABLE_TAG, __pyx_t_4) < (0)) __PYX_ERR(12, 14, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":15
 *     UNICODE = HB_SUBSET_SETS_UNICODE
 *     NO_SUBSET_TABLE_TAG = HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG
 *     DROP_TABLE_TAG = HB_SUBSET_SETS_DROP_TABLE_TAG             # <<<<<<<<<<<<<<
 *     NAME_ID = HB_SUBSET_SETS_NAME_ID
 *     NAME_LANG_ID = HB_SUBSET_SETS_NAME_LANG_ID
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_DROP_TABLE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 15, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_DROP_TABLE_TAG, __pyx_t_4) < (0)) __PYX_ERR(12, 15, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":16
 *     NO_SUBSET_TABLE_TAG = HB_SUBSET_SETS_NO_SUBSET_TABLE_TAG
 *     DROP_TABLE_TAG = HB_SUBSET_SETS_DROP_TABLE_TAG
 *     NAME_ID = HB_SUBSET_SETS_NAME_ID             # <<<<<<<<<<<<<<
 *     NAME_LANG_ID = HB_SUBSET_SETS_NAME_LANG_ID
 *     LAYOUT_FEATURE_TAG = HB_SUBSET_SETS_LAYOUT_FEATURE_TAG
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_NAME_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NAME_ID, __pyx_t_4) < (0)) __PYX_ERR(12, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":17
 *     DROP_TABLE_TAG = HB_SUBSET_SETS_DROP_TABLE_TAG
 *     NAME_ID = HB_SUBSET_SETS_NAME_ID
 *     NAME_LANG_ID = HB_SUBSET_SETS_NAME_LANG_ID             # <<<<<<<<<<<<<<
 *     LAYOUT_FEATURE_TAG = HB_SUBSET_SETS_LAYOUT_FEATURE_TAG
 *     LAYOUT_SCRIPT_TAG = HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_NAME_LANG_ID); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_NAME_LANG_ID, __pyx_t_4) < (0)) __PYX_ERR(12, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":18
 *     NAME_ID = HB_SUBSET_SETS_NAME_ID
 *     NAME_LANG_ID = HB_SUBSET_SETS_NAME_LANG_ID
 *     LAYOUT_FEATURE_TAG = HB_SUBSET_SETS_LAYOUT_FEATURE_TAG             # <<<<<<<<<<<<<<
 *     LAYOUT_SCRIPT_TAG = HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_LAYOUT_FEATURE_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 18, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_LAYOUT_FEATURE_TAG, __pyx_t_4) < (0)) __PYX_ERR(12, 18, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":19
 *     NAME_LANG_ID = HB_SUBSET_SETS_NAME_LANG_ID
 *     LAYOUT_FEATURE_TAG = HB_SUBSET_SETS_LAYOUT_FEATURE_TAG
 *     LAYOUT_SCRIPT_TAG = HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_4 = __Pyx_PyLong_From_hb_subset_sets_t(HB_SUBSET_SETS_LAYOUT_SCRIPT_TAG); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 19, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__Pyx_SetNameInClass(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_LAYOUT_SCRIPT_TAG, __pyx_t_4) < (0)) __PYX_ERR(12, 19, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "src/uharfbuzz/_subset.pxi":11
 *     return Face.from_ptr(new_face)
 * 
 * class SubsetInputSets(IntEnum):             # <<<<<<<<<<<<<<
 *     GLYPH_INDEX = HB_SUBSET_SETS_GLYPH_INDEX
 *     UNICODE = HB_SUBSET_SETS_UNICODE
*/
  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_SubsetInputSets, __pyx_t_7, __pyx_t_9, NULL, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SubsetInputSets, __pyx_t_4) < (0)) __PYX_ERR(12, 11, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":22
 * 
 * 
 * class SubsetFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_SUBSET_FLAGS_DEFAULT
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING
*/
  __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_IntFlag); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_5 = PyTuple_Pack(1, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PEP560_update_bases(__pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_9 = __Pyx_CalculateMetaclass(NULL, __pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_4 = __Pyx_Py3MetaclassPrepare(__pyx_t_9, __pyx_t_7, __pyx_mstate_global->__pyx_n_u_SubsetFlags, __pyx_mstate_global->__pyx_n_u_SubsetFlags, (PyObject *) NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, (PyObject *) NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  if (__pyx_t_7 != __pyx_t_5) {
    if (unlikely((PyDict_SetItemString(__pyx_t_4, "__orig_bases__", __pyx_t_5) < 0))) __PYX_ERR(12, 22, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":23
 * 
 * class SubsetFlags(IntFlag):
 *     DEFAULT = HB_SUBSET_FLAGS_DEFAULT             # <<<<<<<<<<<<<<
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING
 *     RETAIN_GIDS = HB_SUBSET_FLAGS_RETAIN_GIDS
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_DEFAULT); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 23, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DEFAULT, __pyx_t_5) < (0)) __PYX_ERR(12, 23, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":24
 * class SubsetFlags(IntFlag):
 *     DEFAULT = HB_SUBSET_FLAGS_DEFAULT
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING             # <<<<<<<<<<<<<<
 *     RETAIN_GIDS = HB_SUBSET_FLAGS_RETAIN_GIDS
 *     DESUBROUTINIZE = HB_SUBSET_FLAGS_DESUBROUTINIZE
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_NO_HINTING); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 24, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NO_HINTING, __pyx_t_5) < (0)) __PYX_ERR(12, 24, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":25
 *     DEFAULT = HB_SUBSET_FLAGS_DEFAULT
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING
 *     RETAIN_GIDS = HB_SUBSET_FLAGS_RETAIN_GIDS             # <<<<<<<<<<<<<<
 *     DESUBROUTINIZE = HB_SUBSET_FLAGS_DESUBROUTINIZE
 *     NAME_LEGACY = HB_SUBSET_FLAGS_NAME_LEGACY
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_RETAIN_GIDS); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_RETAIN_GIDS, __pyx_t_5) < (0)) __PYX_ERR(12, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":26
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING
 *     RETAIN_GIDS = HB_SUBSET_FLAGS_RETAIN_GIDS
 *     DESUBROUTINIZE = HB_SUBSET_FLAGS_DESUBROUTINIZE             # <<<<<<<<<<<<<<
 *     NAME_LEGACY = HB_SUBSET_FLAGS_NAME_LEGACY
 *     SET_OVERLAPS_FLAG = HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_DESUBROUTINIZE); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 26, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_DESUBROUTINIZE, __pyx_t_5) < (0)) __PYX_ERR(12, 26, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":27
 *     RETAIN_GIDS = HB_SUBSET_FLAGS_RETAIN_GIDS
 *     DESUBROUTINIZE = HB_SUBSET_FLAGS_DESUBROUTINIZE
 *     NAME_LEGACY = HB_SUBSET_FLAGS_NAME_LEGACY             # <<<<<<<<<<<<<<
 *     SET_OVERLAPS_FLAG = HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG
 *     PASSTHROUGH_UNRECOGNIZED = HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_NAME_LEGACY); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NAME_LEGACY, __pyx_t_5) < (0)) __PYX_ERR(12, 27, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":28
 *     DESUBROUTINIZE = HB_SUBSET_FLAGS_DESUBROUTINIZE
 *     NAME_LEGACY = HB_SUBSET_FLAGS_NAME_LEGACY
 *     SET_OVERLAPS_FLAG = HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG             # <<<<<<<<<<<<<<
 *     PASSTHROUGH_UNRECOGNIZED = HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED
 *     NOTDEF_OUTLINE = HB_SUBSET_FLAGS_NOTDEF_OUTLINE
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 28, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_SET_OVERLAPS_FLAG, __pyx_t_5) < (0)) __PYX_ERR(12, 28, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":29
 *     NAME_LEGACY = HB_SUBSET_FLAGS_NAME_LEGACY
 *     SET_OVERLAPS_FLAG = HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG
 *     PASSTHROUGH_UNRECOGNIZED = HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED             # <<<<<<<<<<<<<<
 *     NOTDEF_OUTLINE = HB_SUBSET_FLAGS_NOTDEF_OUTLINE
 *     GLYPH_NAMES = HB_SUBSET_FLAGS_GLYPH_NAMES
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 29, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_PASSTHROUGH_UNRECOGNIZED, __pyx_t_5) < (0)) __PYX_ERR(12, 29, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":30
 *     SET_OVERLAPS_FLAG = HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG
 *     PASSTHROUGH_UNRECOGNIZED = HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED
 *     NOTDEF_OUTLINE = HB_SUBSET_FLAGS_NOTDEF_OUTLINE             # <<<<<<<<<<<<<<
 *     GLYPH_NAMES = HB_SUBSET_FLAGS_GLYPH_NAMES
 *     NO_PRUNE_UNICODE_RANGES = HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_NOTDEF_OUTLINE); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NOTDEF_OUTLINE, __pyx_t_5) < (0)) __PYX_ERR(12, 30, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":31
 *     PASSTHROUGH_UNRECOGNIZED = HB_SUBSET_FLAGS_PASSTHROUGH_UNRECOGNIZED
 *     NOTDEF_OUTLINE = HB_SUBSET_FLAGS_NOTDEF_OUTLINE
 *     GLYPH_NAMES = HB_SUBSET_FLAGS_GLYPH_NAMES             # <<<<<<<<<<<<<<
 *     NO_PRUNE_UNICODE_RANGES = HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES
 *     NO_LAYOUT_CLOSURE = HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_GLYPH_NAMES); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_GLYPH_NAMES, __pyx_t_5) < (0)) __PYX_ERR(12, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":32
 *     NOTDEF_OUTLINE = HB_SUBSET_FLAGS_NOTDEF_OUTLINE
 *     GLYPH_NAMES = HB_SUBSET_FLAGS_GLYPH_NAMES
 *     NO_PRUNE_UNICODE_RANGES = HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES             # <<<<<<<<<<<<<<
 *     NO_LAYOUT_CLOSURE = HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 32, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NO_PRUNE_UNICODE_RANGES, __pyx_t_5) < (0)) __PYX_ERR(12, 32, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":33
 *     GLYPH_NAMES = HB_SUBSET_FLAGS_GLYPH_NAMES
 *     NO_PRUNE_UNICODE_RANGES = HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES
 *     NO_LAYOUT_CLOSURE = HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = __Pyx_PyLong_From_hb_subset_flags_t(HB_SUBSET_FLAGS_NO_LAYOUT_CLOSURE); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 33, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (__Pyx_SetNameInClass(__pyx_t_4, __pyx_mstate_global->__pyx_n_u_NO_LAYOUT_CLOSURE, __pyx_t_5) < (0)) __PYX_ERR(12, 33, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "src/uharfbuzz/_subset.pxi":22
 * 
 * 
 * class SubsetFlags(IntFlag):             # <<<<<<<<<<<<<<
 *     DEFAULT = HB_SUBSET_FLAGS_DEFAULT
 *     NO_HINTING = HB_SUBSET_FLAGS_NO_HINTING
*/
  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_SubsetFlags, __pyx_t_7, __pyx_t_4, NULL, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_SubsetFlags, __pyx_t_5) < (0)) __PYX_ERR(12, 22, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":48
 *             hb_subset_input_destroy(self._hb_input)
 * 
 *     def subset(self, source: Face) -> Face:             # <<<<<<<<<<<<<<
 *         return subset(source, self)
 * 
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_source, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 48, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 48, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_5subset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_subset, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[195])); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_subset, __pyx_t_9) < (0)) __PYX_ERR(12, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_subset.pxi":51
 *         return subset(source, self)
 * 
 *     def keep_everything(self):             # <<<<<<<<<<<<<<
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_7keep_everything, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_keep_everything, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[196])); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_keep_everything, __pyx_t_9) < (0)) __PYX_ERR(12, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_subset.pxi":54
 *         hb_subset_input_keep_everything(self._hb_input)
 * 
 *     def pin_all_axes_to_default(self, face: Face) -> bool:             # <<<<<<<<<<<<<<
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 54, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(12, 54, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_9pin_all_axes_to_default, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_pin_all_axes_to_defa, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[197])); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 54, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_pin_all_axes_to_default, __pyx_t_7) < (0)) __PYX_ERR(12, 54, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":57
 *         return hb_subset_input_pin_all_axes_to_default(self._hb_input, face._hb_face)
 * 
 *     def pin_axis_to_default(self, face: Face, tag: str) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_to_default(
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 57, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(12, 57, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(12, 57, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_11pin_axis_to_default, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_pin_axis_to_default, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[198])); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 57, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_pin_axis_to_default, __pyx_t_9) < (0)) __PYX_ERR(12, 57, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_subset.pxi":63
 *         )
 * 
 *     def pin_axis_location(self, face: Face, tag: str, value: float) -> bool:             # <<<<<<<<<<<<<<
 *         hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         return hb_subset_input_pin_axis_location(
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 63, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(12, 63, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_value, __pyx_mstate_global->__pyx_n_u_float) < (0)) __PYX_ERR(12, 63, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(12, 63, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_13pin_axis_location, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_pin_axis_location, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[199])); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_pin_axis_location, __pyx_t_7) < (0)) __PYX_ERR(12, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":69
 *         )
 * 
 *     def set_axis_range(self,             # <<<<<<<<<<<<<<
 *                        face: Face,
 *                        tag: str,
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_min_value, __pyx_mstate_global->__pyx_kp_u_float_None) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_max_value, __pyx_mstate_global->__pyx_kp_u_float_None) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_def_value, __pyx_mstate_global->__pyx_kp_u_float_None) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_15set_axis_range, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_set_axis_range, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[200])); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_set_axis_range, __pyx_t_9) < (0)) __PYX_ERR(12, 69, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_subset.pxi":83
 *         )
 * 
 *     def get_axis_range(self, tag: str) -> Tuple[float | None, float | None | float | None] | None:             # <<<<<<<<<<<<<<
 *         cdef hb_tag_t hb_tag = hb_tag_from_string(tag.encode("ascii"), -1)
 *         cdef float axis_min_value, axis_max_value, axis_def_value
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(12, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Tuple_float_None_float_None_floa) < (0)) __PYX_ERR(12, 83, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_17get_axis_range, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_get_axis_range, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[201])); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_get_axis_range, __pyx_t_7) < (0)) __PYX_ERR(12, 83, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "src/uharfbuzz/_subset.pxi":102
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_glyph_set(self._hb_input)))
 * 
 *     def sets(self, set_type : SubsetInputSets) -> Set:             # <<<<<<<<<<<<<<
 *         return Set.from_ptr(hb_set_reference (hb_subset_input_set(self._hb_input, set_type)))
 * 
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_set_type, __pyx_mstate_global->__pyx_n_u_SubsetInputSets) < (0)) __PYX_ERR(12, 102, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Set_2) < (0)) __PYX_ERR(12, 102, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_19sets, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput_sets, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[202])); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 102, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetInput, __pyx_mstate_global->__pyx_n_u_sets, __pyx_t_9) < (0)) __PYX_ERR(12, 102, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_21__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[203])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_11SubsetInput_23__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetInput___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[204])); if (unlikely(!__pyx_t_9)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_9) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "src/uharfbuzz/_subset.pxi":151
 *             hb_subset_plan_destroy(self._hb_plan)
 * 
 *     def execute(self) -> Face:             # <<<<<<<<<<<<<<
 *         new_face = hb_subset_plan_execute_or_fail(self._hb_plan)
 *         if new_face == NULL:
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(12, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(12, 151, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_5execute, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetPlan_execute, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[205])); if (unlikely(!__pyx_t_7)) __PYX_ERR(12, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_9uharfbuzz_9_harfbuzz_SubsetPlan, __pyx_mstate_global->__pyx_n_u_execute, __pyx_t_7) < (0)) __PYX_ERR(12, 151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetPlan___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[206])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "(tree fragment)":3
 * def __reduce_cython__(self):
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
*/
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_10SubsetPlan_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_SubsetPlan___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[207])); if (unlikely(!__pyx_t_7)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_7) < (0)) __PYX_ERR(4, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":76
 * 
 * 
 * def shape(font: Font, buffer: Buffer,             # <<<<<<<<<<<<<<
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_buffer, __pyx_mstate_global->__pyx_n_u_Buffer) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_features, __pyx_mstate_global->__pyx_kp_u_Dict_str_Union_int_bool_Sequence) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_shapers, __pyx_mstate_global->__pyx_kp_u_List_str_None) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_17shape, 0, __pyx_mstate_global->__pyx_n_u_shape, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[208])); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_9, __pyx_mstate_global->__pyx_tuple[6]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_shape, __pyx_t_9) < (0)) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":128
 * 
 * 
 * def ot_tag_to_script(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 128, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 128, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_19ot_tag_to_script, 0, __pyx_mstate_global->__pyx_n_u_ot_tag_to_script, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[209])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_tag_to_script, __pyx_t_7) < (0)) __PYX_ERR(0, 128, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":139
 * 
 * 
 * def ot_tag_to_language(tag: str) -> str:             # <<<<<<<<<<<<<<
 *     cdef bytes packed = tag.encode()
 *     cdef hb_tag_t hb_tag = hb_tag_from_string(<char*>packed, -1)
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 139, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_7, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 139, __pyx_L1_error)
  __pyx_t_9 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_21ot_tag_to_language, 0, __pyx_mstate_global->__pyx_n_u_ot_tag_to_language, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[210])); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_9);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_9, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_tag_to_language, __pyx_t_9) < (0)) __PYX_ERR(0, 139, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":150
 * 
 * 
 * @deprecated("Face.get_lookup_glyph_alternates()")             # <<<<<<<<<<<<<<
 * def ot_layout_lookup_get_glyph_alternates(
 *         face: Face, lookup_index : int, glyph : hb_codepoint_t) -> List[int]:
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_get_lookup_glyph_alternates_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 150, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_lookup_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 150, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_hb_codepoint_t) < (0)) __PYX_ERR(0, 150, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_int) < (0)) __PYX_ERR(0, 150, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_23ot_layout_lookup_get_glyph_alternates, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_lookup_get_glyph_alter, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[211])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 150, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_lookup_get_glyph_alter, __pyx_t_9) < (0)) __PYX_ERR(0, 150, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":156
 * 
 * 
 * @deprecated("Face.get_language_feature_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_language_get_feature_tags(
 *         face: Face, tag: str, script_index: int = 0,
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_get_language_feature_tags_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_script_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_language_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_25ot_layout_language_get_feature_tags, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_language_get_feature_t, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[212])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_7, __pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 156, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_language_get_feature_t, __pyx_t_9) < (0)) __PYX_ERR(0, 156, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":163
 * 
 * 
 * @deprecated("Face.get_script_language_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_script_get_language_tags(
 *         face: Face, tag: str, script_index: int = 0) -> List[str]:
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_get_script_language_tags_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 163, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_script_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_27ot_layout_script_get_language_tags, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_script_get_language_ta, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[213])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 163, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_script_get_language_ta, __pyx_t_9) < (0)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":168
 *     return face.get_script_language_tags(tag, script_index)
 * 
 * @deprecated("Face.get_table_script_tags()")             # <<<<<<<<<<<<<<
 * def ot_layout_table_get_script_tags(face: Face, tag: str) -> List[str]:
 *     return face.get_table_script_tags(tag)
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_get_table_script_tags_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_str) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_29ot_layout_table_get_script_tags, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_table_get_script_tags, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[214])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 168, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_table_get_script_tags, __pyx_t_9) < (0)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":172
 *     return face.get_table_script_tags(tag)
 * 
 * @deprecated("Face.get_layout_baseline()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_baseline(font: Font,
 *                            baseline_tag: str,
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_get_layout_baseline};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_baseline_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_script_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_language_tag, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_31ot_layout_get_baseline, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_get_baseline, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[215])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_get_baseline, __pyx_t_9) < (0)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":180
 *     return font.get_layout_baseline(baseline_tag, direction, script_tag, language_tag)
 * 
 * @deprecated("Face.face.has_layout_glyph_classes")             # <<<<<<<<<<<<<<
 * def ot_layout_has_glyph_classes(face: Face) -> bool:
 *     return face.has_layout_glyph_classes
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_face_has_layout_glyph_class};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 180, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 180, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_33ot_layout_has_glyph_classes, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_has_glyph_classes, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[216])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 180, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_has_glyph_classes, __pyx_t_9) < (0)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":184
 *     return face.has_layout_glyph_classes
 * 
 * @deprecated("Face.has_layout_positioning")             # <<<<<<<<<<<<<<
 * def ot_layout_has_positioning(face: Face) -> bool:
 *     return face.has_layout_positioning
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_has_layout_positioning};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 184, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 184, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_35ot_layout_has_positioning, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_has_positioning, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[217])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 184, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_has_positioning, __pyx_t_9) < (0)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":188
 *     return face.has_layout_positioning
 * 
 * @deprecated("Face.has_layout_substitution")             # <<<<<<<<<<<<<<
 * def ot_layout_has_substitution(face: Face) -> bool:
 *     return face.has_layout_substitution
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_has_layout_substitution};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 188, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_37ot_layout_has_substitution, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_has_substitution, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[218])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_has_substitution, __pyx_t_9) < (0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":192
 *     return face.has_layout_substitution
 * 
 * @deprecated("Face.get_layout_glyph_class()")             # <<<<<<<<<<<<<<
 * def ot_layout_get_glyph_class(face: Face, glyph: int) -> OTLayoutGlyphClass:
 *     return face.get_layout_glyph_class(glyph)
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_get_layout_glyph_class_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 192, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 192, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_OTLayoutGlyphClass) < (0)) __PYX_ERR(0, 192, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_39ot_layout_get_glyph_class, 0, __pyx_mstate_global->__pyx_n_u_ot_layout_get_glyph_class, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[219])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 192, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_layout_get_glyph_class, __pyx_t_9) < (0)) __PYX_ERR(0, 192, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":196
 *     return face.get_layout_glyph_class(glyph)
 * 
 * @deprecated("Face.has_color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_has_palettes(face: Face) -> bool:
 *     return face.has_color_palettes
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_has_color_palettes};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_41ot_color_has_palettes, 0, __pyx_mstate_global->__pyx_n_u_ot_color_has_palettes, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[220])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_has_palettes, __pyx_t_9) < (0)) __PYX_ERR(0, 196, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":200
 *     return face.has_color_palettes
 * 
 * @deprecated("Face.color_palettes")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_count(face: Face) -> int:
 *     return hb_ot_color_palette_get_count(face._hb_face)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_color_palettes};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 200, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 200, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_43ot_color_palette_get_count, 0, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_count, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[221])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 200, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_count, __pyx_t_9) < (0)) __PYX_ERR(0, 200, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":204
 *     return hb_ot_color_palette_get_count(face._hb_face)
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_flags(face: Face, palette_index: int) -> OTColorPaletteFlags:
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_get_color_palette_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_palette_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 204, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_OTColorPaletteFlags) < (0)) __PYX_ERR(0, 204, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_45ot_color_palette_get_flags, 0, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_flags, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[222])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 204, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_flags, __pyx_t_9) < (0)) __PYX_ERR(0, 204, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":208
 *     return OTColorPaletteFlags(hb_ot_color_palette_get_flags(face._hb_face, palette_index))
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_colors(face: Face, palette_index: int) -> List[Color]:
 *     cdef list ret = []
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_get_color_palette_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 208, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_palette_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 208, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_Color) < (0)) __PYX_ERR(0, 208, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_47ot_color_palette_get_colors, 0, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_colors, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[223])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 208, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_colors, __pyx_t_9) < (0)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":221
 *     return ret
 * 
 * @deprecated("Face.get_color_palette()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_get_name_id(face: Face, palette_index: int) -> int | None:
 *     cdef hb_ot_name_id_t name_id
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_get_color_palette_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_palette_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_49ot_color_palette_get_name_id, 0, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_name_id, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[224])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_palette_get_name_id, __pyx_t_9) < (0)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":229
 *     return name_id
 * 
 * @deprecated("Face.color_palette_color_get_name_id()")             # <<<<<<<<<<<<<<
 * def ot_color_palette_color_get_name_id(face: Face, color_index: int) -> int | None:
 *     return face.color_palette_color_get_name_id(color_index)
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_color_palette_color_get_nam_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_color_index, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_int_None) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_51ot_color_palette_color_get_name_id, 0, __pyx_mstate_global->__pyx_n_u_ot_color_palette_color_get_name, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[225])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_palette_color_get_name, __pyx_t_9) < (0)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":233
 *     return face.color_palette_color_get_name_id(color_index)
 * 
 * @deprecated("Face.has_color_layers")             # <<<<<<<<<<<<<<
 * def ot_color_has_layers(face: Face) -> bool:
 *     return face.has_color_layers
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_has_color_layers};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 233, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 233, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_53ot_color_has_layers, 0, __pyx_mstate_global->__pyx_n_u_ot_color_has_layers, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[226])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 233, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_has_layers, __pyx_t_9) < (0)) __PYX_ERR(0, 233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":237
 *     return face.has_color_layers
 * 
 * @deprecated("Face.get_glyph_color_layers()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_layers(face: Face, glyph: int) -> List[OTColorLayer]:
 *     return face.get_glyph_color_layers(glyph)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_get_glyph_color_layers_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTColorLayer) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_55ot_color_glyph_get_layers, 0, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_layers, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[227])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_layers, __pyx_t_9) < (0)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":241
 *     return face.get_glyph_color_layers(glyph)
 * 
 * @deprecated("Face.has_color_paint")             # <<<<<<<<<<<<<<
 * def ot_color_has_paint(face: Face) -> bool:
 *     return face.has_color_paint
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_has_color_paint};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 241, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 241, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_57ot_color_has_paint, 0, __pyx_mstate_global->__pyx_n_u_ot_color_has_paint, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[228])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_has_paint, __pyx_t_9) < (0)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":245
 *     return face.has_color_paint
 * 
 * @deprecated("Face.glyph_has_color_paint()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_has_paint(face: Face, glyph: int) -> bool:
 *     return face.glyph_has_color_paint(glyph)
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_glyph_has_color_paint_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_59ot_color_glyph_has_paint, 0, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_has_paint, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[229])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_has_paint, __pyx_t_9) < (0)) __PYX_ERR(0, 245, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":249
 *     return face.glyph_has_color_paint(glyph)
 * 
 * @deprecated("Face.has_color_svg")             # <<<<<<<<<<<<<<
 * def ot_color_has_svg(face: Face) -> bool:
 *     return face.has_color_svg
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Face_has_color_svg};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_61ot_color_has_svg, 0, __pyx_mstate_global->__pyx_n_u_ot_color_has_svg, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[230])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_has_svg, __pyx_t_9) < (0)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":253
 *     return face.has_color_svg
 * 
 * @deprecated("Face.get_glyph_color_svg()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_svg(face: Face, glyph: int) -> Blob:
 *     return face.get_glyph_color_svg(glyph)
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_get_glyph_color_svg_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_63ot_color_glyph_get_svg, 0, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_svg, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[231])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_svg, __pyx_t_9) < (0)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":257
 *     return face.get_glyph_color_svg(glyph)
 * 
 * @deprecated("Face.has_color_png")             # <<<<<<<<<<<<<<
 * def ot_color_has_png(face: Face) -> bool:
 *     return face.has_color_png
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_has_color_png};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 257, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 257, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_65ot_color_has_png, 0, __pyx_mstate_global->__pyx_n_u_ot_color_has_png, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[232])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_has_png, __pyx_t_9) < (0)) __PYX_ERR(0, 257, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":261
 *     return face.has_color_png
 * 
 * @deprecated("Font.get_glyph_color_png()")             # <<<<<<<<<<<<<<
 * def ot_color_glyph_get_png(font: Font, glyph: int) -> Blob:
 *     return font.get_glyph_color_png(glyph)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Font_get_glyph_color_png_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Blob) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_67ot_color_glyph_get_png, 0, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_png, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[233])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_color_glyph_get_png, __pyx_t_9) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":266
 * 
 * 
 * @deprecated("Face.has_math_data")             # <<<<<<<<<<<<<<
 * def ot_math_has_data(face: Face) -> bool:
 *     return face.has_math_data
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Face_has_math_data};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 266, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 266, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_69ot_math_has_data, 0, __pyx_mstate_global->__pyx_n_u_ot_math_has_data, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[234])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_has_data, __pyx_t_9) < (0)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":270
 *     return face.has_math_data
 * 
 * @deprecated("Font.get_math_constant()")             # <<<<<<<<<<<<<<
 * def ot_math_get_constant(font: Font, constant: OTMathConstant) -> int:
 *     return font.get_math_constant(constant)
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Font_get_math_constant_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 270, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_constant, __pyx_mstate_global->__pyx_n_u_OTMathConstant) < (0)) __PYX_ERR(0, 270, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 270, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_71ot_math_get_constant, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_constant, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[235])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_constant, __pyx_t_9) < (0)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":274
 *     return font.get_math_constant(constant)
 * 
 * @deprecated("Font.get_math_glyph_italics_correction()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_italics_correction(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_italics_correction(glyph)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_italics_corr_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 274, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 274, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 274, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_73ot_math_get_glyph_italics_correction, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_italics_correc, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[236])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_italics_correc, __pyx_t_9) < (0)) __PYX_ERR(0, 274, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":278
 *     return font.get_math_glyph_italics_correction(glyph)
 * 
 * @deprecated("Font.get_math_glyph_top_accent_attachment()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_top_accent_attachment(font: Font, glyph: int) -> int:
 *     return font.get_math_glyph_top_accent_attachment(glyph)
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_top_accent_a_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_75ot_math_get_glyph_top_accent_attachment, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_top_accent_att, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[237])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_top_accent_att, __pyx_t_9) < (0)) __PYX_ERR(0, 278, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":282
 *     return font.get_math_glyph_top_accent_attachment(glyph)
 * 
 * @deprecated("Face.is_glyph_extended_math_shape()")             # <<<<<<<<<<<<<<
 * def ot_math_is_glyph_extended_shape(face: Face, glyph: int) -> bool:
 *     return face.is_glyph_extended_math_shape(glyph)
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Face_is_glyph_extended_math_shap_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_face, __pyx_mstate_global->__pyx_n_u_Face) < (0)) __PYX_ERR(0, 282, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 282, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_bool) < (0)) __PYX_ERR(0, 282, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_77ot_math_is_glyph_extended_shape, 0, __pyx_mstate_global->__pyx_n_u_ot_math_is_glyph_extended_shape, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[238])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_is_glyph_extended_shape, __pyx_t_9) < (0)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":286
 *     return face.is_glyph_extended_math_shape(glyph)
 * 
 * @deprecated("Font.get_math_min_connector_overlap()")             # <<<<<<<<<<<<<<
 * def ot_math_get_min_connector_overlap(font: Font, direction: str) -> int:
 *     return font.get_math_min_connector_overlap(direction)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Font_get_math_min_connector_over_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_79ot_math_get_min_connector_overlap, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_min_connector_overla, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[239])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 286, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_min_connector_overla, __pyx_t_9) < (0)) __PYX_ERR(0, 286, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":290
 *     return font.get_math_min_connector_overlap(direction)
 * 
 * @deprecated("Font.get_math_glyph_kerning()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kerning(font: Font,
 *                               glyph: int,
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_kerning_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 290, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 290, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_kern, __pyx_mstate_global->__pyx_n_u_OTMathKern) < (0)) __PYX_ERR(0, 290, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 290, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_81ot_math_get_glyph_kerning, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_kerning, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[240])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 290, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_kerning, __pyx_t_9) < (0)) __PYX_ERR(0, 290, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":297
 *     return font.get_math_glyph_kerning(glyph, kern, correction_height)
 * 
 * @deprecated("Font.get_math_glyph_kernings()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_kernings(font: Font,
 *                                glyph: int,
*/
  __pyx_t_7 = NULL;
  __pyx_t_5 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_kernings_2};
    __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 297, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 297, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_kern, __pyx_mstate_global->__pyx_n_u_OTMathKern) < (0)) __PYX_ERR(0, 297, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTMathKernEntry) < (0)) __PYX_ERR(0, 297, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_83ot_math_get_glyph_kernings, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_kernings, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[241])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_5);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_kernings, __pyx_t_9) < (0)) __PYX_ERR(0, 297, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":303
 *     return font.get_math_glyph_kernings(glyph, kern)
 * 
 * @deprecated("Font.get_math_glyph_variants()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_variants(font: Font, glyph: int, direction: str) -> List[OTMathGlyphVariant]:
 *     return font.get_math_glyph_variants(glyph, direction)
*/
  __pyx_t_4 = NULL;
  __pyx_t_7 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_variants_2};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 303, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 303, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 303, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_List_OTMathGlyphVariant) < (0)) __PYX_ERR(0, 303, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_85ot_math_get_glyph_variants, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_variants, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[242])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_7};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_variants, __pyx_t_9) < (0)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":307
 *     return font.get_math_glyph_variants(glyph, direction)
 * 
 * @deprecated("Font.get_math_glyph_assembly()")             # <<<<<<<<<<<<<<
 * def ot_math_get_glyph_assembly(font: Font,
 *                                glyph: int,
*/
  __pyx_t_5 = NULL;
  __pyx_t_4 = NULL;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_deprecated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_mstate_global->__pyx_kp_u_Font_get_math_glyph_assembly_2};
    __pyx_t_7 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_2, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
  }
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_glyph, __pyx_mstate_global->__pyx_n_u_int) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_direction, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_kp_u_Tuple_List_OTMathGlyphPart_int) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  __pyx_t_4 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_87ot_math_get_glyph_assembly, 0, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_assembly, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[243])); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_4);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_4, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
    __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
  }
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_math_get_glyph_assembly, __pyx_t_9) < (0)) __PYX_ERR(0, 307, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":314
 * 
 * 
 * def ot_font_set_funcs(font: Font):             # <<<<<<<<<<<<<<
 *     hb_ot_font_set_funcs(font._hb_font)
*/
  __pyx_t_9 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  if (PyDict_SetItem(__pyx_t_9, __pyx_mstate_global->__pyx_n_u_font, __pyx_mstate_global->__pyx_n_u_Font) < (0)) __PYX_ERR(0, 314, __pyx_L1_error)
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_9uharfbuzz_9_harfbuzz_89ot_font_set_funcs, 0, __pyx_mstate_global->__pyx_n_u_ot_font_set_funcs, NULL, __pyx_mstate_global->__pyx_n_u_uharfbuzz__harfbuzz, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[244])); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 314, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount(__pyx_t_7);
  #endif
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_9);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_ot_font_set_funcs, __pyx_t_7) < (0)) __PYX_ERR(0, 314, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /* "uharfbuzz/_harfbuzz.pyx":1
 * #cython: language_level=3             # <<<<<<<<<<<<<<
 * cimport cython
 * import os
*/
  __pyx_t_7 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_7) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __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_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  if (__pyx_m) {
    if (__pyx_mstate->__pyx_d && stringtab_initialized) {
      __Pyx_AddTraceback("init uharfbuzz._harfbuzz", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    #if !CYTHON_USE_MODULE_STATE
    Py_CLEAR(__pyx_m);
    #else
    Py_DECREF(__pyx_m);
    if (pystate_addmodule_run) {
      PyObject *tp, *value, *tb;
      PyErr_Fetch(&tp, &value, &tb);
      PyState_RemoveModule(&__pyx_moduledef);
      PyErr_Restore(tp, value, tb);
    }
    #endif
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init uharfbuzz._harfbuzz");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #else
  return __pyx_m;
  #endif
}
/* #### Code section: pystring_table ### */
/* #### Code section: cached_builtins ### */

static int __Pyx_InitCachedBuiltins(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_staticmethod); if (!__pyx_builtin_staticmethod) __PYX_ERR(1, 30, __pyx_L1_error)
  __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_NotImplemented); if (!__pyx_builtin_NotImplemented) __PYX_ERR(2, 86, __pyx_L1_error)
  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(3, 278, __pyx_L1_error)
  __pyx_builtin_round = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_round); if (!__pyx_builtin_round) __PYX_ERR(3, 380, __pyx_L1_error)

  /* Cached unbound methods */
  __pyx_mstate->__pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_items.method_name = &__pyx_mstate->__pyx_n_u_items;
  __pyx_mstate->__pyx_umethod_PyDict_Type_pop.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_pop.method_name = &__pyx_mstate->__pyx_n_u_pop;
  __pyx_mstate->__pyx_umethod_PyDict_Type_values.type = (PyObject*)&PyDict_Type;
  __pyx_mstate->__pyx_umethod_PyDict_Type_values.method_name = &__pyx_mstate->__pyx_n_u_values;
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cached_constants ### */

static int __Pyx_InitCachedConstants(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "uharfbuzz/_harfbuzz.pyx":41
 * 
 * 
 * def deprecated(replacement=None):             # <<<<<<<<<<<<<<
 *     """Decorator to raise a warning when a deprecated function is called."""
 * 
*/
  __pyx_mstate_global->__pyx_tuple[0] = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[0])) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[0]);

  /* "src/uharfbuzz/_buffer.pxi":273
 *             self._hb_buffer, hb_ot_tag_to_script(hb_tag_from_string(cstr, -1)))
 * 
 *     def add_codepoints(self, codepoints: List[int],             # <<<<<<<<<<<<<<
 *                        item_offset: int = 0, item_length: int = -1):
 *         cdef unsigned int size = len(codepoints)
*/
  __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_neg_1); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(7, 273, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);

  /* "src/uharfbuzz/_face.pxi":151
 * 
 *     # DEPRECATED: use the normal constructor
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def create(cls, blob: bytes, index: int = 0) -> Face:
 *         cdef Face inst = cls(blob, index)
*/
  __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(1, 151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);

  /* "src/uharfbuzz/_face.pxi":421
 *         return alternates
 * 
 *     def get_language_feature_tags(self,             # <<<<<<<<<<<<<<
 *                                   tag: str,
 *                                   script_index: int = 0,
*/
  __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(2, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_65535); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(1, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);

  /* "src/uharfbuzz/_font.pxi":425
 *         hb_font_draw_glyph(self._hb_font, gid, draw_funcs._hb_drawfuncs, draw_state_p);
 * 
 *     def paint_glyph(self, gid: int,             # <<<<<<<<<<<<<<
 *                     paint_funcs: PaintFuncs,
 *                     paint_state: object = None,
*/
  __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(3, Py_None, __pyx_mstate_global->__pyx_int_0, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(3, 425, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);

  /* "src/uharfbuzz/_subset.pxi":69
 *         )
 * 
 *     def set_axis_range(self,             # <<<<<<<<<<<<<<
 *                        face: Face,
 *                        tag: str,
*/
  __pyx_mstate_global->__pyx_tuple[5] = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[5])) __PYX_ERR(12, 69, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[5]);

  /* "uharfbuzz/_harfbuzz.pyx":76
 * 
 * 
 * def shape(font: Font, buffer: Buffer,             # <<<<<<<<<<<<<<
 *         features: Dict[str,Union[int,bool,Sequence[Tuple[int,int,Union[int,bool]]]]] | None = None,
 *         shapers: List[str] | None = None):
*/
  __pyx_mstate_global->__pyx_tuple[6] = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(0, 76, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[6]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[6]);
  #if CYTHON_IMMORTAL_CONSTANTS
  {
    PyObject **table = __pyx_mstate->__pyx_tuple;
    for (Py_ssize_t i=0; i<7; ++i) {
      #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
      #if PY_VERSION_HEX < 0x030E0000
      if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
      #else
      if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
      #endif
      {
        Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
      }
      #else
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
      #endif
    }
  }
  #endif
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}
/* #### Code section: init_constants ### */

static int __Pyx_InitConstants(__pyx_mstatetype *__pyx_mstate) {
  CYTHON_UNUSED_VAR(__pyx_mstate);
  {
    const struct { const unsigned int length: 9; } index[] = {{18},{66},{77},{63},{37},{36},{39},{34},{46},{34},{37},{44},{66},{52},{38},{30},{29},{29},{24},{13},{12},{79},{16},{38},{19},{34},{24},{29},{26},{32},{26},{29},{34},{31},{28},{28},{21},{20},{23},{18},{18},{27},{28},{18},{35},{16},{17},{26},{24},{30},{40},{29},{30},{43},{30},{37},{23},{22},{11},{13},{18},{24},{21},{17},{67},{11},{11},{9},{9},{16},{9},{4},{179},{24},{34},{107},{111},{20},{18},{10},{8},{9},{17},{33},{55},{22},{16},{1},{1},{2},{2},{0},{1},{1},{8},{7},{6},{12},{2},{45},{8},{10},{22},{16},{12},{14},{9},{50},{24},{11},{20},{23},{25},{23},{23},{23},{27},{22},{24},{25},{28},{22},{25},{10},{14},{6},{2},{18},{11},{10},{6},{3},{11},{12},{4},{22},{24},{19},{6},{18},{17},{11},{20},{21},{24},{26},{21},{14},{15},{21},{13},{31},{12},{16},{31},{23},{29},{10},{10},{17},{5},{10},{11},{9},{9},{8},{5},{9},{27},{29},{9},{14},{12},{6},{15},{7},{29},{7},{32},{11},{8},{12},{4},{9},{7},{8},{9},{14},{10},{27},{27},{14},{4},{9},{27},{29},{20},{25},{29},{27},{26},{26},{31},{3},{9},{8},{28},{11},{14},{45},{28},{31},{36},{41},{26},{27},{34},{23},{9},{4},{22},{24},{36},{11},{22},{22},{27},{24},{30},{27},{32},{13},{29},{26},{26},{33},{15},{20},{23},{4},{11},{9},{27},{29},{16},{33},{33},{34},{29},{34},{33},{32},{34},{22},{24},{11},{15},{24},{21},{24},{22},{24},{24},{23},{19},{24},{23},{24},{22},{28},{38},{27},{28},{41},{28},{35},{24},{38},{25},{27},{27},{22},{20},{26},{30},{24},{22},{20},{16},{26},{30},{18},{19},{6},{13},{11},{11},{11},{9},{12},{10},{9},{27},{29},{13},{31},{33},{10},{8},{26},{28},{6},{19},{23},{21},{20},{26},{27},{20},{19},{9},{7},{14},{14},{13},{7},{13},{6},{7},{7},{4},{18},{17},{7},{11},{8},{7},{16},{29},{19},{4},{13},{12},{4},{12},{19},{18},{8},{3},{7},{25},{27},{12},{21},{23},{13},{11},{9},{8},{7},{9},{8},{10},{10},{7},{12},{11},{14},{11},{11},{14},{10},{17},{12},{23},{19},{10},{14},{12},{7},{12},{14},{19},{18},{14},{15},{20},{18},{10},{15},{12},{11},{18},{14},{13},{18},{22},{22},{20},{7},{3},{24},{4},{15},{27},{30},{24},{18},{11},{10},{28},{30},{25},{31},{40},{25},{35},{28},{29},{33},{35},{39},{30},{34},{35},{34},{4},{20},{35},{34},{22},{25},{26},{22},{20},{7},{25},{6},{11},{10},{28},{30},{16},{21},{29},{17},{16},{28},{13},{12},{11},{29},{31},{17},{21},{11},{29},{31},{17},{39},{23},{31},{18},{17},{36},{29},{13},{22},{11},{6},{25},{32},{17},{30},{28},{11},{11},{10},{18},{3},{8},{6},{7},{8},{37},{23},{27},{13},{32},{18},{31},{27},{27},{26},{16},{14},{27},{21},{19},{21},{19},{20},{17},{23},{29},{37},{22},{23},{21},{23},{21},{20},{28},{8},{15},{7},{25},{27},{3},{12},{21},{23},{13},{8},{11},{7},{13},{9},{8},{13},{21},{11},{23},{10},{15},{12},{14},{10},{7},{31},{10},{8},{11},{11},{15},{29},{31},{26},{27},{35},{29},{31},{26},{16},{18},{10},{28},{30},{18},{4},{8},{9},{9},{18},{21},{5},{12},{24},{23},{21},{16},{14},{7},{9},{15},{16},{29},{19},{27},{28},{5},{20},{10},{6},{14},{17},{21},{19},{18},{18},{17},{6},{6},{5},{10},{13},{3},{8},{1},{3},{14},{9},{7},{8},{7},{5},{15},{10},{15},{4},{8},{8},{14},{18},{14},{10},{14},{14},{1},{12},{4},{9},{11},{4},{4},{6},{5},{1},{12},{8},{8},{9},{13},{12},{9},{6},{8},{5},{14},{27},{18},{5},{9},{3},{10},{5},{11},{11},{31},{6},{9},{8},{8},{6},{13},{4},{8},{17},{5},{6},{17},{4},{7},{4},{9},{9},{13},{9},{10},{29},{46},{9},{13},{8},{17},{9},{7},{7},{9},{10},{10},{18},{19},{10},{12},{6},{3},{20},{7},{4},{9},{7},{7},{4},{12},{4},{13},{8},{8},{5},{5},{5},{4},{10},{6},{14},{8},{8},{12},{4},{8},{6},{5},{9},{1},{7},{3},{14},{17},{16},{22},{19},{19},{17},{19},{19},{18},{14},{15},{19},{18},{25},{19},{22},{27},{17},{23},{33},{22},{23},{36},{23},{30},{19},{33},{20},{22},{22},{8},{17},{24},{15},{21},{21},{25},{19},{12},{3},{5},{17},{21},{15},{10},{5},{24},{4},{16},{15},{18},{13},{13},{24},{22},{23},{13},{15},{14},{13},{12},{11},{11},{15},{11},{9},{13},{6},{13},{4},{6},{1},{4},{4},{4},{4},{3},{5},{4},{5},{4},{3},{19},{6},{13},{9},{13},{28},{11},{8},{10},{18},{11},{11},{5},{4},{1},{15},{4},{10},{5},{11},{4},{21},{6},{4},{8},{14},{14},{12},{10},{4},{11},{6},{6},{6},{8},{10},{12},{1},{8},{4},{21},{9},{7},{13},{7},{9},{10},{6},{15},{8},{4},{7},{8},{4},{4},{11},{10},{9},{8},{6},{6},{2},{25},{22},{22},{24},{19},{18},{21},{16},{16},{34},{27},{26},{26},{28},{17},{22},{25},{27},{25},{26},{35},{37},{34},{31},{20},{26},{36},{25},{26},{39},{26},{33},{16},{31},{18},{16},{5},{1},{6},{11},{11},{11},{19},{11},{13},{13},{7},{3},{23},{17},{19},{3},{8},{18},{11},{11},{14},{8},{12},{1},{3},{10},{17},{13},{15},{6},{6},{6},{15},{11},{25},{5},{6},{3},{6},{4},{5},{1},{12},{12},{10},{4},{4},{9},{18},{3},{4},{14},{19},{14},{20},{17},{24},{29},{23},{23},{17},{24},{19},{24},{23},{14},{24},{16},{24},{16},{16},{12},{22},{17},{18},{22},{24},{28},{19},{23},{21},{24},{22},{23},{8},{21},{25},{13},{24},{14},{10},{4},{12},{19},{5},{6},{7},{4},{11},{6},{5},{22},{12},{12},{3},{6},{6},{17},{6},{17},{9},{7},{27},{11},{10},{3},{10},{4},{4},{8},{4},{11},{5},{6},{6},{11},{19},{7},{7},{6},{9},{11},{1},{5},{6},{23},{8},{14},{9},{18},{18},{10},{14},{4},{8},{5},{7},{5},{1},{9},{8},{1},{9},{8},{0},{26},{21},{98},{40},{34},{35},{48},{37},{21},{22},{110},{44},{26},{95},{32},{21},{27},{21},{27},{31},{31},{21},{14},{33},{18},{28},{21},{35},{72},{21},{21},{46},{21},{40},{90},{65},{23},{38},{30},{93},{47},{36},{13},{22},{21},{7},{117},{40},{156},{364},{107},{229},{74},{21},{130},{74},{25},{35},{35},{39},{128},{11},{35},{118},{130},{17},{39},{39},{36},{11},{14},{59},{59},{67},{39},{39},{39},{35},{90},{62},{11},{11},{23},{35},{35},{43},{34},{34},{11},{11},{14},{130},{35},{35},{11},{11},{35},{130},{18},{41},{17},{27},{35},{11},{153},{18},{11},{22},{141},{42},{166},{64},{29},{21},{78},{42},{26},{99},{28},{23},{54},{9},{63},{54},{14},{33},{27},{44},{18},{23},{17},{25},{16},{51},{56},{64},{21},{29},{176},{134},{18},{35},{37},{2},{2},{376},{14},{14},{28},{30},{43},{19},{53},{18},{41},{30},{67},{61},{61},{21},{42},{23},{21},{50},{35},{27},{2},{16},{14},{14},{130},{202},{79},{35},{70},{49},{123},{14},{149},{55},{21},{28},{22},{127}};
    #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (9696 bytes) */
const char* const cstring = "BZh91AY&SY\355\314\330[\000\t\217\377\377\377\377\377\377\377\377\377\377\377\377\377\377\277\377\377\377\300@@@@@@@@@@@@\000@\000`,\275wt\225J\212\003\351\351^\273\251=o{\316rx]\356\367oS\247\204\355\354Y\334\326\275\355\351NZ\364\327L\200\020\223\321\326\244\\V\203\336n\217'K.\016\2163X\265\215\215h-\210h\305j\224\356c\247ks\2653CZ\315\260\003\336wv\272\032\006\253\"\200\006\315\363\200\001\327\336\022\204\021\t3SFdi\251\247\2414\323 \006\003\021\2404M&\236C\002\231=M\r4\032\236OJoT\362h\324\330\236\206\224\320H\220\002jh\202&\224~\206\251\210\360I\351\036\243\324oT\365\033Sjh\032\000\000\000\000\000\032\000\000=@jxBEI\241<I\351\224d\310d\006\203C\322\006\201\246A\246\2154\311\220\000\000m@\320\000\001\243@I\244\221\002L\t\251FC\365O(\375Q\351\000\0065<\243OS\304\302F\207\250\000\033H\310\001\210\320\006\203F\206@j*h1\006\214F\0104\030M\006&\000 \320\003#&\214\232\r\003\3210\236\223\000\200\014M\000\022$ M2\000F\206\200\021\251\350\320\022zML\322h\0314\320\000\003C\324\000\000\003C@\320\320\336\374?&>\024\037%\352W;\374u\336\335\367&&\232\311\365\340k\202f\327\213\025\360\357\241\256\334\177\036#\341\362\370|A\342\017D>@\221\010\234d\262,\037\027\310H\3568\014\254\332.^V\310a\335\254\323\304\254\031dhK\241\222\251\202#m\301;\314hD1^\322\241Z\342\312\201;\272\313\037%\000\242' ?\365$\212\240\260G\304TA\210\"ZRE\212\016\"\032@\250P\310]\026\365Q\252\211UT(\033\327\237\377\204+*\206J\225={\005V\002\253\005\213O\tmt`\r\246\230\220\330\304\210\300\026\010\202\310, \244Qb\200)\010\210\240**E\204\030\301H\241\"0\200\211\210M\266\263\223%V\203F\265\243i \361/r\021\2608=~\016\201\313\277\272CS\211\004\030\304\020\211\004c\020b(\031\350\026:\007B\225M\271_\311\265\264\221\331\211\2614\306\323\032\000RE\025`\260U\204\026\002\220U$\352` \310\250(\244X\301b\201\334zG(N\271\324``.\352\212\336\240P\350E\316\275Q$\250\220\346\003\003ke\3334\n\235\245\347\242I,\204\340\370\265TA\214\035\r\202\207Zf\004(hF6\2002\320\003h\033I\241\245q!\264iX*\323b\003\243H!\2451c\267\033\210\360""\346r\231\1778<2\023H\315\327d\030A\340\205\244e\032+Z\322\272'C9R\261[F.\350\234\211^Wd\344&\270o\227T\320\306r\343lC\013B\354\340q\210\211ET\335\242\262t\033c\035JL\206\022\255:\206\304t\027\001\331\3703\250\027\316\362\\\245R\347(\226ZD\331\267\n\010J2,\213&\362T\251\263\267sM\256>W\025-\013lNP\232\221\263h6m\034\362VR\322<\244\360h\204i\213KKY\2320\3542\315\253Z\312\301\256\356\365\311\243\214\245\224ee,\2354\265\335\202\367\320\032Cd\3723\210\360a\022 \205\353I\365Nw:.\205B\276\321\254J\344\006sd\244\274\343[\016\ru\017o\313\265\325;\254\233\032^AH\3449\231\033[\342\264\2462?$\3126\331B\332\303Nb\340\327\211\321x\262\205\305\347b3H\n\346\345\256M\311\213S\231\004\007v\351'\224e\007\2274\323]\304xk\n\203\320w\374\330a\301\300h\315\242\355'\345\340\t\237^\256\256#\331\356x+\201\256\320\007\246\376w\364\377\233\372>)\233Q\375%\033\332\377\346Uy\242\274h\202\240)\354c\322\247\3633\271:\320\213\310\241\373\257\305\366\236\363Qqf\221\337\376\330\352\320\212kR\0056.\247\0337/\367\346_\241K :\177\254\271\"\277\364\372q\320\271\277\r)\365\261Q\262;=\312\026\014^\013T\261\366\376\234b\n(\267\273\350\365\376\263\346%\014G\277\002\000\246\235\362\027\302\026T2\024\347\364\361_\330\306\177XE\004'\205\261j[a\037\002\026\205\360\032Q\0219p\346v\272\024\270vu\213)\027\247\023\2330\255ewz\314b\235\223\247\245q\263DYr\203\242n\336\235\222\215\202\324\234\371\234\245I\235R\352\254w\361\317?FD#\252\343\247\303/\276\\\007\007m\201\307~\307~]\236\271\374+2\225\262\277vtk4m\367}p\322\226\235\031M\037Z\014\246\031N4`q\342R\325\355\026\302VP\236\202\361\224\255\322yt-]+w%\330\326\351n\335\264\264\002\325V\325\2256_\1773\271\361\306\322\345\267a3\177\331\027\267(\272\360\"\014\022+\325\202\342\3136\376h-S\226\205\342O|{\200at:6\352\312\030\215\220\367v;\016\213\327\212G\323(\301\345\006\214\205\nu.\252]\235\276Y\364)\321\240\024\223\002\362\360\274!\230&e@\242\232\342!\363\273\024\241#\316\205\023Xm\331\277\213\035\203aS\017\tC\230\326\240\325\006\216ViF\010\300\366\257\311\311\212xe""\344\366H\366:{^>\237|\037\206g\320h\017f\":\306\307~Ei\322\272M\310\334M\246\336\247\360'\242\220\365\276C\203\205|\370\340\262J\207\325@\324d\333h\017\007S\tS\347\327\365\3326\017f\316\235\206\327\340s\351\325\016\021\270\177\237\375YoY_\253):\245\251N\260\270\367\313\237\312\267NMJ\207Y\307^A/k\366\262Gb\255\375J%\3666\006\014_\"\275\264i\274\272\377\231B\033\333\226in\335n\267\224(\337\245\361\206\340$Q!fA\034\004\343\023\234\261\036\321 \223,<\323V\262\305h61\215\027d&\301\204\025\024A\035\254\n#4\266\223}q\326\266u\224\351n\316\255\251\300\026e\260\304Y\005\261B\357]\270\366\372\377\017\327OiJo\037uL/z\367\235.}\321p\t\304\t\221\235ll\023\235\203V\324\322\237\317\310\345O\236\022r%f\226\267+w\301\314\230c\365\355\264\334\270\342\275(\003\201:\250\005\316q>\366\344\314s!{^\343.\236\240\235\332\351\353\340\353\261\241\324\352t\373\202#\352J\256\342\314Xv1\235\210u\216\253t\201t\330J\256\366A\017,\353\rlU\030\265v6m\264\310A\303\241\025$P{\311Yes\336\370\275\351\003\230}\224S\2638/\250a1}\340\277\300\274\243\013\274\232\006\037:\257\345oE\n\tD\237>\333=\252t9%\267\217\177\221\213\342\244\"OBx\223\302\364M\003\223muB\337\234\363A\307\245`$\263\2141\301|\307n\353;\035\205\212\303I\247f\2373\307\366s\027\235\313\277)z\274Z2\234\227\352\321\243*\312e\375\0177?\3236\030\342\214C\277\354c\207\355<q1\273Qz5,\271t\363\007\226\027\227\365\371\376l\271r\245\2020\303/\244\342\302Z%qqu\266\236\275u\302,\316\263\206\252\317\220_-\345\371\356\350\317\357\306\371Y\230\353\3173\263\260\246\036\002\327n:2\\j\323\244\321\207/\031<\272\3659OY\3531oW\323\255\346\010\210H\202z?\337\251\300~\322L\234\202\222\204\321c\277\3233\352F\252\252*E\005\017\346\201\324M\371oyr\2350:\211&\030h>\241\303\220\257\365.3\374z\213Hig\255x\376\307S\25467\255\3361\306y\314\340\362*\320\254O\223\361\316s\303\265up\0054\"B\352\021\322\035\341\353;\316\007\205j\260\234\337\r\324}\2202j\rC\rc\310J\324X\261k\016\311\265\342\315\315\213\252p\273\355\232\231B\331o\033\201\274\r\330,!K)J7`\352\223\334\031\204""\303C\017\363\\\376\361vN\2156Jj(!\251\356\3578\216\263\035*\034\366\351\254\033\305\364\375\322xa!Z\201swO\032\305J4\351\363\3144@\345\\\211\206r\215\321*\014\346\363\214\2459\216K\030W\026P\0301\025y\254\242\373\214\250\233>\016q*\312 \220\225\004\202\215#24w\267\204\nt\332\373r\245\354\243\306\265\221\350\335\226\204I\221\343\217E9\242\034\3200\312\332\332\311R\245\355\255+u\273\243\216\362\341\025\032\222\260\177Rhi\001K\324\370/\261\024\266I\336\265\311\345p\000\246\022:\003*\236\215\023c4H9\034\244\212\330\327\207\341H\016\214\342\234:ao\033\260\273N\300\007d\351\227w\227\215\315\304\222\225\312\322\307\307}\010R\367\364\225\322\322\201{\224*\223\002\242\neJ:\321\231:]L\201%X\225\351\001\177\224b|\334\267\240\007\376\233\242_\014Y\260\346\271\251&\250\314\263\273\321\223\277\006m\221\223z\233m\311j^3P\231k\220qa\024\201\202\352\246\234\273\250\334b\210\276H;\343\227\343\"\241AuE\221\240\030\3308\224l\314\253\330$k\254\3713\242Hk0\315\3702\262\233\324b\301\016\354]\221'\305\351\245~\253\177\365`\014\274\346Vn\232`\230%\357;n\342\2175UV\2107/\r\013\354@\025\360\024\242\327\227~\367A\251#-EUi\300Bp\263D\234\250\224\242\3320\354R\206*\347c\277\252\245\016\037\301\220\330\344\341\266\371\\\327G\335\235Ty+\364S\242\235.U\274\021\361`YS\267\031\306\335I\261\316\036_\276\346\352\352\350\343\347\323\377\032\306#\264\2609I\343X88\371$\313\331\373\374\005\214E\001T\005\212z\276\230z~\237\307>'\277\362>\247\257\352.M\t\007?W\177l\200>*Rn6v/\232T\254\356dW\343]U\031\027\270*+\r\334\266_\363\335\035\013\236D\034\202\344\0164q\361m\017ig\2161\351iH\200db\204\363\371S\\\240\234\342\242)\345\364\000*\250\2511\227\004N\317a\230\3513\347:3\206<\303\321Q\202*\374Y\352\207P\313\332u\372\267\267_\027\217\217\030N\233x\225R\266D@\346\\\231\363\305D5\"\344\220H/\272\370\2215`iz5\007\267\177D\213p\320\233Z4\201v\346\025\256\203\346u\317e\242\003\266I%\204\030\205\375\260\224\371\251}\326p'N\337\203_\261\005U\\\033\364N\241\201\200\237\327\375;8R\022\\u\014\002\211\234&\301\363\262""\004lV\230\332c\367\031\333\312_y\223$\347\313\335J\320z\242\225\326\341U\3523\036)Am\241)\024\353\251wE\205\356\030w\302\203,;\307\220\363\251y\254\252\2423z\364x\362\222\332P\025\021\331\2446\017\241\020\317\226r\305\277W\322|\030>\357\342\220rqtGN\315/\333\261fR{S\201\210\342S\024\332F\264l\327\\\204\223\036\322\250\020\003\016`j\265\316]\257D{\343\205\315\244!\003\000.6:\347\256`\223\257\315\253A\243f\255\222\200i\215\023\242\224\231\023\224Oi\270 \222\033Uz\241\275l\035\003\222\216\2468\301\001\205\323\203\264\256\266\255!\200.\016\364\2266\010\261JC*)\311\230Z[\3044\033\3646\014\210\036P\3642W\314/&\001\264\363\037\341\263\361;\326\314K\200\325>\364\327ro0\020h\233\220\351\357\220}$\036\352\200T\303\373,B\322i\350\267\273\360 \217\202U\033G<\333\210\247\275\305\350\346\335)Y>\223\274\234?\221\313\317\345/\261+\014o\003e\337-6#sgq\213y\347\311CS\344\277Y\200\017&\326\3061\311\251\257I\361\345\311\205}\263\311\327,\253\270F#,\366A\266\211\027\312\014g\317R\223\305o\202\307\306J\216\325\356\234\316.\021)]\002\221\026AICL\033M\2149\204o\325\263u\307\324B\343\255|k\206\312Y?=\002\025e\207\360\346Fvz\274\337\017\177\322\234\217\036iK\323\003\217r\030\224\n\264)\324\267\247/y\014\001=\235\310\036\375X\220\342\333\226+V\014.\243\001\345\001L\210X\241YJ\002\270\232\200\261z\r\000\t\245 Z\nG)\020\025\004\275\\f\363\305#\177\331x\367\364\235;<\236@\351\212\005\211\240\333}\210\221\036\317\265\234\256\rf\361\215E(\214\213\231\331D\242\277\\\352\262\201B\252\n\242\245lc\224JE\207xy^\030Q\001\310\230\225\300\353\202\025\323p\325\242\214\n\3030\252\306|\014\032\231-\177\312\300\3020IH\304a\237,\256\202\305\241\305\316\251{\322\246\033\216E\227'\204-\032\230\333o\207,O\212m\215\266\333d\354\233\234\311G\t\326\rW\320\004R\224L\226\336[\271m.B\244\030_\274\242Ur\225Z\025@\336]\277\343:\341\007\025\234\375\215bT\366\037,o\212r\330\313D\363\231\321<Wl\n\303\234\205\r\325Hn${l\224R\035\035\"\313,>9b\354\226\036;N\037+\347\313\256\365?\000\337\270A\230\210D\313'\276\216{\256\372""\303u\330.\221t\036u\273\375x\003\271\036(\237\373\216\303\224C\r\374[\220H\3519; \250)\023\027l\242VtG=\335\021(\352*\310Y~\332\310\014\267\225\360\277\251\231\222:j\315\024\243\301!\347\246\t,\3402f\344\333!&\207\030\354\257=\245'>x\317*\031\253\260/\332\324\242\313\212\250'\323@z~n\345C\212\2672\r\307m\212`Jt\223\354_\213Z\271lu\016D\353\220A*4\342R\264u\245w&\256\306\037P\350\314\375\335\215S\237\231ss\036'\212\366\033i8\000\3473\356\364n\343\367\361\006\343\232MQV\364Wu\2318\372(\246rt\267[\347\235\202$Wt\"\t2\027\246u\336\256A\314|Sf\035\274b[\016+\213\354\357\355\2742\263\241\372t\350\327\223\"&Th\251y\034\251p\340{\003\346\3579p-5^F\n\000\365\035ZsO\211\031\20328\216%\241`s\334\310K\317\220\331\210R\374\2312\006E\217_\031\241\003\360\270!)\032\340\354f+\002\24600\322e2\333\325\237\230\322 \310\026\226\226e\327\235\235\301\334\305\324@\241\303\030\202\325\021%\035$\202JC\224);\215\333\203E\353\350\205\325\030O!\346<\257\274$\300:\245\353g\242g\225r\230C\243\2124\375e\"MX6:\262\343\223\356\310\317\207~\377\261\223\200\030swv\371\373\273;;\007\341.\357L6\225wJE\220[\337\224.\025/\202\272\234AeG\236\262\307VA\355\357\347\033\264<\3228X\0305\242\000\324\350\345\323\2729\254\276t\212\\X\300\237\006a\274\271A\314\272\273!\353t%\356R\263\315:\274.]M\324\244\251\327S\346\364\344.\252Y\201ov\tJ;\253\321\030\270\360k\240z\323:\373M\361(~\347h\034\340\277{|\037\334\373V\244v\202[\353\325\314\260\2519\023d\241\330\224I\330\221G\206\r\3230] )\206Za\247f(2\331\220m\215\033!\220+\034\222\306\035\2161\302R1\314\006Du\352\352\360B;\032;\230\241\201R9+$\340\373\017\270*K\036\377\302\263\177\245\230\263>\203\263#R\320#\326\325t\357@F=\332\374a\277\221\266\347\021B\0143\251\327$\203\001r\304\003=\310?)\235/\367\375_\323\355\276\251;D9\034\370\216\370\254\031\r\035jJ\002U\024W;\031:\276\201U\036$\230\025\312\272}!b\214vI\216\004\"\362\317\305*\322\221\342\0141\226\357\034\272y*\2711\220\341\207\203z%#;\330H\262\246\364E\232U\241}\\\225\033\202\037\000\346Is+7*\354\315')L\351\207""\274\331\213\221\306\2713j\371\034\246\335P\242(\224uI\235\002F\300\210\234\231^\031\264\207\027QT\321\246\220\301\245:\342\256\"RS\023\351e&\2260\342\256&F\003\034\234/V\371\306\332n\260\330N\277\032\031\2745\003\221\223`L|R.\347l\364n\304\360V\250R\026\330:\341\031\301\221\022\"\216\263\213\220\373\033\024;<\226`\311'\204\326aD\2078\346\024^:\250\223\30734\230\206\301\276f\301\324\370E\362\362\3348\017\211\360\303C&\2304\300\214\006\033\361\352Q\034U\212\224\016\262'nd\244\300\374)\0206u\361\241\021\006\374\n\240U\0260\2427c\306\347\215ns\016\020\216Q\276e\344\360vn\207v\333\342g\014\337\010\210g,\034\215\340d{.&#\326\230\340\243\326<\003m\n\257\201\2719\367U\256K9\\1\263\022\201A\204\247\365tDRr\234\200\240]-sD\245)\0309TTW\366]\201\360=\277\370Zv\331\305&\2204\256\322\340\\\306\260\364\210\r\014M\247\265\330\352\r\232[\0307\033\r\237$ez\235\334\265\316@?\270K\001~\213(u\370\024<\304\351\300\215\033!\2206\030\301\202\305'h\274\355U\233\304M\244\306 `\276\365\206\260\202D\306\010\261\035!U\022\2603g\330\2023\365n\225\3551o\276\346\232\320\227\270r\230\320\230\322\327\253\234(V\300\356\330\202\224\240\320\037j\352\004\326\201\203\023\247\231#C!\206kR%Y\327\020\276\006\226\305\200\r\025\233<\255IY\207\232\322\321\n\322Fz.%\231H\265$\270\371\322\246[\302\303\2734\022J=\010J'o\235!k\031\324\214\030<\301\tB\343hD\206=jnY$\342\202\222\245U\345\332\203\022H\220\304\004A\026\226\356\014\215\020\321\016\032$\263\005\300q\245O\274A\020\tR'.F0\331\204\201\3259h\014\314\202\r\207\247a\004\256\340\317D`5\361\000\366\243\341\017\037U)K4\364\375\237F\346.K\343\222\371\271\303\010\242.\231\244.\324\255\004\210!\020\302\004\215I\255_7\247U0U\346>\270\327*lM\243\0033\350\300\350jux\024&q\355&\270\352\372)\244\036\000\202\273\243\332\226\360-#\213\361\302\022\266\335v\222\177\037\232}\307nI\202\371`\227\r{\036\261\200\312NA\3278\020\352\025\360f\t\021hf`\221k\265\022\0010\206\223\032s\035\301S\252\322\262\201\247\013hLC\007!\352!\036B\261\344\366\271\213+%\262\325q5S\220\354i\007S""\005i\323\002\206\n\246\264&e\003\243\336\360M$7\334\247\307xG\030\033\260\260\314\336\001\320 w3\250\214\222f\033\032Q \",&\2208\035I b\021\255o9\366\360\264-\261\020\323h\217\3023d\232t\202E!Bm\031\027\023Gh*UV\344\207Ph\223\240J\273uA[4\301J\342\225\316\326\215\364.\357B\205\036\002!a\232\002\337:\2425\302\322\213v\351!f\274\266%Y1\324-\257\233e\325\335x'\027\303\311&0\025%p\215a\2545\353\010\302\373\370\315\372q\325\342\370\2519=\277\235\254\250\232\263\232\371E\261\0204\330 \255\222v\2768\255.\364]\204\352\340\224M\363*\204`ZW\3173\236\215;\200\216\320\212<rh\252l\201)\013\273\261\277M\371\352\321\262\033\355\276*\252\252\242(\250\252\252\252\252\352\344\301\227f\352\342\303\312\014\207@\t\"\252\340\030\016\230\202\206\022I%p\014\003\2334W\246+D\026\037C)z\020t*\311\006\337\013\036\224\"B\230\305\031\026c\330#\315b\214\227'iM\304\357\350\320N\234P}\2610\275\342QP\026)\211L\367\213\036\365\016\255*\214\342\361<j\365\233\361\212K}\214\253\370*\343\024\267\216\213\340!\245e\222\005\256/\202\247\032-\333\027\271qV\267\313\013\320\310\353]\004\360*\323%\335\003\316(G\257\267A#\215R9\307\032\r\365xe\220\330;\227\314A=\254li6\003A\253\\\022h<\232E\204\210\221\211\307}z\371\257\326t\220\274\227]\0067\001\277\240\236\322i\036\030\316\216\212*2\033\273Q\000\31582S\213\323\313\344\245k\0076\254\212\2771\345\202\226\247\177\202\360\342\013Z\263\227\024\2428\275\245Z\276\n\257P\324\310\231\\D[\304\020\306\014I\256)+\006\325R$H\203\006\021\025\210\310\214\021\021\021\210\200\203!\021\220EdDa\004\026#\025UQ\030p\345r\224\234(O\304\337P\331\222\034\300N\252\313};\214\327\303:\367\300u\224\010\367[X\225MR[\327::zN\301wh+3\344X\337\032 3\rp\232[\253IYS\250\033\346B*\0325\241\034`\372.\362\247\026W\226=\2676CC`6'J\242\210+HP\346\0331\233\350\240\022\317\202\315}\001&\322K\231\227zCn\335\247\244\363h\016\246B\210XU\026rze\"\014\200\304\363w\313\360\265\207\177\np\260\266\312u\242\234U\256\227R\356\346Z\266\231Ji4\225\024\335<\351\272pM\223d\251\256\333\366\316/*\302\336YO\033xZi""\307g\262\372\251L\032\033\3007\2520\351a2l\232\022-\311\010\0101\204\n9\200G\014\331\204_M\262b\363c|]P!U\241\264tiC!\204\r\215\200\257w\ry\215\211\033\r\206\303\3210\320q\033Hm\200\301\214d\021\353\006I\332\014\014\203&\tD\024\024\031\025\022\006\026\005E\010\304\014)UPI\203$\264'\233HG\257\276\324\325\331\256\265-q\257^\244\333\267k\276\333\035\322\245)\004\030s\257\213\220Lb\320D!!\266\352\330\373v;x\340\324\204\034\203\027\013\033\201l\224\314\207\254\2530WD}0\266R\014\301T\261\220xt\326*\252\033\200\324\240\rH\350)\260 i\275\334\331\014\365e*\220\250\022)\002\335\004\230bv!\205\214W\014\211\270,\320\262\256\026\222\220\344\305GVs\373\316\376^\213\341\333\207\234_\315J,b\031!\330\212\020\253$5\000W\302\312\246C&\022\331\361\322\251L\316e\242\026`imi%\244]\220\035W\207'q\246\325vVS\226\340D\301\210\224<x\200YS\213\252;\311k\262\233\220N\210X\223M\343r\024\371\372\016\237.\t#E]\325\365\027\245\217ll\315\244\r\327dvwY[F\364i\321\332\260^\303\274\215|6\332c.\341\311D\324\2052\001\035_@\016\203\2745U\260\\\257\235\243s\324\021\254\3700*(\206\322FU\2336\363\230\317\306\324\010\032\037{W\216\241\252\031\004c55\\dY\231}\021\250\005Xt\330I\004\224\260\272E\200\314\t\n\256[*\222\027\325\315\t\013\310$\276\210m\260\371\005au\350 G\001\333\tC\226B\022\234\004C\213\003\307\304\356\324\335\236>\332\304\022,DBBy\347\237\315\346\352\237j\340r\004A{\" \027\244YM5\006\230\204\300F\367\236\3004\211\0270\354\035D\363\216\n\023%Xk\361 E\364\200\275\340\034\007\0264\361\221)\031MF\240\325\335\222\315.\314\260\246\331)\222\211\220\215\003&\350\320\2216\310i(\013\004\32560:O\324\364\254\232b\223y<\000\016SB\t\020\355\246I\000\312T\207\020)\313\013\230\250*((F\007\304\"v\345S\357\267\206\031\336\010zJ\2549@MC\263Y5ie,\r\311\220\013Y\264\374\356\223\311\210\21105\214\234\n\246|\334y\272\242\030T\344\216$r\205\235z\223#\254l\034\235ZU\0215\302\311\210\212\221H\253\030H\"\301\0044\321.\265\243J\261\",\004pLeaa\202JJQ\261;\r:\311\241\306\353V]\024n\007\266\rt\312\221a\014s\205)8qyI\361""\014\262\212\306\026\263\213\300\316f\352\204\3123\357\211\005l\003rH/\301#\311\212s\330\300\252\276ox\325\355\r\261\3566\334-\331\036\257\223z5\244_\330\222\310\301\211%,\004Z&e\007C.\242mIHA\000\370\322C\211B$`&\314/\340\004'\240\310\r)\314\202zQ\334,\224\004\321\200\264e\"b\262\262\246\250\322\030\321\241\r\002\220\232\022\231E\0229\0055@\030r\033\"\310,+0\265x\215\260$\366f\334p)\r\3018\223\207\261\223\276\002\235\022\234\346\354\341\211q\2262\355\216\301\320\006\031;\246$H\363#\001\036\177{i/\026\206,\r\275\003bd\022%\"\t\317N\213\2440\335\342\267\347\246\352\201\025\264KD\007~\000\257\322\303\n,\262\265\225\014\241*\211T\310I$\256j\031#^\036G\016&o(<vc\tQ\014X\241\0105\212\370\316\r\335\0220D\020OJ\002H+\022yR+\027d\244\325\211\260\356\332w\371\241I\3661Jp\201\204\222\362\021D\033\317%P\274\032\233\035!C\250\234Jt\262d\253\030UG\026c\252\253\2232\346l\203WA\027\252 \244N\2545\025&\006\367\206\256:\333(\3719\370\324X\331\005\001\3563\014@\024\210\260\312\332\021-F\211Z`\251o\227D5\252$$\0204\010\201\2453\003\234[\340\t\004\217R\252l\340V\275\310\206$\322\\A>\000\255\344/\262PAA\202\231&\216\204\260\010\310Z\033\333c}D\204\215\346m\362\310\264K*L~\273o\262\310\254\255R\363\025\212\002\246e\003\004\244 \320\014\0109@E(\024H`\212:\2628S\260\027\010.X)0\264\353\266\320\222X\312\317\025\002\230\330\323`7\253\n\3111\266\016\0171*\352\304\225\001\234f\365\321\303\242\363~\2330.\234\311\3124H\265\020'\326\236\256\206\200\357\206\240t\"\326<h48\261\013\265\351\314\256\3476\236\031{\030jR\244\237\254\314\305\247'\302\026\254\210\212\203\t\204\241'\255\020A\014\005\240\330\026\030\306H\223[\203\211\212X\2547]\242Y\275\252m6\273\030W\223U\272\302\342\245\310a\225+\305\206\362\374\207\272\336_\277\246\213Q}]\3730\004\267\257\215|\035\236\365T\332\325w\245x\265UU\355j\256\252\325^6\252\252\252\352\266\360|\250\2755\307\207.\316o+\352i#\321K\023\257\034\006\247\227=V$\317\tv\001\360.\\^\034\026yh\226\244\225\333i\266\372\2534>wl\310t\306\351\311\265\221\271\352\330\215\315""\033\205Z8\204\213t\215:\0255\020Gq\000\022c\342\300_\244\373Hm\010`\347\"\324\202\306\221t\365)]A?A\251\273\242\031\031\345l\210g\257$f\231\246D\031\243?\026x\256j\251\014\263<\210\251\312\210,\347\266\274\3779\372\375!\322\224\371*4\236\201\327\260u\205\032\306\000\300\030$\256\233\253\216c\n\252\304+$\013\013c\022\304m\"S\277k\240\331\223\313\224\000\254\3534\225\235j\241\026\210\3632m_\003\212Y\n0A(@U\323\212\260\277d\335\220\3348FNp\021\202qN\324\233\t4\230a+\261\224\303 \222J!\031e3k\014\311a\260\306N\2244\223\000H\010\222\032C\200\206\354\233\017\001$\250U\022\214Y\270n\010\232\304\351@:\035\377\221\234\362\037\t\035\274B\220l\242\330\304-\263,\320\213\343@\322\233M\211,H\231\306\362Nw\261\020\342[\016\346R\010\021\202qQ8w\323\203S}\351\300;\321f6$\330K^\370d\020\332C\357J\245.\337\234\201\270\037\\\2633\241\266\2366\257[:\214\200#\000\021\214\357\307\207\217\206\372/t\257%\r\332I!\032&i\242\341\250\246|\306|\321\233;\226\226N\"\340m\0200d\014p\245)\003\207)4\260U)\325)E\013ugF\220[\374\361x\3264\304\3752\r\310L{\332<\235\375\214$]\260\234VlJ\n\246\007\300\312\034XM\n\310e\333\t_\013\002^a@\235\256`\021\2402\330g\312i\3449=\007q\336\217B\362\362\257\207\3328 \030`\266\2172\001\241\261q\200\231M\244\231\271\"\261\223 \203\340\007SHe>\260(\257\247\214W=\342\206H\000\367$\201\200\030\207\322\343 \027\261\021\326\301\260\341i\353AQ\315\251\241\265\361\355\347\315oX\036F\352\205+\230\206\306\204A\224\202W+\rb[\237\305\310\272\216\243\250\352\274F\360b6m\323\361r\210\240\2123\203\002\272\345$\247\341\333\254\240\313\232)`H\204\251^\274\313\034q;\016\317a\265\010\275\211s\341\303\025\314b\226\257\213V\255\000nZPi\026\236\374\373_\233Ny\301\211\024\t\017\345 \026\344\211\010\233=\314\030\3066\333\005\253\2271\211\211\216'\035\374\375!\357x\354\033\030Fg\247I\026\002n\305\231K\212bGm\t\202\000f\225\322\027\235\275\202\021f8\256m\273V\275k\271%\324$\375\000\024\016`\244\022c#\307\275/ $\301h\"$\351\n7\312\322\312K\200\371\263y\216\367t\301w\333\321\201\304\336Y\004O""\262p\225\356|h*\036\273[\to\272\264:\023]\002\372\007\005\205\035\332dB(\231\273\026\311\227\221\347g\322\000\303\375,\365}\035~\177\355\242F\200\000\221\321eS\355\331\016\300\354\371a\365\277\270\377p\236\374\372Qd\372\314\261\210\310\241\367\352\010[\237\035>:\023\001I\200\3033\\\203=\377\300\033\3456\222\201\264\304\n!M\023\334\213\326\031\262Q\2774p\214\250\033\024\334\202\250\242\374\325\003\367\3418\324\306\247p\224g\254\323\353\337\201\3306\273:HT8'\334R\177C\367\272=*\344Mf\2022D{\240\302G\331\366\21600\023[\366l%\365\260\310@\340p2 \272\2610\020\030#\314\364W\352\004?Hz\010P\255\0373\302G\367~\230\340%\255\261\200\352\235N/\310\354=\024QA\310\252\252u\334\355\372\310\344\337Y\257\231 >T\354\225\317y\260\250\374v?%\007\031\036G$~s \363)\025TCoc\340U\031\215\245A\302\205e\034\247\356\364s\221\221R\005f\215\226iG\375\232[\331\216\315D?\264=j\210\360_\223\236\232\017\214XI\006\320\201$\ty\000\310\222\370\333'\316\237\246\213\270\0064\0070\202\213\370\271\315gP\367\265\261\256S\017{\234\274=\377\360=\311\362\217\373O\365\250\225\206\262\300mr\316/\355\223mD\326\332F;\216F\371\307\351q\005DmMn\320\323\270\025\023\364^\341\0308T\025QV'\376\216\270\020G\377\251BBUC\243i\354\220\214\254D\217\323\306k\377\234\016\327\202\375z\357\025^\2422\243\304\371\252mr\003\334\342\000m6\324O\243\277\263\307\346\3650\273\221Gn\0226\316\334\\\221\203\205C\340n\375\361\364M\232\216Qm6\225\0165\017\340]\321M\235\246\366=\341\341E\200@ \216j\276\337h0\335\355\347m\246\354\020r\202\246\353\266\367J\260\201\"\247\342G\342Mz\035\335\331\211\263\267\352\334\021\351\267\270\311\376,Q\312\016z=&#\333\213?yW\312\300o\004^i@\177/;\351\236\264(\021\007\321\275\006\360\275x~Q\363\374\257\237\3312\201\257/\316c\247M\302\212\310n/\324\323dG\230\242myu\373\350\375\2107uv\201\343\0036\334\\D{\003\2503E\231\246\263~\364\017 \371=/\231\344\017\225^N\020<\366\021\363\300B\304(\301\271\215\245\225e\027\266\251\333T\362\251\005rkv\241\333\034\364\204\005_.E\221Pe\264k:\243\365\032\261\215%bo5_\224""\027\327\371>\357\362z\304\367=\353\017\301\237\355I\305\017w\302p\303\230\216\300_\252\321\2359Bu{\217\261\237\306\325r\303C\236\357\311\366\376\214\003\370ss\254\243\301[IQ \366g\256\200\344\360\350\252\036?kX\316\3744C\307\004\202i\006\243\210i\200K1\351#\332d\375\355\026`\315\024\320V\321eT\373T5!\367{&H\2235\030&\223\033JC\221\242\302h\033\354\215\367A\332J\202\351?\251\027\242,\254GM\244EXfo\312\332l\2433\330o\300\373l\333hb|\325\321~_\031K_g\330\366\276\300}/\2714C?\252\357\247\351\022<\361)*\220\220\033:PM\025\360\252\031\35439M7~\253\240C\177;\207\211A\275\0032\226},\242\233:\260\007\250<\262\312\326Rb\276\316\256\234\324\324\033J\241\246o\307\202\021W, \344\325z\274\203\2444WU~\261\273\303\251\026U\220\355kK\254\367\346Y\r/\005\235;\375K\331b-\236KI\340 \362t\232\246\254\331\311J\316\236{\315\006\320\206n\036~fs:\355\254#\221t\007\232\265\263p\277\034\376\033\0340\214t\\\345\225b\256\333\303C3=\263\351+\235`\332\005\213E\260\363\262\302\302\326\374<\215\022\3636.A\303\203\345~U\3626\355\017#\240\250\364\260\361G\013`p\277i\\\256\271\327y\250\366\202x\361\273\225\3542\330U\260f\263\310*/\004\221\035\"\333\363\374cy\266\362\326\005Xb\354\376u]\226\313\226\361t\262q\261\333-\231\331\031#|J\253\347~VI\225q\263L\255VH\273q\274\320\311/r\262\032\261X6^=j\253\r\307\371\241\222\265~\372\257\254\3775x\276E\257\336\313\347U\257\335hp\275\320\315\260(A\316\363\261\r{\035\374\032\365\314&\030;\244\217\341\277*\327T\330/\234\367.aW2\275o_\236\377RO?34\314\034\271t\374\331UWV\253\214\267\027\t\221\366.7[\224\277GU\316Q{;X\227'\351\325c\0133\245\334\304\361p\230\213\211\206\235\014\236w\003\206\355\372\232\244\233\356\326r\327V^\315\313\363\344\200\315\007,\214C\273\336UV\367\272\311MJw\350S!\321\273k|\t\201\335,w\214\357w\333=\333\276\373\375=a\322\363\334\374\260\366\244C\250UTF0\362\372\217\306\223\367X\250((\304\202,b\214X\241\376R\023\264>zz\005DT\350.\337\352\2068o\241\337\326LB\353y-\300\271\243O\322l\211\236\264\326\235\262\372u\252)\004'a\304\371\254\361X\201#Q""\021\n]\000\356\0206\240\027[\200Rb\025\024\375.A\264e\000\321<\322(\250e\336x\325\025wz]\266E'\016\312\323\264\366a)<r\t\263\266\320ok\205\017\304\027\321\205\3718\317\224E4\246H\350\2177\340\017\027\277\035Q\323\365\350\370\213\273\302[\360fS\272_v\206T\313q\260\375\275\356\2174\255\205\216\325 j\205\032\261\342\352}\263\316\024\201\275\\\336\320\206\350\334\251\3219\310\227\373kf\215W\353\313\024`mW#\226\030U\004\272zH\267\033\020X\261v\250\350n\256\233w__\251\334\361\305\021|q\3179x\205e\270\226\r*lI\2145\001\261\227\006%/1(\332\267\333;\245,n<\260\315!g{\213f\004\016\226\210\245\362\330\247\016\0218\301B@\231\274\2341\200\033\213c6+!a\006-\276\363a\n\006\367\2128\010\030\250-\224\020h\301\320\253\320'A\345\250\354\340\356\252\262\260p\367[\225s\267\337m\307V.h\351\266.'\312O\216M\0049\312j\013\231%\013\017\n \222\021\n\215R`\226\201d\004 \254\r\234\312\313\304\242\245N\341\031f\000\267[\213}^\223\033\2560j#\303\255\021\312\013\257\235\275\326A\242\001\027rkd\013;$\226\221\021\310\006S=\013Z\264I:\243\264\361 oJ\336P\261v^al\t\256\221\253\006\325h\351\251\276n\250~\036G\216)x\356\200|\224\t\007-?\031 .\207\214\373Z\036\321\323G\304!F{.\337\230:\014]\024/;\354\232\321\236\210Z\315w\336Z\243\341\333\325\236\\a\272\035\251d\033>\232q\210V\334\270\351\002\005c\307\216\301\305\247\000s\253\265$\026\233u\t\330\374\037\273\255k\213\340\356\355l\323\316\310\305\207\356\355[\035\373\355\3350\345\\\314\324|\311\361\2267\317\320\344\320\2223\232l\313o\276\307\377\027rE8P\220\355\314\330[";
    PyObject *data = __Pyx_DecompressString(cstring, 9696, 2);
    if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
    const char* const bytes = __Pyx_PyBytes_AsString(data);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
    #endif
    #elif (CYTHON_COMPRESS_STRINGS) != 0 /* compression: zlib (10288 bytes) */
const char* const cstring = "x\332\255{\313[\023Y\372\277\314\240M+\332\240\264\332\332j\242\242\340\005\033\265\275v\367L\010\0012B\022\222\240\322\216]O\221\024\2206$!UA\350\236\236_/YfY\313,\263\3142\313,Y\3262K\376\204\376\023~\237\367=\247*\225T\205vf\276>Runu.\357\375r\022\312\347\003\372\246Z\322\312z`]\315\345\265lX\315\347\325\265\274\366\356\335L\276\270v/\220+\030\362\241\033\345{\201\365|QEy>\277W\332\214\354\032Z\301\320\357\005\212k?k\031\343\375\275\300Z\261\230\177\337\231!\\\314\027\313\213\271\202\346|\367\t/g\262X\261\240\375\347\223\035\371\271\330a\377AsjF\223\007\355\234i\317\320t\367\230\242\003\021~8\003Q\363\037\366\037\214\230\310\271'\237\374\223\321\330\250g\204\323IU\211!\327\240\204\212)\302\305\255RQ\317\031\332R1\253\365\207\306\377\216\263\377\375\233~\243\272\001\301\310\355\333{\344\247=$\333\347#\2064-\022\370\027\367\314\3462\306;\246\223\225B\256X\020s\n\332Ji\333\025\255\220\321\336\245+%|\331Ah\317\310\367\364\3173\035\037\373=\321\341T\206\326SJj^3\014M\021\265\r\315P\n\352\226\246\344\262\023\223\336Q:7\255\323cS\325\225\274\272W\254\030\312\0061\253\222\311\253\272.G\3204]\037\312\311\250]\216\346^L\000\311\320\247S\337\331p\365\344\325\302FE\335\320\224uM5*eM1\324\r\275\253\237\367\262\246\352Z\036L\354\355q\355\322\335Y,~\250\224d\247\2327\264rA\3059]#\364L9Wr\255\337\263\256A\370\263\007\271\373xF\202\222\r\010`F\366uZ\005\000z\032y\250\247\315\205\000Wsa\243\247\005P\233\353\301\017\363\"h#W\360t\351\2255\335\310\031\025\352v\372\266TcS\311\252\206\312-9]BG#f\317jY\321\317R\235\316CB=`\024\003\305\222Vx\301Ra*[V?\212\2170\200\032zQ\213m\273zx\276L\261\240\033*\203\250\253]b\006\244\265\265\226\337\363\357\315\031j>\227!\010\224\313\340.\234\305\177\334\007`7\347]\272\253S\367\3575\212%E\315d \355\024\3250\324\314\346\226\326o\257;j9\207\203x&\332\312\025\350\224\005\354\020 (\356h\345\274Z\232\230\214\026J\025#P\250l\005\212\353\001\340\203\tJ\237\210\026vp\250,qu\006R\224d1v\267\230\323\r\241j\336s1\236\366V\026\211\246\354\226%\254\314\312\364""\265\330\225\273\375\025N\034)\030\345=\2731\006\316w5\010\001\343*v)\217\367\020b\375\373\336\213)\204r\343\242\220<\\\314\331\373 \261\347\024\244\254Z\002P~\035\327\177\233\244J\254hh\001cS5\002\341=c\263X\010\344\364@\026\014\276\246\225\301\246\371=\006K\006\\K\203\n\201D$q\377\361\263\307\001\265\220\r\2245\222\264:\201T\212&\002\360Z%\2277r\205\200\261W\322\364\251@t=\000>\010\0244A\303%\214s\177`lj\205\200\256\031T\010\334V\013\205\242\241\022y)\370\034\330\270\035\310\346\230\340v4\372zN\315\353\332\224\000c4\233(kYm\035\242(\213\203\341\304\t\232\2339\003tn\210\017\272\231%\221\313|\200\354\332`B0\312\225\214\021\330\002\325\223\355\244W2\233\001\025o-\277>\245l\256\331\204_X/\006\266*\272\021X\323\002\332n\t\\\2203\000\2252\351\010\335\300\322\037s\306f\340\357j\305(*%\232^\233H\227+\332\344\177\276\224-D\376\253\345\222*z\313\322Z\220x\026m\321-\310T\331\222\322\214\211_\247\246\246~\233D\211\211\204[\210\026R\220S\220\177\264caF\272h\323E\344\t\265l\333Ab\000\023\235\234^*?Y\303\313]\265\251\257\233\230\355V\241ZY\201&\260\326\373\251\277\335\013\274\010\334\236T\263Y\0054\241es:q\255V\240\247{\332\215L\016\"s7\000YK\240.C\211h\201u\250y\251\305\002j\271\254\356\0052jI\005(\367\260&\200\242f\261\264\234 '\305\200\255\327\002P1\201\333v\253-4\355:\3110\301\"%\320\245\312\033\023\233\312\026\212h]W+y#\240( \315JFS\224@\266\302\204X(\026\356\203\221vrj\036\275\330s\316P\224\311@\360{[.m\224\325\322&\206e!\231t\r\222$\237\373\005\322\337)*\204xR\177h+g\036T6\325\362\372Z\345\227_\036(k\260\362\247J\273\271\336\346\312\372\272V\366\351 v\360if\233\303\247\2318\310\333l\227\246J{\273=][j\311\347\003V\271>\355e&R\237\016\347\344\276}~S\351L\302\334a\330f\336wB\252\353\305J9\243\375p/P\321\265@\350Y(\034\216\304\322\312L(\025Q\026\"\321\371\205t\350m4%\213\334:\277\270\232X\230\231O\206\036=\234\211\247\361?\035_R\026#sv1\311#\001y\372\233r\360\235a\031\252(\262\025\333aQ\324\335\276^.n)\353\3401\000\305\330\234a<\211g8_!h,j;Z^\266\000\374`\3514\204\251h\230""\313\303\002\022\305\224\r!\337\266b\031:Q4\372\354\317n\367\356P\364\020\337\221V,\025\2016\335\325\010x\272j\025c\375\231\254f\362\232Z&\365\313\"\310n,\203\013\345\316\2476 \302t\254\270A\232])\225a\317\224\215\234f\217-k\330\214,;\310w\352n\373\224\340Wd[\320\325\275\205\311\271\267R\310\270\232\245\335\350\372&\034JHL\207\027B\311P8\035I\246\302\321Ye.\032\233\235\213\203,b\241\245Hx1\022J\206\343\213\361\2442\263\222\214\211\322l|v>\022\216/%\3421\220O8\236Xe2\260}\014\266\r\034'\327)x\241\357\356\362 \200;S\260\206\270 \210\205=>\252A\352\243<\033J\276\212\304\350\t\022\016\277\232O\306Wb\263\263\221\271\320\312bZ\276\224d$\261\030\nG\226\210\316\303\361\331H\"\036\215Qg4\026\301\320\305\350R4\035\231UR+3\312\\<\271\264\262\030R\226\2421\t\227\331H*\234\214&\322\321x\014\305\350|,\222\264\337\312Jr\021e\032\222VB\351x\202\013\321\030\277\342+\242=\376\232?X\231\301\306\322\321X\364\307\310ltn.\222\214\304\302(\245\260\261U%\236\210$\361}\322\275l\\\211\305i\262T$\231\006\260\323\264\303p4\t\\\314&\343\t%\035\232Y\214\3409O\316\326,\244\330\034P\255;\005/\234\335]\0368w:;\366A\247\255cO\263\031\336\351 \232\312\344\213\272`^\246\266\236\316\312Z.\003k\326\247\213\324\213\177\317\026\214U\377\236\355\212\212\375\031\235)#\361t\344mxq%\005\354D\336\246A\007\221\344\334b\010\300\002f\025\257dc\222\236\013-E\027W\271\010\264\310\032\321>&Qf#\2618\260\300\330\260\321\223J\257\002\326\251\205\350\034a\342M\314w\360<8\te\337\276~\237\366\254\320;EleI\322\205\337NV\022>\003\373O\341\367\321\237\254\237\\!\022[\210\206_\305\"\251\324\334\312\342\"\213\003\362\323\330W\363\320\230l\365\220\327\247\004\000\304\030\026\221\256\"TnY8\275}\\\375#\034\375~n\376\321N\376\021\216\374\237\271\361N?\035\351H\217\276\277?\337\337\233\377S\367\230\007\344\241\357y}1SY\203\354\247\370\215X\211\333\330cd\277\242\"\274=\235<\003W\200\215\253\304tN\301\007\325\256./\276\235N\211P\247N\\LV\224\"O`\350\314\307>\003v\216\030 \341\243\250\331\035\225\316\326o\004\223V\277\316\235?\375|G)""\226s\033\360\243\275\003\nE\370\327j^\016\364\366w`\334=\302\037\220\375`\350\002\237K0\367T\2051\\\322\n\216\377\317\360\323:\270\364\013\210\364\264\373\217f}\313\304\334\335\356@\336\323.\000\326\323\3543\303N\237\031vzg\350\t\264\371Gq\216\212\341|Z\004\347\210\020\315Q\321\233O\216\335\034\025\271\371\204\270Mg\210F\021\010\307=\356\327.hb\035\266\330\232\232\371\320;\312!\316\336\216\335\376]{>]]L\340\264\352\306\036D\032<\304J\007[;l\r\027\313Y]\201\270\311m\024\374z\nd\245\223\235\233u\367\272\331H\264wHS\3703\256V\230\005\2566\026\233\256/\365\276;\321\217\334I\027C{[t\366\217R\374T\330\nI\313\nL\221yY$\253\360\255(\222\016M\301\233J,D\250\340\312=q\231\035\030.E\013\353E\247\340\225\034\356.\217\370\020\001\nI\016]\225>\023\271\272=\223\3015\230U\026\311\200Z\230\211sJ\301~{'s\365x\347\211\302\334\216-\304\223\321\037a}\205\026\225P*\3146\233\253)\034JF`5\317\315\245\"iOs2\232\212x\033W\334S\206\027\243\211D46/\346N\373\365\220I\337\335%Z\2727\262\010\357\200L\242\205\024>%\227\207\n\013+\021z-\256\300N\212\247\242\351U\252\245B\351\025\030Y0\231\026\340\177\317\300\377\216\224\313\305r4\366:\264\030\235\225/\005\317\225H\0243G\303Q\250\332Be\013/B\366?R\361\030\2140\270\007\312\\\204\246b\273^\266\010\347\203\033\242\330b*\"_\344{\000#<\2341\023\211\361\313\345\004-\306\337\300Ga\357\206m`>\020;\017\330\274\273S\332}\024\336Z\n\205\025\307\320[\n\305V\346`\013b\211\344\022\034\254\245Pz\001~\177\010G\232_\212\303=\201\321\255t\374F\247\311\241m\270R\351hbquI-\341\177\024v\222|y\311\246\323\341\241\032t\2419S,\355\331e\357\267}\277\203\301\244\301m\310s\245R\312b\000\025\331A\347\002\246\2457\244\r\275r\206\266\245S\341\203\266\307\357\316',\321t\202\213\022\235\345\327b\010\304d\227#\363\241\360*\000\000\267\222|?\002v,\256\204f_\207\340\350\245P$7\205\300\204\242K\016\240\266\000g\024\020EI\342<\274\030O\001\346hH\020\215\201\256hX\002t\016\264\307\242\344\301*I\254\315_\303\205\001\247t\374A\n\007\213xe\254hD\267\360&\375\243e\343pa\303 \353\024<P\031""\272wG\360e9!\254\352\356\032K\244xz\221U1\013\2130\231\303\"\022\032\226:\270'.\332S\225S\364\346\007:\231\201\236\034\001\252\254w\364\264\272\341\312\024x\243\335\3614\246\n\355\346t\271\202\254\221X\344\n\203#\312[\314h\344\213\317\204\222$\244\223!G\370\330\255\335\356\216\335\212\227\000\034\270\204\332\200\243Dh6\021J\245\322\013`\263\371\005\240$\031\t\307\347\331\265O\000\311@ZZ\262-\2418\221\214\300\207\177\r\326\223\321\210(P\235$t\245\022\311\370\354J\030\016]h\016+\307mo?\035J\277\211D\026\355\336\225\230\335\037\216\307\302\241\2647\351\315-\254C\262\\d;\264S\362rLW\237\207q\\\275\272\343o\221\005\353\333\3211p{\273+\272\001%\335\355\361\371\214\313m\331\241\252\236\0162\370\240\2247\312j6G\346\224\317\220\022\214\255L>W\352\327\267Q.V\372v\032e\265\240\303\301\334\362\035P\3217\305\324}\017\330\031BV$\374\273\274\326wX\377\215P\357\221;\241\343\223\225u\004\030\364\217\232V\352\035\001\013PI\354\355\342\217bDJ\0146~R[OB|\207Y\345\315'#\021\305\016\341\206\240Y\225D$I\212\321\031\322\025\035p3\202=\242\233\221\354\326W\221dL\t\315A\330\311U\272:f\"s\361d\244\247\247\233\367\354\326\256%#s\213\221p:\031Y\212\373\362R2\222\200\362\204=\020\212\306\224\371\350lJd|(\200\324)y9\241\253\317\303\t\256^\326\030\256z\307\001\363mT\210\326\325\\\336\325Y&\207\275\334\325\200\005]u\275\327\035\353Jd\211\212\010e\273\262Y\256b\277\323\331\235}\216'\272]\347\223\r\305\302zn\243R\226+0\305\271\212\375\026\263;\373,&\272]\213\271\032|%\206\356\036\346\262\350\3734w\303]t\273\001o\2678\220\027\r\375\344U\357\230n\364h%xW@\020Y{\3762<\025ZJ\020e\203Q\240\022\"\260\334\204b\220\234\006\363.\204n\212\014\312\216\376\375\021\021K^\014%R\302\261x\025y\023\231U\234h\235\313t\005\273\364\366\272Y)\005\303%\255\300\200\000\333p\221\215\327T|.-\214\374T\"\004\265#\030X\354'\225\014\343?\307\270\351\2153\342\tS\205_\230:\225\206\325i\313\222~a\323\256A\275\315\276\221H\321\325U\301\016\372DC;\375\235\026\210\203\360\202\322waw7\255\022\232!\331\302k\365v\315D`1{\273z\226\213""\276\212\220\001'\274\227N\235l.\262\323\004n=\266x\247+\262\244\274\265\277\356n\354\236\002M\253~\343V{\306\271\016\353\264\321\226\227Bo)\333\221ZIP\276\207\233m(\273\232z6J\337\270:\0058\321\252\274\211\302/p\026\360\033\324=o\327){\232\305\376\273\032W\375\307\256z\306:\210\360iS\302I\260bd\326\276\317\346\344\006%\367j\006\271\037\362\345\225m\235\016\217\\C\027\376;\036\212({?\357\363i\307C\341\212.'\023n\007\025\325lV\276\024\316\347S\205\245%\027\260$\275\263Z\276\323\233\315\255\333A\337\3164\331\234\236Q\313<\025d\231V\326E\334\3135\"W\330\321\312\274:v$*\232\030\257\213d\262]\246\353\265\242V\326(WC%\331\240\357m\311x\221\357&d\211\002D\260\353\305-\013\266\333E\221\357&\271\213\200\227\253\352\003\326\256N/x]\335\024MR\341\030H0\271z>\220\351\244\341\270\370*W\330pw\225r\005E\315\347\361\241\246SlI^i\360\014\241y\363\305\014G\203|;\375\277\325\373\356I\3579\271D\000?\023y\265\320)\365\003\212\354\353\003\023\356\325v\265L\305\320H7\221L\240\204>\2759\215K6`\204|\376\364j\"\316\376|4,\023g\356\026'\177\306\016\347J,\274\010\277(:\027\215\314\256\220A\330\361\265\234\000\213\323\336m\3619\315n=\305\215,\200\204\000\350\324\211\363\245'\214\327\362\n\271\344\0357i&\031\t\275\352\365\232V\022\to4\204\342I$\235\334\235R\020\256\244\330\243f\331\326\223]vw\365\006]\370\356\316\353P2\312\361\240\224\002eM\246k\364\355k\034?\316)c\0341:\267JZ\223\0243i\211\330\274sl\333\226v\032\334\361\260\236F\332}o\323J\314iq`\356\264\330!\2557\241d,2\373\206S\242o\242\263\351\2057oR\022\273Tr\260\3726\236|+3\247*\004P\367=\010G\"\311\233\020\366\025\010\031\330W\363\245M\325\311\215\341\273J\301\350\244\312\024\245s\275\215*\345\r]\3253l\247\331\201{\373\255\360\245%U\337+drEH<8R\006\034C\2359\007\\%B\315\\\343\333O\\\332Rw]\355\024S\347\332\232\235G\240\\\033\335\025\242?\276|\312\205\274V\33006\327h`\261\230\027\227\206\370Na&\343J\363e\244a\232\221\341\342\214m\017:\005\245d\2243\224\272\324\310\355+d3\212\374UB\206s|\031\031\227g1\336}U\344\010;8\303\373\306I\000\352""\214&\276/B\214\323\203\234\275L^\357 \207?\021\0367C^\024\031>\177\222\207\225\213\331\306\277\235b\241weK\313\312#\2138\371\303l\321\230~,\364\236\375\2643*\312\246\226\333\3304\304\352\234\306\362dt3\240\232L\245\274\243\245\213\204\202,\026+\253\006f\266\221*e\246]\221:\256s\335\254S\232\372\216\344o^\377a\3125\313\021\235\235\246\217e\265\004\324d5I~\"+`g\002\240\307\340:{\265\231\274\211Y,H\275\212!\305\214\302\327\311\230\234\270@n\270\336q\t\275\316\241O\022\257se\263S\242vB-\355\257\220ue\207\004\275\202n\312984\005\340\207\376\350\256\252\224\355\222\036\351:\033\375\361\272\2404\312w\3339oF\220\254\350t\021\213\350`=W\326\215u\322\314|\275\220\277q\250y\235]\320\356\213[\366\315\234u]lu\275BjSH\002\002\203\242\270\236%\006\014=\014\260\231\276\261\241\025\264\335R\031D\330\255\245=\311\376\336\344\246\177\336\337'\333\351s\013\300\223\373\364I{\372d<\275\311\316\356<g\317]\031\237\214\2477\331\331\367.\202O\002\324\377f\302\021\227\022<\311\322>y\322?M\221\372\247@\373$F?%'\332'\035zt&\324'\331\371\247\371O\277\324\247\177\326\323?\341iKGO\316\263\337\365\216\2364\250\357E\017\337\264h\337\214\250O2T!\251-\344\203\262\221\313\212\r\365\346F}o\222\364\344J\371\266-_\266\335(C\306\364\273\231\270\211\023\366\376\224\244gb\357\017H\272~;\322\365\263\221~\277\350\361\377%I\237\037\221t\375~dsMq\253wT\035}\250\030\356\232\216\212#\300Q\266\245\037\2126\032]E9\227\275\031\024\005\026\235\202\034 \236\235\254\360&\014#\241\003s\271\314\372\032\376\214\\V+\346\262F)\267\265\301\252\230n>\347\310\300\247\213\3309\272X\355\361\314\204#FN\242c\3718\036#\336\035\251|\324\315 \227Cg;s\035G\316\313\351\224\004\223\272\205\213\305\365u\036\247m\351?\003~\037z<&\342y\372\023\304N%\235\037\302p\243D\032\375u4\256\024\367\037>\222\325GP\266!\355@\234u\222ScP\271\261\221\307\207Z\231|\033\220\214\301\224h\177BD)vNd\220.21l\250\245\316\265()&y\322-\005@\202\224aP\221\311\3501_\034;\322\276QK\342AeR\345\342f1\253;\326%Z\212\331J\236\337d\324\340].*R=+\370\307&\026?\245\261U""\320>\362]s\000\304 \016\204\372\266\307S\221\021\312%f\317\342\332\317\n\035D\374\252O`\245\250\027\273\0231RA\000\016>\035`B\237VpcO+\361\025s\264\323.\031\320=\255\377 \233\363\273\033]\353R\335\275b_K\3243\302\261\007\364>]\025\327^\334=l\311\370\366t\226b\273\202o\237\221qR\354hY\255\243|\273[]b\253\323A\247\353\222g\335].\221\326\335\341\226j\235\036\207\352\371\024.\313\3005D\252}gC\035\325\337\031$\005U\227\241\321=\215\320O.\205&\273\205\202f\350\n\363\301\335\326mAx{\274\242\305;FZ\014};to\217\2575\341\035f\033\024\356\036_\233\302\036@x Eb\327\275\"\225\245\251\2709O\372\323\206e\247E\000\257\010\243\274\\\342\344@V<\371\207)\"M\301\364\345\312X\370$/D\023\353vWQ)\331\224\313\302\213\314\356|n\r\276A\2370\225'4\345\023\216*\025K6I\342mH\334K\256P\240\375\261\001\220\034\376\225\366v\3456\270\270#\010F\331\016\013\007N\241\313\331y!\340\200\354l\347W?\236\000\225\323\240\355R\261\353\202\252\210(\212\204M\231\323+\342\351\374\342\007\325<\004&\333&\370\270TV\024\217f\341\354\016\0368_\231\n\340\232\002L\242\002\353I]\236\221\245\205,3<]t\257\345\311\217\311:?\274\360\376\360\210\223\2560\277\272\374\025\237\353\360\335\371s\277\244\271\347\232|\277T\324\221)\365>\367j\373\334\246\365d\262\372]\252\365\271J\333\357\002m\237k\263\335\t\376~?]\351\375A@\277\354\177\357o[z\177.\300\001O\251f\375\257\351z.\rxo\n\370_\017\350w'\340\250\213\000>\331\377>)\177\337_7\364K\376\373\377\224\247\317=\000j\346\237\237\372\371\033}\357=v_p\354s\241\271{\020jR\250\020c\270B\317\212O\030\232\005\251\014\212\211\247N|\206\325\363\302\262\023?R\303Ge\203\037\236\250\207h\025F\020\315\235\313Hs\314(\223[\203\363\211\037\273U\326\326\325\255\\~\317\026j\302\374\025O\226o\345\"\326\321\235\237B\353\225\014\327\373g2\204\344\343\270\240(\222\316\000\002H\005\010iO\3300 \307\025\205\306\320s\327\240?\271uc\263\\\374(~\275$~\331[\311\350\217\345o\024\235\237\360M9?+\224\267\364\345\352\362\t\221\304\353:\005\245\264\303F\250\270\246&\236\036\311h\253D\373-Lt\007\207\035$C\0042""\260\275\277\025\350 \034rZ\347\261\014hX\363\005\372#\230\177\204\223\263)\003k\364\322ww\225503\372v\245p\330\333\263[\366d\313\357\003\207gn\324\276\267\276\t\267\246\333\177=\271\177\323:s\247\036\254\377\320\034\375}\240}\343\233\306Ps\240=xj\377\261\365\305xm\271\246Z\203\3374\006\3768q\354\363\263\325s\325Pu\271=t\321\374\314\334A\327F=Y\337n\017\235\332\377\301<g\206\332\303\247\333C\237\267\207G\252\307\253+f\320\234>\034\271b.\233Z\355\333\372@\375|}\273\361\327\306\303\306r{\370~}\271\236m\334m*\007\241C\014\036\250\216Z\203\027\315\201\366\320-\353\326\313\346ts\2665@s>\336\327\253\301\366\360\271\352t{\350\2229Y\233\256\205\254\301\311\372\305\306\350\341\320Y\353\354\335\372t}\266q\252\371\274\025jaK_\354\177\254n\325\246\255\301\351\306h{\350\006F\317\326O6\306\033\274=\234D\014\037\300\036\255A\224\3718\326\350\303F\260\361\270\361k+\330\232>\304\024\333\325\023U\265\252\233\327\315\371\332\343Z\245\036i\2146\202\200I\360z{\362N\373\326\355\366\355\211\366$- \240C\253\304p\220\177\036\020\340nN7.6\355\256[5\265\266m\r\336\261\356\340D\330\235\365\305\275z\250\236n\\n\342\020\327k\023\365`{\350\232u\rs5n4\3364C\315w\007\003\207C\247\254S\223\365\321\372\315z\276\031\244\235\236\006\374\254\253Su\025P\036\276h\016\325\216\327\226\031FG\327\316U_\232\037\352\243\004\024\354\341+\023\245s\3269Z\353fC%x<\257\206\253\230\361l\365\236\251\232\200\320\271\352s3d.\343\020\343\017\255\2073\255\211\203\240<\307\355\332v\375\263:f\t\324\006\332\227\0376&\233\000\024\240F\263<\253>5\261\315/\253\377\254]\250\017t\025V\315\215\3322\025~4?\326TW\341kZ\207\3411\001\242\030\263\356\377\2755t0`\r^\265\256\362\254g\253\223\346\264\3655H\304\232\n\265F[7[y+\231\262\006\0376&\000\022\372N\034\343C\213@>~\213\220r\207\276\354\332.\272\036\376\255\271\333\332\226\315\217\033\241\306\2623~\034\325\336\343=n,\266N\036\210\025\236\202h\206G\254\021\260H\3438!\207\310\0160\034\266\206\2035\274\257\327\202\240\216\337\032K\255\013\007'\261;L,\216!'}\000R\037@c\200\276\242&\007""\013g\253\301\352\343\352/4\211\207(/\231\301\316\200/\211\353\276\265\276\235k\251\207C\340\276\306X\343]\353xk\271\2452R1\371\235o\033o\233\313\335l*\232\206\206\367\303\373@*\261\364\343\372\257\326\213\330\201z\260-\210\341\330%s\242\006`]4\377j>\245\302e\3532\261\343Fc\265\251\266\007\203V\220Au88\006F\177\007\224\017\016\355\017\354\177\271\217\276\323\373\274\332\223\352\005\223\016w\347ic\267i\303\227h{\331\032\024M\004\302'\r\265a4_\266\260\251\211\372\251\3063\342\201Qk\224\030&\\\373\010z\376Ub\223P\007\0310l\316\326N\325\247\2115\2375\004\277\310\3557\203\326\340\313\3463\342O\320\360\263\346@s\214xE\320\337\243\252*\005\204\000\312-\036\331\246\335\037\016\002(\355\301\2335\224N\356\337\253f\010\376\304\225F\375e\243\330\372\311J\245\255\264j\251k\004\257H\365K\360=\260NRD\255V\314(\000\272N\207\242\003b[7j\317\352X\345k3\314dl\263\356\355\346W-\301\310\316\201ic\337V\377\212=\2214\224\214\345L\200s]3\267k\203\265\177\324\177n\016\310f\222E\001n}U\2574\346\0102\243U\346\336\235\352\0333D\242e\234H\027\317g\317]\362\345c}\275\001\332|\326\034n-\034\204\260\rs\373p\210)\025\3708\034:c\235\271jf@k\303\204\323t\363r+f%W\255\325\037\333#@\005\210\330%\251\333#\227\314\333\265\321\332=!j\300\245Rx<k\016\2214\376\032\020yS\017\221 \306\356\356Zw\2419Z\363\007\342D\217\032\323\215\331\346\251\026\340t\333\272\r\024\261 #\232\314\326\3576V\232A!\223l,\035\016\222\000b\362\002uX\023\317\233\243\275\010\177\321\234h\t\372@g\363f\363\003\004,\026\207\256\020\254x\023r\365E\363v\013\037\006k\347j\241\332\362!+\214m\006\372E\353\342$\351\233\366\360h\365,-\353B0\330\320\0347\177\201\220\305\374$\323\000\203\323\246R\237k\334'\322\035\336\017\201\314\005s\222\3305\032\323\314\234\266z\372\016\222:\335\032\355\243\236\260G(\210o@\013\355\207\317\010 })\006g=\034\302^\010\365w\010cg\366\013\030\211\r\022C\214\200~\333#\264\346\310\250\370_\345\267\033_\330{\355<\244\327 \260B\343\251\275=BR\006\265ys\332\234\253\335\306\304\035T\036\243\322\365\033\355\0337\017\037|""\363Gl\340\330\361\241\337\365\375\340\376K\260\3069!\225\317\354\377\2145\207\ts\231\372\250ug\351`\371 c-'!\343h\243\327\005\250\305\241*\242x\331\344C\376\203\216\010\211N\345\005\356\201\3408\276\277\002q6Mx\003?T\243\260\0050\n\202\225\004\350\243\332\207\306\331\306\023P\345\214\024j\244\200\177\001z\000\231\341\375\205\352\022\310\361F-EZ\002\002J#\251pj\377\341~\252\212\035\216\311\336\327 \030\310\332O\377\340\r\211[\030\020\2036^\006\317C\204\014^\267\256\177\337\\\266~HX\211ek\371\255\365v\265}\022\242\270}\362T{\360\263\337\377\305r\006\320\3312\211W\217_\267\202\204J\020\014X\003\244\361y\355lm\372p\020\224Pe\2752\r:\270r\265\375\365\225\366u\262\025\354\307WM\037\235\337\036\"l\275\300\266O\222\372\353_\001/@Pwd\345\263\306K\311\026]\226\311\037g\217}>\274\377=\304;\010\367*\340}\372\222y\003\270\375_\313\2070\026\356\230!\353\n\0217\304\323W$.\332C\027\254\013\244\355>k\354\221\224\030\255^b\255B\034H\334\374\224\314\005j\376\332|S#\341a]\"M\361\246\021%5\345\330p\003\355{\367\335\377\353\314\201Bf\034\322\343\367\320a \370\307\311c\267\2461\026l#\311ux\177\321\272H\300\035\276Q{\nI\203&\2627\263\265\273\300\177\246q\241y\242\271\336\n\261\336&]\300\322'\324\276\004%\344\232D4^\277\001\304NL\0133w\330:Ef\312k\214#3\000*\004\006\214\365\3457\3267\263\2605_C\352\r\003\033\304\200\227\211\371\256\232\033\3268\311\251\273\255\345C\252A\032u\276\203\271\214#\2740S\265\023d\377\\\022p#!Fc\002\265\241\372i\230&\2416[n\340\236\0313\007\256\036`J\371\033(\354\263\326\266K\245\234\255\3367\267\255\000\231\255\323\335\220 \001%\316r\215\205\343d\213\005\337\253\352\266y\234\216\202\216\361[t\272\323\3260C@P\2235\002\235\377]s\276\365\204i\351\306\315?\206x\010\033:@\217=\204\244\355\371\226\004\325I\006\225}\212\352i\353\312\203\372G2\311\030\326\000\014\206]\374\252}\t\266\344<\266\377\025Cn\t\202\244=\004\005\341\230\370\020\003\264\241+&)\253\375\365\352\014is\000\232\344\210\020\201\243\356\377\325QW\353!T\365\036S9\311\305\363\325,l\366\320\241\2432\201u""\241\225h+w\357\375q\206\017\305\272\361Q\3039\324L\353\366\301\371\003h9\022\215WnX7\0365\2366\203\004\201\013\326y\"`\026!\337\301!\010\332\276\rH\230\354%\225L\205\177\231\217!\261G\316W\177\006)`\027\327\250\306;\274,\366\345\354\324\260\316\tOc\233\033\316\223.\302\306n\216ccw\0365\202>Tw\253&\200\001\030\302\010l\355\034,\177\032\325\211\357\374\251\316\306g\207\352.\\$\021\376\310Tm\342\001\215\234<v\3671Q\027XUb\367!\324\326e\311I7lR\032\226\303\246\010\030<\354qc^X@\202\3410\354\336}INwH\335\222\331-!\037n==\270\005aK\210\022z\237\314\267\313\3042\302`\246\016.T?\023\340\037\251\016\231\003\346\350!\353\300e\262W\202\000?\024\371a\257)\355\363)\276\250\252\377\335\247\316\252\177\251\216\3030\234\203xs&8Gf\226w\212[\267\001\303{\337\342\264\222\311\0108DZw\311Q\005pn\262\251\200aC\2370\354\366\004f\273\377\204\244\333Q\240f\tF\240&\243\206`j\203\372y\363B\353\004\031\342\300g\227\023\177\256\372\267\332-h\313\013\215\277\010\177Nz\205=N<\033\"\346\227\346:\253\365a\341\237~h^\202E.\234wbv^\024{\221\356\035JW\205g\211\322\025\241\367;m_\354W\260\203\024\270\027\204G '\363%m\262\211G\023\244k\243\326\3405\363\267\272]\267\202\217\204\227.\240v\226\317I\264\"!\302\347\374\276\371\2465w \207\214\0345\204AASG\330]\0256-\211\000\001[\270[\326\264\264oY\223\003\376\237\237\336\217\223\245CzDNF(x\322\032\025#\316\036=b\210@8f2\271\023\007\217\301Ug{l\260\323q-\200u\306\247\352\313>\302\200\2441\t\203\373\326}r\212o\301n\370$a \276\363\027\006,(\272\204\001(Mp+k\313\007\365m\373 ?47H\355\211!c\1772d\010\353A\034\023\"\244:\246b (\311\223\354\n\266\024\345\207O\033\037IK\213!g\217\335zPW}\000\300\336\n\0000eM\315\264\202\244\254>\r\000\342;\177\000\300\367\357\001\300\320\347\344\352\356o\323\031GH\006\311(\221\360\004^6\325\246p\243e\224\350\246\014m\215JA*\274-\333\314\230\250\237 \377\314\326\322t\022\331\025\274.\341L\n\3031\005\000\213g\315\317\232;-\336\311ma\332\013\325D\344C*\354\234uV\264\277jl7\007\272\374\032\370\306\023\314\313\003\260\252\311@\001\217""\0217\223*:\024n\301e\363\211\010\317\010'\267l~\005\2038\315\236\320\210c\231\205\032\311\306\366\241\364\006\257\223\005#F\377\n\223\375Y\375\271\260\334\3041n\022\372\035\023\203w-\306\222(\277\366\300z\000LIo\025tX\013\312\340]_\237h\222\004r\267O\264\305\252i\230X\270\313 \370?p\207\006\341\304\316\222\337\314\301D;$\271j\315\375h\375\370\316z\367OWD1`\005\330|\241\036\250=\330\327RR\222\004\r\036\202\276\336\262}KHp\314\336C\212w@\000\001\302\227\001\265\327L\263\302\254=/\242\026O\315[\330\364\205\372_HV;\370\032%\001<\"\342\227\247\032\317\233s \367g09q\22613\t\270m\260\3711r\241\n4\215\tI\316\347\271j]\005\314\347Z9\212\365\310\010\343)\301E\377\244\223_6\237Y7\236\202p\206[\302\217\207\n\373\265>^\377\305z\036=\200\300\275]\373\255\261\320\014\261\247\301\352\314\372f\246u\263\365\001f\033\360\371\340\273\346B\313\216\232\021\322\202$\300\026j\241\276\261\244qk\374\005\273\376\203_[_\363\027\344KUDl\n;\366D\224n\363\022\207\203g\25436:\226\351\223]v\264\305'\034\214\271W_h\210}\202\256\254\353?\200/\215\326\313\003\325\351\001\273\310@\010x\202l\313\274\360c8\344X\177\007.\3737<\333-\302\262\233\206\010%A\363;P\321\t0|\271q\261y\036\006\370_@\233]^t\224\274\333/D\364w\026\3744H\226(\214\004Z>\332Xv\305\277\276k\031\007\274\337W\326\323\327\326\353\237\254\237\024\333\226\177$\330\226\235*\031\020\265\003\332OI\276\003\036\203'\367\357V\227\255A\022_\354\311&\367\313\320\3353\360\327\307\314e\031y\030\336\377\007f2\340'.\333\356\356`\2255\331\200\244\013\310\340\366\325\233\326M\322F\323B\331q\314\3435\\p\212!m5\247=\001\017\n9\335\027\301/\016^\362\026\216\010^\036\243X\005\341\231?\342\212\304+\207\300\277o.\333\366\205\316\240\356:\267\035\224S\305^\2455p\211D+\205\235O\327m\277\316\272\376-\207\261Br\240 \200\332\315\232j\035#N\277t\371\020\376\343 \210\336q\0039\332$\352Z\355e]\225\261w\0221\020\2466=\034\007{NK\346\224\312\342\211y\2416\300\316'E0\207\354\374\307\030y\027m\267\304x\003\031\022\206\017\221\240\310\032\004\204Kn\214\327\336\326\227\273r""\025\337\266\006Z\243\216s\373\035\371\013\027\252\275\017\254tz\014N/\334\342\357\233o[v\214\227\263\000\264\231\323\"\312k\247\024\254\351\331\326\354\301)\212g\016\302>\020\237\034\021\260\203J<$xJ\016\371\206\0349\362\276X\242\t\353\216\305\313\277AQ\220\264\027\254\213\004\246\321\036\213\3603\354}L\344?\202\215\207\330\321O\007\323\0073\007j\373\"\241\263lM\376\275u\346@=(\223\323w\221\366\371\023\274\276\231\246\352\260\322/\3040\377\305~{\266\372\001\326-\026\342\235\232\003\336M\n_\371\007\030M\327\201\250\030\313\366\367\326\373\237\334\232\340\212\271ZSE\270u\271\272i\2522\334/L\263\037k\225z\310'\\\177\r\3023\330\031\364\261\256z\006\231\301\352\200ul\244z\206L\036\n'QX\027\n\344\3700\360?H\r\203\307%1\214T?7/\262v\036!Ce\231\323'c\330\342\341\030i\313m\nT^2\037p\026\3558\251h\301\341x\234\250\346\314\335\332\016\230\0048+\233g\241\344G\205\262 \225\344\236\215T\323\263\306#H\246=&\3031\212\\\341E\001\351\3434\000<t\210\306\317\204V\246\320\r\325\314J-\212\331/\n\301\327y\315\303\240\271H\024\020\001\260.2C\312\243\374\025k\256\262lY\003\034\260\227\363\254\356GD\354u\233y\254\272f\376ET8\244\301\261\357\235\306\373\326\375\203\035k\3455\351C\003\342\r\276u\036\206\007<\r!\024.\327\346\352\367\033\277\265B.\211\265C)\305\323\207\354\250\1774\331A\"\247d\240=Nf\203\364&\007\332W\310\336uj\343\"\302L\262\001\006\251uM\304u/\037@\264\220v\266S(\237\357_\256\276\342\335\331\264Bs\366x\016WM\325\361\223\203\326\243Hk\271\265q\260\334\331\200uJ\310\031\230\374\243\325+\234\316c\375!\034\201w\300'\253\271=\216\360\260\262\"\362\355h\025\266\230\205Q}\207\200M2\354^\235\243pR\034A\360\022$\366\310&\264E\337J#\350dK\277\260e;LX''\261?@\201\2105\341\177\020\300\331X|Fql\252\35520\301D0\355($E\270\310\n\341}\016j\240\014r\305N&\255I(y\330:\325+Ld\356\202\014\021:AA\354\2023Y\326\267\013\007\003\007\377\371\307\024h\034\264\036S4\204P\030\234\252o6TW&\026\270\273U\333\254\253,q\355lk\004\234\177\303\311\233\001\304O\314+\224*\343\221N>\346T\375\0054\313(\345c\276'y""\350h\226\017\215Q\032\373\241\361u\363G\n\304\371\346\260H\204\272\342\262\323\224^\377\n\036s\201\004\007'#\354\2540\311\254\361\372\277\233\313\235!\213N\256\235\250\344\313:<\344\337\261S\2123\237\370\343\022\313\nJl\221\255\355P\357Ur]l\335|\037\n\354\213N\220\260\327\260`\361y\211\202\352\375\304\347\211\226\257\370\374\222h\313T\000\307w\315\201\346Y\353e\312J\221\005c)\2345s\311O\332\315\320\347\264\201\027\360\3521\013\316\314\301#\2228/\255'Q\n\262\365\326HL\302,zu\360\204T\3040!\367\024\257\301\031*\276#\360\301z\036gq\340\204-\210 \370u\266zC\204082?FG\242A#P+\027j\003B\277\310\302\257\202\222(\\'(i\3777\222]\207.\023\370WJ%\265\202$\324\267)\327\037\244\360\311\r\202W\200}\034\231\274\343s\236\332\177Y\335 \206\271\014\233\2135\026<,`~\200\342\375_\323\020z\323\177\t\030hts\320\374GM\253O\373\250\221;\365\211\006G\034\317\372\207\324e\210\365\224\371\0039j\207|\036\231ur\0362=\365\005\233\207!\211\373\243\223\315\230\226\242\032#dZ\223\324\261SfR\2718\311\264C\021\n\032\254\316A\366@\r\324\177n\236h\252.\375\362\225yA\250\330\347M\256}E\3611anas\"S\376k\343Ak\324\271\351\3012\223\304\373\267d\035\336\263\356\375\r>/\005\325\373\371\205\330w\257_X\204+\217\203P\354\2777P\374\177\341\032\272\014\276\363,\006\3356\334\323\326\304\301\r\270\0179\353\r'\212:\366\336\355\332n}\2737\225)Q\263\313T@\267Jv!\207\2374\307\232\313Dn\2735v\206\376\237\251\232F\355\205\020\332\017\352\273\204\202kh\231f\352\362\365eh\211'\215kle\375f\375\363}\327\221\317\023\211\002\005\317\301\275o\033\313\r\225\010\347\337\266\3230<f\215Qt\2342\315\3038\3318]\034!{k\356 \370\377\001&\252\207\n";
    PyObject *data = __Pyx_DecompressString(cstring, 10288, 1);
    if (unlikely(!data)) __PYX_ERR(0, 1, __pyx_L1_error)
    const char* const bytes = __Pyx_PyBytes_AsString(data);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (likely(bytes)); else { Py_DECREF(data); __PYX_ERR(0, 1, __pyx_L1_error) }
    #endif
    #else /* compression: none (27096 bytes) */
const char* const bytes = "All shapers failedCallable[[Blob, int, int, str, float, GlyphExtents, object], bool]Callable[[ColorLine, float, float, float, float, float, float, object], None]Callable[[ColorLine, float, float, float, float, object], None]Callable[[Color, bool, object], None]Callable[[Face, str, object], bytes]Callable[[Font, int, int, object], int]Callable[[Font, int, object], int]Callable[[Font, int, object], (int, int, int)]Callable[[Font, int, object], str]Callable[[Font, object], FontExtents]Callable[[PaintCompositeMode, object], None]Callable[[float, float, float, float, float, float, object], None]Callable[[float, float, float, float, object], None]Callable[[float, float, object], None]Callable[[int, object], Color]Callable[[int, object], None]Callable[[int, object], bool]Callable[[object], None]Callable[str]Color | NoneDict[str, Union[int, bool, Sequence[Tuple[int, int, Union[int, bool]]]]] | NoneDict[str, float]Face.color_palette_color_get_name_id()Face.color_palettesFace.face.has_layout_glyph_classesFace.get_color_palette()Face.get_glyph_color_layers()Face.get_glyph_color_svg()Face.get_language_feature_tags()Face.get_layout_baseline()Face.get_layout_glyph_class()Face.get_lookup_glyph_alternates()Face.get_script_language_tags()Face.get_table_script_tags()Face.glyph_has_color_paint()Face.has_color_layersFace.has_color_paintFace.has_color_palettesFace.has_color_pngFace.has_color_svgFace.has_layout_positioningFace.has_layout_substitutionFace.has_math_dataFace.is_glyph_extended_math_shape()Failed to open: Font.draw_glyph()Font.get_glyph_color_png()Font.get_math_constant()Font.get_math_glyph_assembly()Font.get_math_glyph_italics_correction()Font.get_math_glyph_kerning()Font.get_math_glyph_kernings()Font.get_math_glyph_top_accent_attachment()Font.get_math_glyph_variants()Font.get_math_min_connector_overlap()Input num of subtables(Invalid Unicode stringList[Color]List[OTColor]List[OTColorLayer]List[OTMathGlyphVariant]List[OTMathKernEntry]List[OTNameEntry]List[Tuple[List[Tuple[in""t, int, int]], List[Tuple[int, int, int]]]]List[bytes]List[float]List[int]List[str]List[str] | NoneMap({%s})NoneNote that Cython is deliberately stricter than PEP-484 and rejects subclasses of builtin types. If you need to pass subclasses then set the 'annotation_typing' directive to False.OTNameIdPredefined | intPass draw_state to Font.draw_glyphPickling of struct members such as self._hb_glyph_info must be explicitly requested with @auto_pickle(True)Pickling of struct members such as self._hb_glyph_position must be explicitly requested with @auto_pickle(True)RasterExtents | NoneRasterImage | NoneSet({...})Set[int]Set({%s})Subsetting failedTuple[List[OTMathGlyphPart], int]Tuple[float | None, float | None | float | None] | NoneTuple[int, int] | NoneUnion[str, Path].?, : ')add_notedisableenablefloat | Nonegcindex out of range for feature array capacity insteadint | Noneinvalid baseline tag 'invalid constantinvalid kern is deprecatedisenabledno default __reduce__ due to non-trivial __cinit__) != num of graph nodes(serialize()serialize_with_tag()src/uharfbuzz/_blob.pxisrc/uharfbuzz/_buffer.pxisrc/uharfbuzz/_draw.pxisrc/uharfbuzz/_face.pxisrc/uharfbuzz/_font.pxisrc/uharfbuzz/_harfbuzz.pyxsrc/uharfbuzz/_map.pxisrc/uharfbuzz/_paint.pxisrc/uharfbuzz/_raster.pxisrc/uharfbuzz/_serialize.pxisrc/uharfbuzz/_set.pxisrc/uharfbuzz/_subset.pxistr | None<stringsource>, use A8ACCENT_BASE_HEIGHTAXIS_HEIGHTBASE_GLYPHBGRA32BOTBOTTOM_LEFTBOTTOM_RIGHTBlobBlob.__reduce_cython__Blob.__setstate_cython__Blob.from_file_pathBufferBufferClusterLevelBufferContentTypeBufferFlagsBufferSerializeFlagsBufferSerializeFormatBuffer.__reduce_cython__Buffer.__setstate_cython__Buffer.add_codepointsBuffer.add_strBuffer.add_utf8Buffer.clear_contentsBuffer.createBuffer.guess_segment_propertiesBuffer.resetBuffer.serializeBuffer.set_language_from_ot_tagBuffer.set_message_funcBuffer.set_script_from_ot_tagCAP_HEIGHTCHARACTERSCID_FINDFONT_NAMECLEARCOLOR_BURNCOLOR_DODGECOMPONENTCOPYRIGHTCallableColorColorLineColorLi""ne.__reduce_cython__ColorLine.__setstate_cython__ColorStopColor.from_intColor.to_intDARKENDARK_BACKGROUNDDEFAULTDEFAULT_REPLACEMENT_CODEPOINTDEFINEDDELIMITED_SUB_FORMULA_MIN_HEIGHTDESCRIPTIONDESIGNERDESIGNER_URLDESTDEST_ATOPDEST_INDEST_OUTDEST_OVERDESUBROUTINIZEDIFFERENCEDISPLAY_OPERATOR_MIN_HEIGHTDO_NOT_INSERT_DOTTED_CIRCLEDROP_TABLE_TAGDictDrawFuncsDrawFuncs.__reduce_cython__DrawFuncs.__setstate_cython__DrawFuncs.draw_glyphDrawFuncs.get_glyph_shapeDrawFuncs.set_close_path_funcDrawFuncs.set_cubic_to_funcDrawFuncs.set_line_to_funcDrawFuncs.set_move_to_funcDrawFuncs.set_quadratic_to_funcEOTEXCLUSIONEXTENDERFLATTENED_ACCENT_BASE_HEIGHTFONT_FAMILYFONT_SUBFAMILYFRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWNFRACTION_DENOMINATOR_GAP_MINFRACTION_DENOMINATOR_SHIFT_DOWNFRACTION_DENOM_DISPLAY_STYLE_GAP_MINFRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UPFRACTION_NUMERATOR_GAP_MINFRACTION_NUMERATOR_SHIFT_UPFRACTION_NUM_DISPLAY_STYLE_GAP_MINFRACTION_RULE_THICKNESSFULL_NAMEFaceFace.__reduce_cython__Face.__setstate_cython__Face.color_palette_color_get_name_idFace.createFace.create_for_tablesFace.get_color_paletteFace.get_glyph_color_layersFace.get_glyph_color_svgFace.get_language_feature_tagsFace.get_layout_glyph_classFace.get_lookup_glyph_alternatesFace.get_nameFace.get_script_language_tagsFace.get_table_script_tagsFace.glyph_has_color_paintFace.is_glyph_extended_math_shapeFace.list_namesFace.reference_tableFace.variation_unicodesFontFontExtentsFontFuncsFontFuncs.__reduce_cython__FontFuncs.__setstate_cython__FontFuncs.createFontFuncs.set_font_h_extents_funcFontFuncs.set_font_v_extents_funcFontFuncs.set_glyph_h_advance_funcFontFuncs.set_glyph_name_funcFontFuncs.set_glyph_v_advance_funcFontFuncs.set_glyph_v_origin_funcFontFuncs.set_nominal_glyph_funcFontFuncs.set_variation_glyph_funcFont.__reduce_cython__Font.__setstate_cython__Font.createFont.draw_glyphFont.draw_glyph_with_penFont.get_font_extentsFont.get_glyph_color_pngFont.get_glyph_extentsFont.get_glyph_from_nameFont.get_glyph_h_advanc""eFont.get_glyph_h_originFont.get_glyph_nameFont.get_glyph_v_advanceFont.get_glyph_v_originFont.get_layout_baselineFont.get_math_constantFont.get_math_glyph_assemblyFont.get_math_glyph_italics_correctionFont.get_math_glyph_kerningFont.get_math_glyph_kerningsFont.get_math_glyph_top_accent_attachmentFont.get_math_glyph_variantsFont.get_math_min_connector_overlapFont.get_metric_positionFont.get_metric_position_with_fallbackFont.get_metric_variationFont.get_metric_x_variationFont.get_metric_y_variationFont.get_nominal_glyphFont.get_style_valueFont.get_var_coords_designFont.get_var_coords_normalizedFont.get_variation_glyphFont.glyph_from_stringFont.glyph_to_stringFont.paint_glyphFont.set_var_coords_designFont.set_var_coords_normalizedFont.set_variationFont.set_variationsGLYPHSGLYPH_EXTENTSGLYPH_FLAGSGLYPH_INDEXGLYPH_NAMESGRAPHEMESGlyphExtentsGlyphFlagsGlyphInfoGlyphInfo.__reduce_cython__GlyphInfo.__setstate_cython__GlyphPositionGlyphPosition.__reduce_cython__GlyphPosition.__setstate_cython__HARD_LIGHTHBObjectHBObject.__reduce_cython__HBObject.__setstate_cython__HIDDENHORIZONTAL_ASCENDERHORIZONTAL_CARET_OFFSETHORIZONTAL_CARET_RISEHORIZONTAL_CARET_RUNHORIZONTAL_CLIPPING_ASCENTHORIZONTAL_CLIPPING_DESCENTHORIZONTAL_DESCENDERHORIZONTAL_LINE_GAPHSL_COLORHSL_HUEHSL_LUMINOSITYHSL_SATURATIONHarfBuzzErrorINVALIDINVALID_VALUEITALICIntEnumIntFlagJSONLAYOUT_FEATURE_TAGLAYOUT_SCRIPT_TAGLICENSELICENSE_URLLIGATURELIGHTENLIGHT_BACKGROUNDLOWER_LIMIT_BASELINE_DROP_MINLOWER_LIMIT_GAP_MINListMAC_FULL_NAMEMANUFACTURERMARKMATH_LEADINGMONOTONE_CHARACTERSMONOTONE_GRAPHEMESMULTIPLYMapMapIterMapIter.__reduce_cython__MapIter.__setstate_cython__Map.__copy__Map.__reduce_cython__Map.__setstate_cython__Map._is_equalMap._updateMap.clearMap.copyMap.getMap.itemsMap.keysMap.updateMap.valuesNAME_IDNAME_LANG_IDNAME_LEGACYNOTDEF_OUTLINENO_ADVANCESNO_CLUSTERSNO_GLYPH_NAMESNO_HINTINGNO_LAYOUT_CLOSURENO_POSITIONSNO_PRUNE_UNICODE_RANGESNO_SUBSET_TABLE_TAGNamedTupleNotImplementedOPTICAL_SIZEOTColorOTColorLayerOTCol""orPaletteOTColorPaletteFlagsOTLayoutGlyphClassOTMathConstantOTMathGlyphPartOTMathGlyphPartFlagsOTMathGlyphVariantOTMathKernOTMathKernEntryOTMetricsTagOTNameEntryOTNameIdPredefinedOTVarAxisFlagsOTVarAxisInfoOTVarNamedInstanceOVERBAR_EXTRA_ASCENDEROVERBAR_RULE_THICKNESSOVERBAR_VERTICAL_GAPOVERLAYPADPASSTHROUGH_UNRECOGNIZEDPLUSPOSTSCRIPT_NAMEPRESERVE_DEFAULT_IGNORABLESPRODUCE_SAFE_TO_INSERT_TATWEELPRODUCE_UNSAFE_TO_CONCATPaintCompositeModePaintExtendPaintFuncsPaintFuncs.__reduce_cython__PaintFuncs.__setstate_cython__PaintFuncs.set_color_funcPaintFuncs.set_color_glyph_funcPaintFuncs.set_custom_palette_color_funcPaintFuncs.set_image_funcPaintFuncs.set_linear_gradient_funcPaintFuncs.set_pop_clip_funcPaintFuncs.set_pop_group_funcPaintFuncs.set_pop_transform_funcPaintFuncs.set_push_clip_glyph_funcPaintFuncs.set_push_clip_rectangle_funcPaintFuncs.set_push_group_funcPaintFuncs.set_push_transform_funcPaintFuncs.set_radial_gradient_funcPaintFuncs.set_sweep_gradient_funcPath__Pyx_PyDict_NextRefRADICAL_DEGREE_BOTTOM_RAISE_PERCENTRADICAL_DISPLAY_STYLE_VERTICAL_GAPRADICAL_EXTRA_ASCENDERRADICAL_KERN_AFTER_DEGREERADICAL_KERN_BEFORE_DEGREERADICAL_RULE_THICKNESSRADICAL_VERTICAL_GAPREFLECTREMOVE_DEFAULT_IGNORABLESREPEATRETAIN_GIDSRasterDrawRasterDraw.__reduce_cython__RasterDraw.__setstate_cython__RasterDraw.clearRasterDraw.draw_glyphRasterDraw.draw_glyph_or_failRasterDraw.renderRasterDraw.resetRasterDraw.set_glyph_extentsRasterExtentsRasterFormatRasterImageRasterImage.__reduce_cython__RasterImage.__setstate_cython__RasterImage.clearRasterImage.configureRasterPaintRasterPaint.__reduce_cython__RasterPaint.__setstate_cython__RasterPaint.clearRasterPaint.clear_custom_palette_colorsRasterPaint.paint_glyphRasterPaint.paint_glyph_or_failRasterPaint.renderRasterPaint.resetRasterPaint.set_custom_palette_colorRasterPaint.set_glyph_extentsRepackerErrorSAFE_TO_INSERT_TATWEELSAMPLE_TEXTSCREENSCRIPT_PERCENT_SCALE_DOWNSCRIPT_SCRIPT_PERCENT_SCALE_DOWNSET_OVERLAPS_FLAGSKEWED_FRACTION_HORIZONTAL_GAPSKEWE""D_FRACTION_VERTICAL_GAPSLANT_ANGLESLANT_RATIOSOFT_LIGHTSPACE_AFTER_SCRIPTSRCSRC_ATOPSRC_INSRC_OUTSRC_OVERSTACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWNSTACK_BOTTOM_SHIFT_DOWNSTACK_DISPLAY_STYLE_GAP_MINSTACK_GAP_MINSTACK_TOP_DISPLAY_STYLE_SHIFT_UPSTACK_TOP_SHIFT_UPSTRETCH_STACK_BOTTOM_SHIFT_DOWNSTRETCH_STACK_GAP_ABOVE_MINSTRETCH_STACK_GAP_BELOW_MINSTRETCH_STACK_TOP_SHIFT_UPSTRIKEOUT_OFFSETSTRIKEOUT_SIZESUBSCRIPT_BASELINE_DROP_MINSUBSCRIPT_EM_X_OFFSETSUBSCRIPT_EM_X_SIZESUBSCRIPT_EM_Y_OFFSETSUBSCRIPT_EM_Y_SIZESUBSCRIPT_SHIFT_DOWNSUBSCRIPT_TOP_MAXSUB_SUPERSCRIPT_GAP_MINSUPERSCRIPT_BASELINE_DROP_MAXSUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPTSUPERSCRIPT_BOTTOM_MINSUPERSCRIPT_EM_X_OFFSETSUPERSCRIPT_EM_X_SIZESUPERSCRIPT_EM_Y_OFFSETSUPERSCRIPT_EM_Y_SIZESUPERSCRIPT_SHIFT_UPSUPERSCRIPT_SHIFT_UP_CRAMPEDSequenceSerializerErrorSetIterSetIter.__reduce_cython__SetIter.__setstate_cython__SetSet.__copy__Set.__reduce_cython__Set.__setstate_cython__Set._is_equalSet._setSet._updateSet.addSet.add_rangeSet.clearSet.copySet.del_rangeSet.difference_updateSet.discardSet.intersection_updateSet.invertSet.is_invertedSet.issubsetSet.issupersetSet.removeSet.setSet.symmetric_difference_updateSet.updateStyleTagSubsetFlagsSubsetInputSubsetInputSetsSubsetInput.__reduce_cython__SubsetInput.__setstate_cython__SubsetInput.get_axis_rangeSubsetInput.keep_everythingSubsetInput.pin_all_axes_to_defaultSubsetInput.pin_axis_locationSubsetInput.pin_axis_to_defaultSubsetInput.set_axis_rangeSubsetInput.setsSubsetInput.subsetSubsetPlanSubsetPlan.__reduce_cython__SubsetPlan.__setstate_cython__SubsetPlan.executeTEXTTOP_LEFTTOP_RIGHTTRADEMARKTYPOGRAPHIC_FAMILYTYPOGRAPHIC_SUBFAMILYTupleUNCLASSIFIEDUNDERBAR_EXTRA_DESCENDERUNDERBAR_RULE_THICKNESSUNDERBAR_VERTICAL_GAPUNDERLINE_OFFSETUNDERLINE_SIZEUNICODEUNIQUE_IDUNSAFE_TO_BREAKUNSAFE_TO_CONCATUPPER_LIMIT_BASELINE_RISE_MINUPPER_LIMIT_GAP_MINUSABLE_WITH_DARK_BACKGROUNDUSABLE_WITH_LIGHT_BACKGROUNDUnionVARIATIONS_PS_PREFIXVENDOR_URLVERIFYVERSION_STRINGVERTICAL_ASCENDERVERTICAL_CARET_OFFSET""VERTICAL_CARET_RISEVERTICAL_CARET_RUNVERTICAL_DESCENDERVERTICAL_LINE_GAPWARNEDWEIGHTWIDTHWWS_FAMILYWWS_SUBFAMILYXORX_HEIGHTaaddadd_codepointsadd_rangeadd_stradd_utf8advancealphaalternate_countalternates__annotations__argsascenderassemblyassembly_arrayasyncio.coroutinesaxis_def_valueaxis_indexaxis_max_valueaxis_min_valuebbaseline_tagblobblob_datablob_lengthblueboolbufferbytescc_alternatesc_colorsc_coordsc_extentsc_extents_ptrc_foregroundc_shapersc_tagscallbackclearclear_contentsclear_custom_palette_colorscline_in_tracebackcloseclosePathclscodepointscolorcolor_countcolor_indexcolor_palette_color_get_name_idcolorsconfigureconstantconsumedcoordscoords_2dot14copy__copy__correction_heightcountcreatecreate_for_tablescstrcurveTodatadecoratordef_valuedefault_valuedel_rangedeprecateddeprecated.<locals>.decoratordeprecated.<locals>.decorator.<locals>.wrapperdescenderdesign_coords__dict__difference_updatedirectiondiscard__doc__draw_datadraw_funcsdraw_glyphdraw_glyph_or_faildraw_glyph_with_pendraw_statedraw_state_pencodeendend_connector_lengthentriesenumenumerateexecuteextentsfaceface_or_fontfeatfeature_countfeaturesfilenamefirstflagsfloatfontforegroundformatfrom_file_pathfrom_intfsencodefull_advancefunc__func__func_pfuncsfunctoolsggenexprgetget_axis_rangeget_color_paletteget_font_extentsget_glyph_color_layersget_glyph_color_pngget_glyph_color_svgget_glyph_extentsget_glyph_from_nameget_glyph_h_advanceget_glyph_h_originget_glyph_nameget_glyph_shapeget_glyph_v_advanceget_glyph_v_originget_language_feature_tagsget_layout_baselineget_layout_glyph_classget_lookup_glyph_alternatesget_math_constantget_math_glyph_assemblyget_math_glyph_italics_correctionget_math_glyph_kerningget_math_glyph_kerningsget_math_glyph_top_accent_attachmentget_math_glyph_variantsget_math_min_connector_overlapget_metric_positionget_metric_position_with_fallbackget_metric_variationget_metric_x_variationget_metric_y_variationget_nameget_nominal_glyphget_script_language_tagsget_style_valueget_table_script_tagsget_""var_coords_designget_var_coords_normalizedget_variation_glyph__getstate__gidglyphglyph_from_stringglyph_has_color_paintglyph_to_stringgraphnodesgreenguess_segment_propertieshanghas_color_layershas_color_painthas_color_paletteshas_color_pnghas_color_svghas_layout_glyph_classeshas_layout_positioninghas_layout_substitutionhas_math_datahb_baseline_taghb_codepoint_thb_codepointshb_directionhb_featureshb_languagehb_language_taghb_positionhb_scripthb_script_taghb_taghb_variationsheadheightiicfbicftideoidtpimgindexinitinputinstintintersection_updateinvert_is_coroutine_is_equalis_foregroundis_glyph_extended_math_shapeis_invertedissubsetissupersetitalics_correctionitem_lengthitem_offsetitemsjoinkkeep_everythingkernkern_valuekernskerns_arraykeyskeys.<locals>.genexprkwargslanglanguagelanguage_countlanguage_indexlanguage_taglarger_setlastlayer_countlayerslengthlineToline_gaplist_nameslookup_indexm__main__mathmax_correction_heightmax_valuemessage__metaclass__methodsmin_value__module__moveTo__mro_entries____name__namename_idnew_facenextnodenum_entriesnum_glyphsnum_nodesobj_listobjectoffsetosot_color_glyph_get_layersot_color_glyph_get_pngot_color_glyph_get_svgot_color_glyph_has_paintot_color_has_layersot_color_has_paintot_color_has_palettesot_color_has_pngot_color_has_svgot_color_palette_color_get_name_idot_color_palette_get_colorsot_color_palette_get_countot_color_palette_get_flagsot_color_palette_get_name_idot_font_set_funcsot_layout_get_baselineot_layout_get_glyph_classot_layout_has_glyph_classesot_layout_has_positioningot_layout_has_substitutionot_layout_language_get_feature_tagsot_layout_lookup_get_glyph_alternatesot_layout_script_get_language_tagsot_layout_table_get_script_tagsot_math_get_constantot_math_get_glyph_assemblyot_math_get_glyph_italics_correctionot_math_get_glyph_kerningot_math_get_glyph_kerningsot_math_get_glyph_top_accent_attachmentot_math_get_glyph_variantsot_math_get_min_connector_overlapot_math_has_dataot_math_is_glyph_extended_shapeot_tag_to_languageot_tag_t""o_scriptotherppackedpacked_blobpaint_funcspaint_glyphpaint_glyph_or_failpaint_statepaint_state_ppalette_indexpathlibpenpin_all_axes_to_defaultpin_axis_locationpin_axis_to_defaultpoppositionpostscript_name_id__prepare____pyx_state__pyx_vtable__qCurveTo__qualname__rred__reduce____reduce_cython____reduce_ex__reference_tableremoverenderrepackrepack_with_tagreplacement__repr__.<locals>.genexprresetresultretreturnromnroundsscript_countscript_indexscript_tagselfsendserializeserialize_with_tagset_setset_axis_rangeset_close_path_funcset_color_funcset_color_glyph_funcset_cubic_to_funcset_custom_palette_colorset_custom_palette_color_funcset_font_h_extents_funcset_font_v_extents_funcset_glyph_extentsset_glyph_h_advance_funcset_glyph_name_funcset_glyph_v_advance_funcset_glyph_v_origin_funcset_image_funcset_language_from_ot_tagset_line_to_funcset_linear_gradient_funcset_message_funcset_move_to_func__set_name__set_nominal_glyph_funcset_pop_clip_funcset_pop_group_funcset_pop_transform_funcset_push_clip_glyph_funcset_push_clip_rectangle_funcset_push_group_funcset_push_transform_funcset_quadratic_to_funcset_radial_gradient_funcset_script_from_ot_tagset_sweep_gradient_funcset_typeset_var_coords_designset_var_coords_normalizedset_variationset_variation_glyph_funcset_variationssetdefaultsets__setstate____setstate_cython__shapeshapershaperssizesmaller_setsourcestartstart_connector_lengthstart_offsetstaticmethodstrstridestringsubfamily_name_idsubsetsubset_preprocesssubtablessuccesssymmetric_difference_updatetable_bytestable_datatagtag_packedtagstail__test__texttext_lengththrowto_inttypingucs4_bufferuharfbuzz._harfbuzzunicode_updateupdateuser_datauser_data_pvvaluevaluesvalues.<locals>.genexprvariantsvariants_arrayvariationvariation_selectorvariation_unicodesvariationsversion_stringwarnwarningswidthwrapperwrapsxx_bearingx_originyy_bearingy_origin\200\001\340\016#\240=\3200C\3001\330\003\n\210$\320\016*\250!\250>\270\021\200\001\330#0\260\010\270\001\330\004\013\2104\320\017%\240Q\240a\320""\0040\260\001\360\006\000\t\022\220\023\220A\220Q\330\010\030\230\007\230v\240Q\240g\250R\250q\330\010\013\210>\230\023\230A\330\014\r\330\010\t\330\014\020\220\005\220U\230!\2301\340\020\035\230Q\230e\2405\250\001\250\026\250q\260\003\2602\260Q\330\014-\250Q\250d\260+\270_\310A\340\014\020\220\001\220\021\320\004\030\230\001\330\010&\320&;\2701\270D\300\001\330\010\013\2104\210s\220!\330\014\023\2201\330\010\032\230)\2401\240A\320\004)\250\030\260\021\340\010\022\320\022+\2501\250D\260\013\2709\300A\300Q\330\010\017\210w\220m\2401\320\0041\260\021\330\010#\2401\240D\250\n\260%\260q\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\004+\2501\360\006\000\t\022\320\0212\260!\2604\260{\300!\3001\340\010\017\210q\220\006\220a\220s\230\"\230G\2404\240u\250E\260\021\260!\200\001\330!\"\330)*\330&'\330'(\330)1\260\021\330\004\013\2104\320\017#\2401\240N\260+\270\\\310\021\200\001\330$1\260\030\270\021\330\004\013\2104\320\017&\240a\240q\320\004*\320*;\2701\330\010\017\320\017,\250A\250T\260\033\270A\320\004\"\240(\250!\330\010\037\320\0371\260\021\260#\260W\270A\270[\310\001\340\010\013\320\013)\250\021\250$\250l\270!\330\014\r\320\r\035\230Q\320\036.\250a\250q\330\014\030\230\010\240\005\240Q\320&;\2701\330\014\030\230\010\240\005\240Q\320&;\2701\330\014\030\230\010\240\005\240Q\320&;\2701\330\014\023\220;\230k\250\021\330\010\017\210q\320\004\031\230\021\330\010\023\320\0231\260\021\260$\260a\330\010\013\2109\220C\220q\330\014\022\220,\230a\230q\330\010\023\2209\230A\230Q\200\001\330%2\3202B\300(\310!\330\004\013\2104\320\017'\240q\250\007\250q\320\004 \240\001\330\0332\260)\2701\340\0102\260!\330\010\013\2108\2207\230!\330\014\025\220\\\240\027\250\001\330\014\025\220\\\240\027\250\001\330\014\025\220Y\230g\240Q\330\014\025\220Z\230w\240a\330\014\025\220Z\230w\240a\330\014\034\230A\230Q\330\010\017\320\017(\250\001\250\024\320-@\300\010\310\001\320\004\036\320\0362\260!\330\010\022\220)\2301\320\034-\250Q\320.A\300\021\300$\300l\320RS\320\0042\260(\270!\330\010""\017\320\0171\260\021\260$\260k\300\021\200\001\330%&\330&'\330*2\260!\330\004\013\2104\320\017'\240q\250\007\250q\200\001\3302?\270x\300q\330\004\013\2104\320\0174\260A\260Q\200\001\330%&\330&'\330%4\260A\330\004\013\2104\320\017'\240q\250\007\250q\320\0044\260L\300\n\310!\330\010\017\320\0177\260q\330\014\020\320\020#\240=\260\005\260W\270A\320\004)\250\021\330\010\014\320\014!\240\021\330\010\"\240!\2404\240}\260M\300\027\310\n\320RS\200\001\330-@\300\010\310\001\330\004\013\2104\320\017/\250q\260\001\200\001\330 )\250\021\330\004\013\2104\210q\320\004\031\230\021\330\010\022\220!\2204\220z\240\021\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\004\032\230!\330\010\022\220!\2204\220z\240\025\240a\320\0045\3205F\300a\340\0100\260\001\260\024\260[\300\005\300Q\300a\330\010\017\210q\200\001\330*5\260X\270Q\330\004\013\2104\320\017%\240Q\240a\320\0045\260X\270Q\330\010\014\210C\210q\330\010*\250!\2504\250{\320:N\310a\310q\330\010\017\210q\320\000\032\230(\240!\330\004\030\230\003\2307\240!\330\004\033\320\033-\250Q\250g\260Y\270a\330\004!\320!4\260A\260Q\340\004\024\220A\220[\240\001\330\004\010\210\001\210\025\210a\330\004\r\210Q\330\004\013\2106\220\027\230\001\200\001\330*7\260x\270q\330\004\013\2104\320\017,\250A\250Q\320\0047\260x\270q\330\010\017\320\0176\260a\260t\270;\300a\320\004(\250\013\2608\2701\330\010\021\320\021#\2401\240C\240w\250a\250{\270!\330\010\017\320\0172\260!\330\014\020\220\014\230D\240\013\2501\320\004+\2508\2601\330\010\017\320\017*\250!\2504\250{\270!\320\004;\2708\3001\340\010\023\320\0238\270\001\270\024\270[\310\001\330\010\013\2108\2203\220a\330\014\023\2201\330\010\017\210q\200\001\330&;\2708\3001\330\004\024\220A\340\004%\240Q\330\004$\240A\340\004\n\210,\220c\230\021\330\010&\240a\240t\250;\260o\300^\320ST\320Ta\320ab\330\010\014\210E\220\025\220a\220q\330\014\017\210w\220a\220u\230I\240Q\240f\250A\250Q\330\004\013\2101\320\004#\2408\2501\330\010\034\230C\230w\240a\330\010\037\320\0371\260\021\260'\270\031\300!\330\010""\037\320\0376\260a\260t\270;\300a\330\010\013\2105\220\003\2201\330\014\r\330\010\023\2209\230A\230Q\320\004#\2408\2501\330\010\017\320\017\037\230q\240\004\240J\250j\270\001\320\004#\2408\2501\360\006\000\t \230q\240\004\240K\250u\260F\270!\330\010\021\220\021\330\010\017\210v\220W\230A\200\001\330$%\330%&\330$%\33089\330\004\013\2104\320\017&\240a\240w\250f\260A\320\0048\270\014\300H\310A\330\010\037\230q\340\010)\250\021\330\010,\250A\340\010\016\320\016\036\230c\240\021\330\0144\260A\260T\270\033\300N\320RY\320YZ\330\020\021\320\021\"\240!\330\014\020\220\005\220U\230!\2301\330\020\032\230'\240\021\240,\250a\250q\330\014\034\230A\330\010\017\210q\320\0048\270\010\300\001\330\010\034\230I\240W\250A\330\010\032\230!\330\010+\320+C\3001\300G\3101\330\010\017\320\0173\2601\260D\270\013\3001\320\004'\320'8\270\001\340\010\013\320\013%\240Q\240d\250+\260U\270!\2701\330\014\023\2201\330\010\017\210q\200\001\340\004\013\2109\220A\220[\240\001\320\004(\320(9\270\021\330\010\017\320\017*\250!\2504\250{\270!\320\004:\270(\300!\330\010\017\320\0179\270\021\270$\270k\310\021\200A\330\010\020\220\001\320\004)\250\021\330$*\320*:\270'\300\021\330\010!\240\023\240A\240Q\340\010\013\2104\210q\330\014\r\330\010\030\320\030)\250\026\250q\330\014\021\220\022\2201\330\010\014\210E\220\025\220a\220q\330\014\031\230\021\230%\230z\250\021\250!\330\010 \240\001\330\014\020\220\r\230_\250F\260-\270q\330\010\014\210A\210Q\330\010\013\2104\320\017.\250a\250t\2601\330\014\r\320\004\030\230\001\330\010&\320&<\270A\270T\300\021\330\010\013\2104\210s\220!\330\014\023\2201\330\010\032\230)\2401\240A\200A\330'(\33006\260a\33028\270\013\3001\330\010\034\230C\230w\240a\330\010\037\320\0371\260\021\260'\270\031\300!\330\010*\250!\340\010\031\230\021\360\006\000\t*\250\021\330\010\016\210n\230C\230q\330\0142\260!\330\020\024\220A\330\020\030\230\001\330\020\021\330\020\021\330\020\021\220\021\330\020\021\330\014\020\220\005\220U\230!\2301\330\020 \240\001\240\026\240q\250\004\250A\330\020\024\220A""\220U\230!\330\020\031\230\021\330\020\024\220G\2301\230F\240'\250\021\330\014\034\230A\330\010\017\210q\320\000\034\230A\330\"#\330#$\340/0\360N\001\000\005\010\200s\210!\210;\220c\230\023\230A\230Q\330\010\016\210j\230\001\330\014%\240Q\240c\250\021\320*M\310Q\310c\320QR\320RS\360\006\000\t\"\240\023\240A\240Q\330\010\034\230C\230u\240A\240Q\330\010\033\2301\330\010\034\230J\240a\330\010(\250\001\330\010\034\230H\240A\240Q\330\004\010\210\005\210U\220!\2201\330\010\020\220\003\2201\220I\230Q\230a\330\010\020\320\020\"\240!\2403\240k\260\022\2606\270\033\300B\300a\330\010\017\210q\340\010\017\210z\230\021\230!\340\010\014\210H\220M\240\021\240#\240S\250\001\250\024\250Q\250e\2601\330\010\013\2102\210S\220\001\330\014\024\220M\240\021\240#\240V\2504\250q\260\001\340\010\014\210H\220M\240\021\240#\240S\250\001\250\024\250Q\250e\2601\330\010\013\2102\210S\220\001\330\014\024\220M\240\021\240#\240W\250D\260\001\260\021\340\004\034\230C\230w\240a\330\004\026\220a\330\004\"\320\"=\270Q\320>P\320PQ\320QX\320XY\330\n\022\220!\330\n\013\330\004\007\200|\2203\220a\330\010\016\210m\2301\360\006\000\005\"\320!1\260\021\260-\270q\300\001\330\004\030\230\t\240\022\2401\340\004\023\2201\220A\330\004\013\2101\200A\330\035\036\330\034\035\330\"1\260\021\330\"1\260\021\330\"1\260\031\270!\330\010\037\320\0371\260\021\260#\260W\270A\270[\310\001\330\010\024\220G\230:\240S\250\n\260!\330\010\024\220G\230:\240S\250\n\260!\330\010\024\220G\230:\240S\250\n\260!\330\010\017\320\017-\250Q\330\014\020\220\014\230D\240\013\2508\260;\270k\310\021\200A\330)*\330&'\330'(\330)1\260\021\360\022\000\t\014\210=\230\003\2301\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\330\r\032\230#\230Q\330\014\036\230a\340\014\022\220*\230A\320\0356\260a\330\010\021\220\031\230'\240\021\330\010\027\320\027/\250q\260\007\260y\300\001\330\010\021\220\032\2307""\240!\330\010\030\320\030*\250!\2507\260)\2701\330\010\021\220\034\230W\240A\330\010\032\320\032,\250A\250W\260I\270Q\330\010\022\320\022+\2501\250D\260\001\330,-\330,-\330,-\330,-\330,-\250Q\330\010\013\2101\330\014\023\2201\340\014\023\2201\200A\340 !\360\n\000&1\260\001\330\010\031\230\023\230A\230Q\330\010\014\210L\320\0301\260\021\330\014#\2407\250+\260Q\330\010\035\230Q\230d\240+\250Q\250c\260\027\270\006\270f\300A\330\010\014\320\014%\240Q\330\010\017\210q\200A\330\032#\2401\330\010\031\230\023\230A\230Q\330\010\017\210q\200A\330\"#\360\006\000(1\260\001\360\006\000\t\014\320\013\034\230A\230V\2401\330\014\020\320\020$\240A\330\014\025\320\0250\3200D\300A\300V\3101\330\014\017\320\017 \240\001\240\033\250A\330\020\036\230g\320%9\270\021\270+\300Q\340\020\036\230g\240Q\340\014\020\320\020$\240A\330\014\025\220Q\330\014\023\220:\230S\240\006\240a\330\014\032\230'\240\021\330\010)\250\021\330\014\020\320\020 \240\010\250\r\260Q\200A\330&;\2701\330\010\034\230B\230i\240q\250\001\330\010\037\320\037?\270q\300\007\300q\330\010\013\2105\220\003\2201\330\014\022\220-\230q\320 2\260!\2601\330\010\031\230\023\230A\230Q\330\010\014\210L\230\001\330\010\017\210q\200A\330\037*\320*:\270)\3001\330\010\014\210K\220q\230\005\230V\2401\200A\330%&\360\006\000\t\r\320\014#\2401\330\010-\250Q\330\014\020\320\020!\320!<\270G\3006\310\021\200A\330#$\360\010\000\t\r\320\014!\240\021\330\010+\2501\330\014\020\320\020!\320!:\270'\300\026\300q\200A\330\"#\360\n\000(1\260\001\330\010)\250\021\330\014\020\220\r\320\035/\250w\260k\300\021\330\010\014\320\014 \240\001\200A\330\030\031\330\0322\3202G\300q\330\0310\3200D\300M\320QR\330\010'\320';\2701\270D\300\001\330\010\"\240!\360\006\000\t\035\230A\340\010\016\210f\220B\220a\330\014\025\320\025(\250\001\330\020\024\220A\330\020\021\330\020\021\330\020\021\330\020\021\330\020\021\220\021\330\020\024\220A\330\020\021\330\020\021\340\014\017\210y\230\003\2301\330\020\021\330\014\026\220d\230\"\230A\340\010\017\210v\220W\230A\200A\330\0103""\2601\260D\270\001\200A\330+,\360\016\000\t\r\320\014)\250\021\330\0103\2601\330\014\020\320\020!\320!B\300'\310\026\310q\320\004\034\230A\330\035#\320#3\2607\270!\360\010\000\t\027\320\026*\250!\2501\330\010\013\210<\220s\230!\330\014\r\330\010\t\330\014\032\320\032-\250Q\250a\330\014\017\210|\2304\230q\330\020\026\220j\240\001\240\021\330\014\037\230q\330\020\024\220A\330\020\033\2301\330\020\021\330\020\021\330\020\021\340\014\017\210t\320\0232\260!\2604\260q\330\020\021\340\014\026\220a\220q\200A\330$%\360\016\000*3\260!\360\006\000\t\014\320\013\034\230A\230V\2401\330\014\020\320\020&\240a\330\014\025\320\0252\3202F\300a\300v\310Q\330\014\017\320\017 \240\001\240\033\250A\330\020\036\230g\320%9\270\021\270+\300Q\340\020\036\230g\240Q\340\014\020\320\020&\240a\330\014\025\220Q\330\014\023\220:\230S\240\006\240a\330\014\032\230'\240\021\330\010+\2501\330\014\020\320\020 \240\010\250\r\260Q\200A\330\027\030\330\010\033\2303\230a\330\010\017\210q\200A\330%&\360\n\000+4\2601\330\010,\250A\330\014\020\220\r\320\0352\260'\270\033\300A\330\010\014\320\014#\2401\200A\330%&\360\014\000+4\2601\330\010.\250a\330\014\020\220\r\320\0354\260G\270;\300a\330\010\014\320\014%\240Q\200A\330,-\360\010\000\t\r\320\014*\250!\330\0104\260A\330\014\020\320\020!\320!C\3007\310&\320PQ\200A\330\010*\250!\2504\250q\200\001\330\033$\240A\330\004\013\2104\210q\200A\330\010\013\2104\210q\220\007\220s\230!\330\014\020\220\010\230\001\230\021\340\014\020\220\005\220Q\330\020\032\230!\2304\230z\250\021\340\010\013\2104\320\017+\2501\250D\260\001\330\014\r\200A\330\010\013\2104\210q\220\007\220s\230!\330\014\020\220\005\220Q\220a\340\014\020\220\005\220Q\330\020\032\230!\2304\230z\250\021\340\010\013\2104\320\017+\2501\250D\260\001\330\014\r\200A\330\010\013\2104\210q\220\007\220s\230!\330\014\020\220\010\230\001\230\021\340\014\020\220\002\220%\220u\230F\240!\330\020\032\230!\2304\230z\250\023\250A\340\010\013\2104\320\017+\2501\250D\260\001\330\014\r\200A\330&'\360\n\000,5\260A\330\010-\250Q""\330\014\020\220\r\320\0353\2607\270+\300Q\330\010\014\320\014$\240A\200A\330&'\360\010\000,5\260A\330\010-\250Q\330\014\020\220\r\320\0353\2607\270+\300Q\330\010\014\320\014$\240A\200A\330'(\360\n\000-6\260Q\330\010.\250a\330\014\020\220\r\320\0354\260G\270;\300a\330\010\014\320\014%\240Q\200A\330\"#\360\006\000\t\r\320\014 \240\001\330\010*\250!\330\014\020\320\020!\320!9\270\027\300\006\300a\320\004,\250A\360\006\000\t\022\220\023\220A\220Q\330\010\023\220?\240&\250\001\250\027\260\002\260!\330\010\013\2109\220C\220q\330\014\r\330\010\t\330\014\020\220\005\220U\230!\2301\330\020\030\230\001\230\025\230f\240A\240Q\330\014)\250\021\250$\250k\270\032\3001\340\014\020\220\001\220\021\200A\330\030 \240\001\330\010\014\320\014\034\230A\230Q\330\010\014\320\014\036\230a\230q\330\010\014\320\014\035\230Q\230a\330\010\014\320\014\036\230a\230q\330\010\017\210u\220A\220S\230\003\2303\230a\200A\330\010\024\220A\220T\230\021\200A\330\010\034\230A\230T\240\021\320\004\037\230}\250A\330\010\034\230A\230T\320!3\2604\260{\300!\200A\330&'\360\022\000\t\r\320\014$\240A\330\010.\250a\330\014\020\320\020!\320!=\270W\300F\310!\200A\330&'\360\020\000\t\r\320\014$\240A\330\010.\250a\330\014\020\320\020!\320!=\270W\300F\310!\320\004,\250A\330\010\034\230E\240\027\250\001\330\010\032\230!\330\010\034\230A\330\014\020\220\r\320\0350\260\001\3201C\3001\300G\3101\200A\330\035\036\360\n\000\t\r\210O\2301\330\010%\240Q\330\014\020\320\020!\320!4\260G\2706\300\021\200A\330\035\036\360\022\000\t\r\210O\2301\330\010%\240Q\330\014\020\320\020!\320!4\260G\2706\300\021\200A\330\010\030\230\001\230\024\230Q\200A\330\010 \240\001\240\024\240Q\320\000\034\230A\330\004\030\230\001\230\024\230Q\200A\330\037 \360\n\000%.\250Q\360\006\000\t\014\320\013\034\230A\230V\2401\330\014\020\320\020!\240\021\330\014\025\320\025-\320-A\300\021\300&\310\001\330\014\017\320\017 \240\001\240\033\250A\330\020\036\230g\320%9\270\021\270+\300Q\340\020\036\230g\240Q\340\014\020\320\020!\240\021\330\014\025\220Q\330\014""\023\220:\230S\240\006\240a\330\014\032\230'\240\021\330\010&\240a\330\014\020\320\020 \240\010\250\r\260Q\200A\330'(\360\010\000\t\r\320\014%\240Q\330\010/\250q\330\014\020\320\020!\320!>\270g\300V\3101\200A\330'(\360\024\000\t\r\320\014%\240Q\330\010/\250q\330\014\020\320\020!\320!>\270g\300V\3101\200A\330\010\025\220Q\220d\230!\200A\330\010\035\230Q\230d\240!\200A\330 !\360\006\000\t\r\320\014\036\230a\330\010(\250\001\330\014\020\320\020!\320!7\260w\270f\300A\200A\330 !\360\022\000&/\250a\360\006\000\t\014\320\013\034\230A\230V\2401\330\014\020\320\020\"\240!\330\014\025\320\025.\320.B\300!\3006\310\021\330\014\017\320\017 \240\001\240\033\250A\330\020\036\230g\320%9\270\021\270+\300Q\340\020\036\230g\240Q\340\014\020\320\020\"\240!\330\014\025\220Q\330\014\023\220:\230S\240\006\240a\330\014\032\230'\240\021\330\010'\240q\330\014\020\320\020 \240\010\250\r\260Q\200A\330\010\t\210\025\210a\210q\360\024\000\t\020\210q\200A\360\006\000\t\022\320\021.\250a\250t\260;\270a\270q\330\010\017\210q\220\006\220a\220s\230$\230e\2405\250\001\250\021\200A\330\027\030\330\010\036\230c\240\021\330\010\017\210q\200A\330\032(\250\006\250f\260A\330\010\031\230\023\230A\230V\2401\330\010\017\210q\200A\330!\"\360\010\000\t\r\320\014\037\230q\330\010)\250\021\330\014\020\320\020!\320!8\270\007\270v\300Q\200A\330\010'\240q\250\004\250A\320\004\034\230A\330\010\030\230\001\360\016\000\t\023\320\022'\240q\250\004\250K\260q\270\001\330\010\014\210E\220\025\220a\220q\330\014\023\320\023(\250\001\250\027\260\001\260\022\2601\330\014\017\210u\220C\220q\330\020\033\2301\340\020\031\230\021\330\020\033\2306\240\027\250\001\330\014\017\210w\220a\220r\230\031\240#\240T\250\021\250!\330\020\032\320\032,\250A\250W\260A\260R\260q\340\020\032\230'\240\021\240\"\240A\330\014\017\210w\220a\220{\240!\2408\2509\260I\270Q\330\010\017\210q\200A\330$/\250q\330\010\014\210K\220q\230\005\230Q\200A\330\010\017\210w\220a\220q\200\001\330\037/\320/B\300!\330\004\013\2104\320\017!\240\021\240!\320\004)\250\030""\260\021\330\010\034\230C\230w\240a\330\010\037\320\0371\260\021\260'\270\031\300!\330\010)\250\021\340\010\031\230\021\360\006\000\t*\250\021\330\010\016\210m\2303\230a\330\014.\250a\330\020\024\220A\330\020\021\330\020\021\330\020\021\220\021\330\020\021\330\014\020\220\005\220U\230!\2301\330\020 \240\001\240\026\240q\250\004\250A\330\020\024\220A\220U\230!\330\020\031\230\021\330\020\024\220G\2301\230F\240'\250\021\330\014\034\230A\330\010\017\210q\320\004+\320+D\300H\310A\340\010\022\320\022-\250Q\250d\260+\270Y\320FZ\320Z[\320[\\\330\010\017\210w\220m\2401\320\004 \320 D\300M\320QZ\320Z[\360\014\000\t\014\2109\220C\220q\330\014\023\220?\240!\340\014\025\220X\230W\240A\330\014\023\320\023*\250!\2507\260)\2701\340\010\021\320\021$\240A\240T\250\033\260I\270V\3006\310\021\330\010\013\2101\330\014\026\220a\330\014\023\2207\230&\240\001\240\027\250\002\250!\330\014\017\210u\220C\220q\330\020\021\330\014\r\330\020#\2401\240D\250\013\2609\270F\300!\3008\3101\330\020\031\230\024\230R\230w\240g\250Q\250a\330\020\027\220q\340\020\024\220A\220Q\330\010\017\210q\320\004\036\320\036/\320/F\300i\310q\330\010\"\240(\250!\330\010\013\320\013\034\230A\230\\\250\021\330\014\033\2308\320#7\260q\270\014\300A\330\010\032\230!\2304\230{\250%\250z\3209I\310\021\320\004'\240}\260H\270A\330\010\017\320\017+\2501\250D\3200B\300$\300k\320QR\200\001\330/<\270H\300A\330\004\013\2104\320\0171\260\021\260!\320\000\034\230H\240A\330\004\030\230\003\2307\240!\330\004\033\320\033-\250Q\250g\260Y\270a\330\004%\320%:\270!\2701\330\004\034\320\0341\260\021\260!\330\004\007\200u\210C\210q\330\010\017\210q\330\004\r\210Q\330\004\013\2106\220\027\230\001\200\001\330'<\270H\300A\340\004\016\320\016-\250Q\250d\260+\270Q\330\004\007\200x\210s\220!\330\010\017\210q\330\004\013\2101\320\004,\250H\260A\330\010\017\320\017!\240\021\320\">\270a\270t\300;\310a\320\004,\250H\260A\330\010\030\230\001\340\010)\250\021\330\010(\250\001\340\010\016\210l\230#\230Q\330\014(\250\001\250\024\250[\270\007\270~\310Q""\310m\320[\\\330\014\020\220\005\220U\230!\2301\330\020\023\2207\230!\230<\240q\250\006\250a\250r\260\030\270\026\270q\300\002\300!\330\014\034\230A\330\010\017\210q\320\000\034\230I\240Q\330\004\017\320\017#\2401\240D\250\001\330\004\017\210y\230\001\230\021\320\004,\250I\260Q\330\010\017\320\0176\260a\260t\270<\300t\3101\320\004,\250K\3207V\320V^\320^_\330\010\013\2105\220\003\2203\220a\220q\330\014\022\220*\230A\230Q\330\010\017\320\017+\2501\250D\260\013\2707\300&\310\001\200\001\330\004\n\210+\220Q\320\004\025\220Q\330\010\013\2102\210R\210r\220\023\220B\220c\230\024\230Q\330\014\023\2201\330\010\014\210J\220a\220t\230:\240Q\330\010\013\2102\210S\220\004\220A\330\014\020\220\001\330\010\017\210q\320\004\035\230Q\330\036$\320$4\260G\2701\330\010\032\230!\330\014\020\220\r\230V\2403\240a\240w\250m\2701\330\010\013\2104\320\017.\250a\250t\2601\330\014\r\200\001\330$-\250Q\330\004\013\2104\210q\320\004\025\220Q\330\010\022\220!\2204\220z\240\021\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\000\030\230\001\330\004\034\320\034-\250Q\330\004\030\230\001\330\004\013\2106\220\027\230\001\320\004*\320*=\270Q\330\010\013\2109\220C\220s\230!\2301\330\014\022\220*\230A\230Q\330\010\017\320\017&\240a\240t\250;\260a\320\004\035\230Q\330\010\024\220A\220T\230\032\2405\250\001\320\004 \240\r\250Q\330\010\035\230Q\230d\320\"5\260T\270\033\300A\320\004\035\230Q\330\010\017\320\017!\240\021\240$\240a\320\000\031\230\021\330\032\033\340,-\330\004\013\320\013\035\230Q\230d\240+\250Q\200\001\340\004\013\320\013\035\230Q\230e\240;\250a\320\004\"\240(\250!\360\006\000\t\023\320\022(\250\001\250\024\250[\270\005\270V\3001\330\010\013\2101\330\014\025\220Q\330\014\023\2206\230\027\240\001\340\014\023\2201\320\004(\250\010\260\001\360\006\000\t\022\220\024\220W\230A\330\010\022\320\022-\250Q\250d\260+\270W\300H\310C\310q\320PY\320YZ\320Z[\330\010\017\210w\220m\2401\320\004%\240X\250Q\340\010\022\320\022+\2501\250D\260\013\2705\300\001\300\021\330\010\013\2101\330\014\023\220<""\230q\330\020\027\220q\330\020\027\220q\330\020\027\220q\330\020\027\220q\360\006\000\r\024\2201\200\001\330,=\270X\300Q\330\004\013\2104\320\017.\250a\250q\320\004(\250\r\260X\270Q\330\010\017\320\017,\250A\250T\3201D\300D\310\013\320ST\320\004-\320-=\270X\300Q\330\010\034\230I\240W\250A\330\010\032\230!\330\010+\320+C\3001\300G\3101\330\010\"\240!\340\010\035\230Q\340\010)\250\021\330\0100\260\001\330\010\016\210f\220C\220q\330\014)\250\021\250$\250a\330\020\027\220~\240Q\330\020\021\220\027\320\030(\250\001\250\021\330\014\020\220\005\220U\230!\2301\330\020\030\230\007\230q\330\024#\2401\240N\260!\2602\260X\270^\3101\310B\310a\330\030&\240a\240r\320)@\300\016\310a\310r\320QR\330\030,\250A\250^\2701\270B\270a\330\014\034\230A\330\010\017\210z\230\021\320\004-\320-=\270X\300Q\330\010\034\230I\240W\250A\330\010\032\230!\330\010+\320+C\3001\300G\3101\330\010\"\240!\340\010\035\230Q\340\010)\250\021\330\010\016\210f\220C\220q\330\014)\250\021\250$\250k\270\027\300\016\310a\330\020\021\220\027\230\001\330\014\020\220\005\220U\230!\2301\330\020\030\230\007\230q\320 2\260!\260>\300\021\300\"\300H\310N\320Z[\320[]\320]^\330\014\034\230A\330\010\017\210q\320\004\035\230Y\240a\330\010\017\210v\220Q\220h\230a\320\004)\250\021\330\010\030\230\001\230\024\230Z\240u\250A\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\004\037\230{\250!\330\010\030\230\001\230\024\230Z\240w\250a\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\230!\220\001\320\000\020\220\016\230a\330\010\022\220!\330\010\021\220\021\360\014\000\005\014\2101\330\004\022\220!\330\004\005\330\010\013\2101\330\014\020\220\t\230\030\240\027\250\001\330\020\023\220:\230Q\230g\240Q\330\024\034\230A\340\024\034\230C\230q\240\001\330\014\032\230/\250\026\250q\260\005\260R\260q\330\014\020\220\001\330\014\020\220\006\220i\230x\240v\250Q\330\020\027\220r\230\022\2306\240\021\330\020\031\230\024\230W\240A\330\020\023\220:\230Q\230g\240Q\330\024*\250!\2508\2603\260a\260y\300\001\300\021\330\024\030\230\t\240""\021\330\024\037\230q\240\005\240Q\330\024\031\230\021\340\024\030\230\007\320\0371\260\021\260)\2701\330\024\030\230\007\230u\240I\250Q\330\030\034\230I\240Q\330\030\034\230I\240Q\330\030\034\230G\2401\330\030#\2401\240E\250\021\330\030\035\230Q\330\010\013\2101\330\014\020\220\003\220:\230Y\240a\240w\250b\260\001\330\020\031\230\026\230w\240a\330\020\031\230\021\230%\230q\330\014\025\220Q\220b\230\002\230%\230q\330\014\022\220-\230q\240\004\240K\250v\260]\300-\310v\320UV\330\014\017\210t\2201\330\020\026\220l\240!\2401\340\014\024\220A\220T\230\033\240F\250-\260}\300A\330\010\013\2104\320\017.\250a\250v\260Q\330\014\r\340\010\013\210<\220w\230a\330\014\020\220\001\220\021\200\001\330%.\250a\330\004\013\2104\210q\200\001\330\035&\240a\330\004\013\2104\210q\200\001\330%:\270(\300!\330\004\013\320\013\036\230a\320\037<\270A\270T\300\033\310A\320\004\026\220a\330\010\014\210C\210q\330\010\t\210\033\220K\230q\240\004\240A\330\010\017\210q\320\004.\250a\330\010\034\230E\240\027\250\001\330\010\032\230!\330\010\036\230a\330\014\020\220\r\320\0352\260!\3203E\300Q\300g\310Q\200\001\330%.\250a\330\004\013\320\013(\250\001\250\024\250Q\320\000\021\220\035\320\036.\250a\330\004\017\320\017 \240\001\240\024\240[\260\005\260Q\330\004\007\200y\220\003\2201\330\010\016\210l\230!\2301\330\004\017\210y\230\001\230\021\320\004\036\230a\330\010\025\220Q\220d\230*\240E\250\021\320\004\"\240,\250a\330\010\021\220\024\220W\230A\330\010\034\320\034.\250a\250y\270\001\330\010\035\230Q\230d\240+\250U\260!\320\004)\250\030\260\021\340\010\017\320\017.\250a\250t\260;\270a\330\010\023\2209\230A\230Q\210\001\340\014\026\220b\230\001\230\024\230Q\330\014\017\210q\330\020\033\2308\2401\240A\330\014\017\210x\220w\230a\330\020\030\230\005\230Q\230i\240q\330\020\026\220d\230!\2301\330\014\023\2204\220r\230\030\240\021\320\004)\320):\270!\340\010\021\220\035\230g\240Q\330\010\021\220\035\230g\240Q\330\010\021\220\031\230'\240\021\330\010\021\220\032\2307\240!\330\010\017\320\0170\260\001\260\024""\3205H\310\001\310\021\320\004)\320):\270!\340\010\021\220\035\230g\240Q\330\010\021\220\035\230g\240Q\330\010\021\220\031\230'\240\021\330\010\021\220\032\2307\240!\330\010\017\320\017/\250q\260\004\3204F\300a\300q\200\001\330!.\250h\260a\330\004\013\2104\320\017#\2401\240A\320\004&\240h\250a\340\010\022\320\022,\250A\250T\260\033\270E\300\021\300#\300Q\300a\330\010\017\210q\220\003\2206\230\035\240a\320\004&\240h\250a\330\010\017\320\017\037\230q\240\013\250:\260T\270\021\320\004#\240=\260\001\330\010\017\320\017!\240\021\240$\240k\260\021\320\004&\240k\260\034\270Z\300q\330\010\021\320\021#\2401\240C\240w\250a\250{\270!\330\010\017\320\0170\260\001\330\014\020\220\014\230D\240\013\2508\2601\200\001\340\016\031\230\025\230n\250A\330\010\030\320\030)\250\021\330\004\013\2104\320\017)\250\021\250%\250~\270Q\200\001\340\016\031\230\025\230n\250L\270\001\330\004\013\2104\320\017(\250\001\250\025\250a\230q\200\017\210q\360\006\000\005\006\360\032\000\005\014\2101\200\001\330&/\250q\330\004\013\2104\210q\200\001\330\036'\240q\330\004\013\2104\210q\320\004-\250[\270\017\300q\330\010\013\2105\220\003\2203\220a\220q\330\014\022\220*\230A\230Q\330\010\"\240!\340\010\032\230!\340\010)\250\021\330\010\016\210f\220C\220q\330\014)\250\021\250$\250k\270\027\300\006\300a\330\020\021\220\027\230\001\330\014\020\220\005\220U\230!\2301\330\020\025\220W\230A\230_\250A\250[\270\001\270\022\320;S\320S^\320^_\320_a\320ab\330\014\034\230A\330\010\017\210q\320\004'\240q\330\010\t\330\010\013\210:\220S\230\001\330\014\030\320\030,\250A\330\014*\250!\250;\3206I\310\026\310q\330\014*\250!\250;\3206I\310\026\310q\330\014+\2501\250K\3207K\3106\320QR\330\014/\250q\260\013\320;S\320SY\320YZ\330\014-\250Q\250k\3209O\310v\320UV\360\006\000\t\022\220\023\220A\330\010\021\220\023\220A\330\010\022\220#\220Q\330\010\023\2203\220a\330\010\024\220C\220q\360\006\000\t\020\210z\230\027\240\001\330\010\017\210z\230\027\240\001\330\010\017\210{\230'\240\021\330\010\017\210|\2307\240!\330\010\017\210}\230G""\2401\340\010\032\230!\2304\230{\250%\250{\270'\300\021\300!\320\004\037\230q\330!\"\330!*\250!\330#)\250\021\330 /\250q\330\010#\2408\2501\330\010'\240q\330\010\013\210;\220g\230Q\330\014\033\230:\240W\250A\330\010\033\2301\230D\240\001\330\034\035\330\034'\240q\330\034\035\330\034\035\330\034\035\320\004'\240q\330\010\027\220q\230\004\230J\240e\2501\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\004*\250(\260!\360\010\000\t\022\220\031\230'\240\021\330\010\027\320\027/\250q\260\007\260y\300\001\330\010)\250\021\330\014\020\220\013\230>\250\021\250!\340\010\017\210{\230!\330\014\023\2201\330\014\023\2201\330\014\023\2201\320\004\030\230\001\330\010\017\210r\220\023\220A\330\014\022\220*\230A\330\010\022\220!\2204\220z\240\021\330\010\013\2104\320\017+\2501\250D\260\001\330\014\r\320\004)\250\021\360\n\000\t\020\210s\220!\2201\330\010\030\320\030)\250\026\250q\260\005\260R\260q\330\010\013\2104\210q\330\014\r\340\010\t\330\014\020\220\004\220F\230*\240I\250Q\250j\270\006\270a\330\020\031\230\024\230W\240A\330\020\031\230\027\320 2\260!\2609\270A\330\020\031\230\031\240!\330\020\035\230Q\230e\2401\330\014\"\240!\2404\240{\260/\300\021\340\014\020\220\001\220\021\320\004\032\230!\330\010\017\210t\2205\230\001\320\004,\320,?\270v\300V\3101\330\010\034\230C\230w\240a\330\010\037\320\0371\260\021\260'\270\031\300!\330\010+\2501\340\010\031\230\021\360\006\000\t*\250\021\330\010\016\210o\230S\240\001\330\0141\260\021\330\020\024\220A\330\020\021\330\020\021\330\020\021\330\020\021\220\021\330\020\021\330\014\020\220\005\220U\230!\2301\330\020 \240\001\240\026\240q\250\004\250A\330\020\024\220A\220U\230!\330\020\031\230\021\330\020\024\220G\2301\230F\240'\250\021\330\014\034\230A\330\010\017\210q\320\004(\250\010\260\001\360\006\000\t\022\220\026\220w\230a\330\010\022\320\022+\2501\250D\260\013\2707\300(\310#\310Q\310i\320WX\320XY\330\010\017\210w\220m\2401\320\004'\240x\250q\330\010\017\320\017*\250!\2504\250{\270!\320\004\030\230\001\330\010\017\210x\220q\230""\004\230G\2404\240x\250t\2606\270\024\270Q\320\004\037\230x\240q\330\010\017\210\177\230a\230t\240:\250U\260!\320\004/\250x\260q\330\010\037\230t\2401\330\010\033\2301\340\010)\250\021\330\010(\250\001\340\010\016\210l\230#\230Q\330\014*\250!\2506\260\037\300\016\310a\310}\320\\]\330\014\020\220\005\220U\230!\2301\330\020\026\220g\230Q\230e\2409\250A\250X\260Q\260a\340\010\017\210~\230Q\330\014\023\2201\330\014\024\320\0243\2601\260F\270!\330\014\022\320\022%\240Q\320&C\3001\300F\310!";
    PyObject *data = NULL;
    CYTHON_UNUSED_VAR(__Pyx_DecompressString);
    #endif
    PyObject **stringtab = __pyx_mstate->__pyx_string_tab;
    Py_ssize_t pos = 0;
    for (int i = 0; i < 1052; i++) {
      Py_ssize_t bytes_length = index[i].length;
      PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
      if (likely(string) && i >= 126) PyUnicode_InternInPlace(&string);
      if (unlikely(!string)) {
        Py_XDECREF(data);
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
      stringtab[i] = string;
      pos += bytes_length;
    }
    for (int i = 1052; i < 1237; i++) {
      Py_ssize_t bytes_length = index[i].length;
      PyObject *string = PyBytes_FromStringAndSize(bytes + pos, bytes_length);
      stringtab[i] = string;
      pos += bytes_length;
      if (unlikely(!string)) {
        Py_XDECREF(data);
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
    }
    Py_XDECREF(data);
    for (Py_ssize_t i = 0; i < 1237; i++) {
      if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
    }
    #if CYTHON_IMMORTAL_CONSTANTS
    {
      PyObject **table = stringtab + 1052;
      for (Py_ssize_t i=0; i<185; ++i) {
        #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
        #if PY_VERSION_HEX < 0x030E0000
        if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
        #else
        if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
        #endif
        {
          Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
        }
        #else
        Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
        #endif
      }
    }
    #endif
  }
  {
    PyObject **numbertab = __pyx_mstate->__pyx_number_tab + 0;
    int8_t const cint_constants_1[] = {0,-1,1};
    int16_t const cint_constants_2[] = {16384};
    int32_t const cint_constants_4[] = {65535L};
    for (int i = 0; i < 5; i++) {
      numbertab[i] = PyLong_FromLong((i < 3 ? cint_constants_1[i - 0] : (i < 4 ? cint_constants_2[i - 3] : cint_constants_4[i - 4])));
      if (unlikely(!numbertab[i])) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  #if CYTHON_IMMORTAL_CONSTANTS
  {
    PyObject **table = __pyx_mstate->__pyx_number_tab;
    for (Py_ssize_t i=0; i<5; ++i) {
      #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
      #if PY_VERSION_HEX < 0x030E0000
      if (_Py_IsOwnedByCurrentThread(table[i]) && Py_REFCNT(table[i]) == 1)
      #else
      if (PyUnstable_Object_IsUniquelyReferenced(table[i]))
      #endif
      {
        Py_SET_REFCNT(table[i], _Py_IMMORTAL_REFCNT_LOCAL);
      }
      #else
      Py_SET_REFCNT(table[i], _Py_IMMORTAL_INITIAL_REFCNT);
      #endif
    }
  }
  #endif
  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: init_codeobjects ### */
typedef struct {
    unsigned int argcount : 3;
    unsigned int num_posonly_args : 1;
    unsigned int num_kwonly_args : 1;
    unsigned int nlocals : 5;
    unsigned int flags : 10;
    unsigned int first_line : 10;
} __Pyx_PyCode_New_function_description;
/* NewCodeObj.proto */
static PyObject* __Pyx_PyCode_New(
        const __Pyx_PyCode_New_function_description descr,
        PyObject * const *varnames,
        PyObject *filename,
        PyObject *funcname,
        PyObject *line_table,
        PyObject *tuple_dedup_map
);


static int __Pyx_CreateCodeObjects(__pyx_mstatetype *__pyx_mstate) {
  PyObject* tuple_dedup_map = PyDict_New();
  if (unlikely(!tuple_dedup_map)) return -1;
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_VARARGS|CO_VARKEYWORDS), 45};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_args, __pyx_mstate->__pyx_n_u_kwargs, __pyx_mstate->__pyx_n_u_message};
    __pyx_mstate_global->__pyx_codeobj_tab[0] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_wrapper, __pyx_mstate->__pyx_kp_b_iso88591_b_Q_q_81A_xwa_Qiq_d_1_4r, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[0])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 44};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_wrapper, __pyx_mstate->__pyx_n_u_wrapper};
    __pyx_mstate_global->__pyx_codeobj_tab[1] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_decorator, __pyx_mstate->__pyx_kp_b_iso88591_A_aq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[1])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 169};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[2] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591__12, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[2])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 100};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_k, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[3] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591__13, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[3])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 103};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_k, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[4] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591__13, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[4])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS|CO_GENERATOR), 109};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_k, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[5] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_kp_b_iso88591_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[5])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {0, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 32};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[6] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_version_string, __pyx_mstate->__pyx_kp_b_iso88591_Q_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[6])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 41};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_replacement, __pyx_mstate->__pyx_n_u_decorator, __pyx_mstate->__pyx_n_u_decorator};
    __pyx_mstate_global->__pyx_codeobj_tab[7] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_deprecated, __pyx_mstate->__pyx_kp_b_iso88591_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[7])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 27};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[8] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_copy, __pyx_mstate->__pyx_kp_b_iso88591_a_Cq_Kq_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[8])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 32};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[9] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_copy_2, __pyx_mstate->__pyx_kp_b_iso88591_t5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[9])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 35};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[10] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_clear, __pyx_mstate->__pyx_kp_b_iso88591_A_AT, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[10])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 41};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[11] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_invert, __pyx_mstate->__pyx_kp_b_iso88591_A_Qd, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[11])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 44};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[12] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_is_inverted, __pyx_mstate->__pyx_kp_b_iso88591_Q_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[12])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 54};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[13] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_add, __pyx_mstate->__pyx_kp_b_iso88591_Q_4z_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[13])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 59};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_first, __pyx_mstate->__pyx_n_u_last};
    __pyx_mstate_global->__pyx_codeobj_tab[14] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_add_range, __pyx_mstate->__pyx_kp_b_iso88591_Zwa_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[14])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 64};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[15] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_remove, __pyx_mstate->__pyx_kp_b_iso88591_r_A_A_4z_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[15])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 71};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[16] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_discard, __pyx_mstate->__pyx_kp_b_iso88591_4z_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[16])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 76};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_first, __pyx_mstate->__pyx_n_u_last};
    __pyx_mstate_global->__pyx_codeobj_tab[17] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_del_range, __pyx_mstate->__pyx_kp_b_iso88591_Zwa_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[17])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 81};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[18] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_is_equal, __pyx_mstate->__pyx_kp_b_iso88591_xq_at_U, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[18])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 89};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_larger_set};
    __pyx_mstate_global->__pyx_codeobj_tab[19] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_issubset, __pyx_mstate->__pyx_kp_b_iso88591_81_q_Jj, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[19])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 92};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_smaller_set};
    __pyx_mstate_global->__pyx_codeobj_tab[20] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_issuperset, __pyx_mstate->__pyx_kp_b_iso88591_ha_q_T, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[20])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 95};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[21] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_set_2, __pyx_mstate->__pyx_kp_b_iso88591_4z_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[21])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 98};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[22] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_set, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_s_Qa_Q_4z_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[22])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 108};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[23] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_update, __pyx_mstate->__pyx_kp_b_iso88591_Q_AT_5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[23])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 111};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[24] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_update_2, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_s_Q_4z_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[24])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 125};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[25] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_intersection_update, __pyx_mstate->__pyx_kp_b_iso88591_ZuA_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[25])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 134};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[26] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_difference_update, __pyx_mstate->__pyx_kp_b_iso88591_q_q_Je1_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[26])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 143};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[27] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__set_pxi, __pyx_mstate->__pyx_n_u_symmetric_difference_update, __pyx_mstate->__pyx_kp_b_iso88591_1_1D_q_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[27])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[28] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[28])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[29] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[29])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[30] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[30])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[31] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[31])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 27};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_c};
    __pyx_mstate_global->__pyx_codeobj_tab[32] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_copy, __pyx_mstate->__pyx_kp_b_iso88591_a_Cq_Kq_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[32])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 32};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[33] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_copy_2, __pyx_mstate->__pyx_kp_b_iso88591_t5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[33])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 35};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[34] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_update, __pyx_mstate->__pyx_kp_b_iso88591_a_Qd_E, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[34])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 38};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other, __pyx_mstate->__pyx_n_u_k, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[35] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_update_2, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_s_uF_4z_A_4_1D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[35])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 48};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[36] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_clear, __pyx_mstate->__pyx_kp_b_iso88591_A_AT, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[36])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 57};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_other};
    __pyx_mstate_global->__pyx_codeobj_tab[37] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_is_equal, __pyx_mstate->__pyx_kp_b_iso88591_xq_at_U, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[37])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 70};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_k, __pyx_mstate->__pyx_n_u_v};
    __pyx_mstate_global->__pyx_codeobj_tab[38] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_get, __pyx_mstate->__pyx_kp_b_iso88591_Q_2Rr_Bc_Q_1_Jat_Q_2S_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[38])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 96};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[39] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_items, __pyx_mstate->__pyx_kp_b_iso88591_A_waq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[39])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 99};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
    __pyx_mstate_global->__pyx_codeobj_tab[40] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_keys, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[40])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 102};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_genexpr, __pyx_mstate->__pyx_n_u_genexpr};
    __pyx_mstate_global->__pyx_codeobj_tab[41] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__map_pxi, __pyx_mstate->__pyx_n_u_values, __pyx_mstate->__pyx_kp_b_iso88591_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[41])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[42] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[42])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[43] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[43])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[44] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[44])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[45] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[45])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 19};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_filename, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_blob, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[46] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__blob_pxi, __pyx_mstate->__pyx_n_u_from_file_path, __pyx_mstate->__pyx_kp_b_iso88591_A_1_Biq_q_q_5_1_q_2_1_AQ_L_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[46])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[47] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[47])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[48] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[48])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[49] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[49])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[50] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[50])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[51] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[51])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[52] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[52])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 114};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[53] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_create, __pyx_mstate->__pyx_kp_b_iso88591_A_3a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[53])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 122};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[54] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_reset, __pyx_mstate->__pyx_kp_b_iso88591_A_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[54])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 125};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[55] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_clear_contents, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[55])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 261};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_cstr};
    __pyx_mstate_global->__pyx_codeobj_tab[56] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_set_language_from_ot_tag, __pyx_mstate->__pyx_kp_b_iso88591_a_E_a_2_3EQgQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[56])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 267};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_cstr};
    __pyx_mstate_global->__pyx_codeobj_tab[57] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_set_script_from_ot_tag, __pyx_mstate->__pyx_kp_b_iso88591_A_E_A_0_1C1G1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[57])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 273};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_codepoints, __pyx_mstate->__pyx_n_u_item_offset, __pyx_mstate->__pyx_n_u_item_length, __pyx_mstate->__pyx_n_u_size, __pyx_mstate->__pyx_n_u_hb_codepoints, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[58] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_add_codepoints, __pyx_mstate->__pyx_kp_b_iso88591_AQ_4q_q_1_E_aq_z__F_q_AQ_4_at1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[58])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 289};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_text, __pyx_mstate->__pyx_n_u_item_offset, __pyx_mstate->__pyx_n_u_item_length};
    __pyx_mstate_global->__pyx_codeobj_tab[59] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_add_utf8, __pyx_mstate->__pyx_kp_b_iso88591_Q_4G1_V3awm1_4_at1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[59])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 6, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 296};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_text, __pyx_mstate->__pyx_n_u_item_offset, __pyx_mstate->__pyx_n_u_item_length, __pyx_mstate->__pyx_n_u_ucs4_buffer, __pyx_mstate->__pyx_n_u_text_length};
    __pyx_mstate_global->__pyx_codeobj_tab[60] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_add_str, __pyx_mstate->__pyx_kp_b_iso88591_A_37_1_s_Qa_4q_j_q_A_1_t_2_4q_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[60])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 320};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[61] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_guess_segment_properties, __pyx_mstate->__pyx_kp_b_iso88591_A_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[61])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 323};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_callback};
    __pyx_mstate_global->__pyx_codeobj_tab[62] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_set_message_func, __pyx_mstate->__pyx_kp_b_iso88591_4_M_RS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[62])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 327};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_format, __pyx_mstate->__pyx_n_u_flags, __pyx_mstate->__pyx_n_u_num_glyphs, __pyx_mstate->__pyx_n_u_start, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_consumed, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[63] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__buffer_pxi, __pyx_mstate->__pyx_n_u_serialize, __pyx_mstate->__pyx_kp_b_iso88591_A_22Gq_00DMQR_1D_A_fBa_A_A_y_1_d, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[63])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[64] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[64])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[65] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[65])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 27};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[66] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_to_int, __pyx_mstate->__pyx_kp_b_iso88591_xq_G4xt6_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[66])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 30};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_r, __pyx_mstate->__pyx_n_u_g, __pyx_mstate->__pyx_n_u_b, __pyx_mstate->__pyx_n_u_a};
    __pyx_mstate_global->__pyx_codeobj_tab[67] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_from_int, __pyx_mstate->__pyx_kp_b_iso88591_A_AQ_aq_Qa_aq_uAS_3a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[67])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 151};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_blob, __pyx_mstate->__pyx_n_u_index, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[68] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_create, __pyx_mstate->__pyx_kp_b_iso88591_A_fA_AV1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[68])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 156};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[69] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_create_for_tables, __pyx_mstate->__pyx_kp_b_iso88591_A_1_AQ_L_1_7_Q_Qd_Qc_fA_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[69])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 206};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_blob};
    __pyx_mstate_global->__pyx_codeobj_tab[70] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_reference_table, __pyx_mstate->__pyx_kp_b_iso88591_81_Cwa_1_6at_a_5_1_9AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[70])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 245};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_variation_selector, __pyx_mstate->__pyx_n_u_s};
    __pyx_mstate_global->__pyx_codeobj_tab[71] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_variation_unicodes, __pyx_mstate->__pyx_kp_b_iso88591_5XQ_Cq_4_Naq_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[71])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 313};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[72] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_is_glyph_extended_math_shape, __pyx_mstate->__pyx_kp_b_iso88591_2_1_k, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[72])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 321};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_ret, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset, __pyx_mstate->__pyx_n_u_layer_count, __pyx_mstate->__pyx_n_u_layers};
    __pyx_mstate_global->__pyx_codeobj_tab[73] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_glyph_color_layers, __pyx_mstate->__pyx_kp_b_iso88591_HA_l_Q_Qm_U_1_7_q_ar_q_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[73])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 338};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_palette_index, __pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_colors, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset, __pyx_mstate->__pyx_n_u_color_count, __pyx_mstate->__pyx_n_u_c_colors};
    __pyx_mstate_global->__pyx_codeobj_tab[74] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_color_palette, __pyx_mstate->__pyx_kp_b_iso88591_xq_t1_1_l_Q_6_a_U_1_gQe9AXQa_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[74])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 364};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_color_index, __pyx_mstate->__pyx_n_u_name_id};
    __pyx_mstate_global->__pyx_codeobj_tab[75] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_color_palette_color_get_name_id, __pyx_mstate->__pyx_kp_b_iso88591_81_8_83a_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[75])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 375};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[76] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_glyph_has_color_paint, __pyx_mstate->__pyx_kp_b_iso88591_81_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[76])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 382};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_blob};
    __pyx_mstate_global->__pyx_codeobj_tab[77] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_glyph_color_svg, __pyx_mstate->__pyx_kp_b_iso88591_at_a_9AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[77])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 396};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[78] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_layout_glyph_class, __pyx_mstate->__pyx_kp_b_iso88591_HA_at_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[78])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 407};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_lookup_index, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_alternates, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset, __pyx_mstate->__pyx_n_u_alternate_count, __pyx_mstate->__pyx_n_u_c_alternates};
    __pyx_mstate_global->__pyx_codeobj_tab[79] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_lookup_glyph_alternates, __pyx_mstate->__pyx_kp_b_iso88591_8_HA_q_A_c_4AT_NRYYZ_U_1_aq_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[79])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 12, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 421};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_script_index, __pyx_mstate->__pyx_n_u_language_index, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_feature_count, __pyx_mstate->__pyx_n_u_c_tags, __pyx_mstate->__pyx_n_u_tags, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset};
    __pyx_mstate_global->__pyx_codeobj_tab[80] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_language_feature_tags, __pyx_mstate->__pyx_kp_b_iso88591_A_06a28_1_Cwa_1_nCq_2_A_U_1_q_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[80])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 11, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 449};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_script_index, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_language_count, __pyx_mstate->__pyx_n_u_c_tags, __pyx_mstate->__pyx_n_u_tags, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset};
    __pyx_mstate_global->__pyx_codeobj_tab[81] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_script_language_tags, __pyx_mstate->__pyx_kp_b_iso88591_vV1_Cwa_1_1_oS_1_A_U_1_q_A_AU_G, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[81])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 10, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 474};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_script_count, __pyx_mstate->__pyx_n_u_c_tags, __pyx_mstate->__pyx_n_u_tags, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset};
    __pyx_mstate_global->__pyx_codeobj_tab[82] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_table_script_tags, __pyx_mstate->__pyx_kp_b_iso88591_Cwa_1_m3a_a_A_U_1_q_A_AU_G1F_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[82])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 498};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_ret, __pyx_mstate->__pyx_n_u_num_entries, __pyx_mstate->__pyx_n_u_entries, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_language, __pyx_mstate->__pyx_n_u_name_id};
    __pyx_mstate_global->__pyx_codeobj_tab[83] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_list_names, __pyx_mstate->__pyx_kp_b_iso88591_A_q_Kq_E_aq_1_uCq_1_6_war_T_AWA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[83])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 521};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name_id, __pyx_mstate->__pyx_n_u_language, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_lang, __pyx_mstate->__pyx_n_u_text, __pyx_mstate->__pyx_n_u_length, __pyx_mstate->__pyx_n_u_result};
    __pyx_mstate_global->__pyx_codeobj_tab[84] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__face_pxi, __pyx_mstate->__pyx_n_u_get_name, __pyx_mstate->__pyx_kp_b_iso88591_DMQZZ_9Cq_XWA_7_1_AT_IV6_1_a_7, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[84])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[85] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[85])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[86] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[86])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 65};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_gid};
    __pyx_mstate_global->__pyx_codeobj_tab[87] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_get_glyph_shape, __pyx_mstate->__pyx_kp_b_iso88591_A_q_Kq_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[87])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 69};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_draw_data};
    __pyx_mstate_global->__pyx_codeobj_tab[88] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_draw_glyph, __pyx_mstate->__pyx_kp_b_iso88591_A_1_Kq_V1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[88])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 73};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_func_p, __pyx_mstate->__pyx_n_u_user_data_p};
    __pyx_mstate_global->__pyx_codeobj_tab[89] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_set_move_to_func, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_AV1_A_A_g_9_Q_gQ_Q_S_a_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[89])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 97};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_func_p, __pyx_mstate->__pyx_n_u_user_data_p};
    __pyx_mstate_global->__pyx_codeobj_tab[90] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_set_line_to_func, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_AV1_A_A_g_9_Q_gQ_Q_S_a_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[90])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 121};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_func_p, __pyx_mstate->__pyx_n_u_user_data_p};
    __pyx_mstate_global->__pyx_codeobj_tab[91] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_set_cubic_to_func, __pyx_mstate->__pyx_kp_b_iso88591_A_a_AV1_B_6_A_g_9_Q_gQ_Q_S_a_q_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[91])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 149};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_func_p, __pyx_mstate->__pyx_n_u_user_data_p};
    __pyx_mstate_global->__pyx_codeobj_tab[92] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_set_quadratic_to_func, __pyx_mstate->__pyx_kp_b_iso88591_A_3_AV1_a_22FavQ_A_g_9_Q_gQ_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[92])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 175};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data, __pyx_mstate->__pyx_n_u_func_p, __pyx_mstate->__pyx_n_u_user_data_p};
    __pyx_mstate_global->__pyx_codeobj_tab[93] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__draw_pxi, __pyx_mstate->__pyx_n_u_set_close_path_func, __pyx_mstate->__pyx_kp_b_iso88591_A_1_AV1_A_00DAV1_A_g_9_Q_gQ_A_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[93])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[94] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[94])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[95] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[95])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[96] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[96])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[97] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[97])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 279};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[98] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_push_transform_func, __pyx_mstate->__pyx_kp_b_iso88591_A_A_a_WF, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[98])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 293};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[99] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_pop_transform_func, __pyx_mstate->__pyx_kp_b_iso88591_A_1_Q_G6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[99])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 301};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[100] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_color_glyph_func, __pyx_mstate->__pyx_kp_b_iso88591_A_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[100])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 310};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[101] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_push_clip_glyph_func, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_q_gV1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[101])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 319};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[102] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_push_clip_rectangle_func, __pyx_mstate->__pyx_kp_b_iso88591_A_31_B_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[102])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 331};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[103] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_pop_clip_func, __pyx_mstate->__pyx_kp_b_iso88591_A_a_7wfA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[103])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 339};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[104] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_color_func, __pyx_mstate->__pyx_kp_b_iso88591_A_O1_Q_4G6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[104])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 349};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[105] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_image_func, __pyx_mstate->__pyx_kp_b_iso88591_A_O1_Q_4G6_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[105])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 363};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[106] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_linear_gradient_func, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_q_gV1_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[106])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 378};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[107] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_radial_gradient_func, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_q_gV1_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[107])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 393};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[108] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_sweep_gradient_func, __pyx_mstate->__pyx_kp_b_iso88591_A_A_a_WF_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[108])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 406};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[109] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_push_group_func, __pyx_mstate->__pyx_kp_b_iso88591_A_9_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[109])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 414};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[110] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_pop_group_func, __pyx_mstate->__pyx_kp_b_iso88591_A_q_8_vQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[110])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 423};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func};
    __pyx_mstate_global->__pyx_codeobj_tab[111] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__paint_pxi, __pyx_mstate->__pyx_n_u_set_custom_palette_color_func, __pyx_mstate->__pyx_kp_b_iso88591_A_4A_C7_PQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[111])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[112] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[112])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[113] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[113])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 178};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[114] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_create, __pyx_mstate->__pyx_kp_b_iso88591_A_1_AQ_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[114])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 267};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_variations, __pyx_mstate->__pyx_n_u_size, __pyx_mstate->__pyx_n_u_hb_variations, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_variation, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_value};
    __pyx_mstate_global->__pyx_codeobj_tab[115] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_variations, __pyx_mstate->__pyx_kp_b_iso88591_s_1_q_Rq_4q_F_IQj_a_WA_2_9A_Qe1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[115])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 287};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[116] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_variation, __pyx_mstate->__pyx_kp_b_iso88591_a_WA_ay_Qd_U, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[116])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 292};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[117] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_name, __pyx_mstate->__pyx_kp_b_iso88591_V1_1_Q_6_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[117])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 302};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[118] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_from_name, __pyx_mstate->__pyx_kp_b_iso88591_WA_Qd_WHCqPYYZZ_wm1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[118])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 309};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_extents, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[119] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_extents, __pyx_mstate->__pyx_kp_b_iso88591_XQ_1D_5_1_q_q_q_q_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[119])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 322};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid};
    __pyx_mstate_global->__pyx_codeobj_tab[120] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_h_advance, __pyx_mstate->__pyx_kp_b_iso88591_xq_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[120])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 325};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid};
    __pyx_mstate_global->__pyx_codeobj_tab[121] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_v_advance, __pyx_mstate->__pyx_kp_b_iso88591_xq_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[121])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 328};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_y, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[122] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_h_origin, __pyx_mstate->__pyx_kp_b_iso88591_ha_AT_E_Qa_q_6_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[122])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 333};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_x, __pyx_mstate->__pyx_n_u_y, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[123] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_v_origin, __pyx_mstate->__pyx_kp_b_iso88591_ha_AT_E_Qa_q_6_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[123])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 338};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_extents, __pyx_mstate->__pyx_n_u_hb_direction, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[124] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_font_extents, __pyx_mstate->__pyx_kp_b_iso88591_q_y_1_1_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[124])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 353};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_unicode, __pyx_mstate->__pyx_n_u_variation_selector, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[125] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_variation_glyph, __pyx_mstate->__pyx_kp_b_iso88591_DHA_Qd_YFZZ_wm1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[125])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 358};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_unicode, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[126] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_nominal_glyph, __pyx_mstate->__pyx_kp_b_iso88591_1D_9AQ_wm1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[126])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 363};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_length, __pyx_mstate->__pyx_n_u_coords, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[127] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_var_coords_normalized, __pyx_mstate->__pyx_kp_b_iso88591_1_2_4_1_q_as_G4uE, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[127])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 370};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_coords, __pyx_mstate->__pyx_n_u_length, __pyx_mstate->__pyx_n_u_coords_2dot14, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[128] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_var_coords_normalized, __pyx_mstate->__pyx_kp_b_iso88591_0_AQ_vQgRq_A_U_1_Qe5_q_2Q_Qd__A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[128])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 385};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_length, __pyx_mstate->__pyx_n_u_coords, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[129] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_var_coords_design, __pyx_mstate->__pyx_kp_b_iso88591_A_at_aq_q_as_e5, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[129])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 391};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_coords, __pyx_mstate->__pyx_n_u_length, __pyx_mstate->__pyx_n_u_c_coords, __pyx_mstate->__pyx_n_u_i};
    __pyx_mstate_global->__pyx_codeobj_tab[130] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_var_coords_design, __pyx_mstate->__pyx_kp_b_iso88591_A_AQ_9Cq_U_1_fAQ_k_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[130])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 405};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[131] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_glyph_to_string, __pyx_mstate->__pyx_kp_b_iso88591_81_q_KuF_vWA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[131])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 412};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_string, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_success};
    __pyx_mstate_global->__pyx_codeobj_tab[132] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_glyph_from_string, __pyx_mstate->__pyx_kp_b_iso88591_wa_1D_7_QiWXXY_wm1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[132])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 419};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_draw_funcs, __pyx_mstate->__pyx_n_u_draw_state, __pyx_mstate->__pyx_n_u_draw_state_p};
    __pyx_mstate_global->__pyx_codeobj_tab[133] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_draw_glyph, __pyx_mstate->__pyx_kp_b_iso88591_Fiq_A_8_7q_A_4_z9I, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[133])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 425};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_paint_funcs, __pyx_mstate->__pyx_n_u_paint_state, __pyx_mstate->__pyx_n_u_palette_index, __pyx_mstate->__pyx_n_u_foreground, __pyx_mstate->__pyx_n_u_paint_state_p, __pyx_mstate->__pyx_n_u_c_foreground};
    __pyx_mstate_global->__pyx_codeobj_tab[134] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_paint_glyph, __pyx_mstate->__pyx_kp_b_iso88591_q_q_81_q_gQ_WA_1D_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[134])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 441};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_gid, __pyx_mstate->__pyx_n_u_pen, __pyx_mstate->__pyx_n_u_moveTo, __pyx_mstate->__pyx_n_u_lineTo, __pyx_mstate->__pyx_n_u_curveTo, __pyx_mstate->__pyx_n_u_qCurveTo, __pyx_mstate->__pyx_n_u_closePath, __pyx_mstate->__pyx_n_u_methods};
    __pyx_mstate_global->__pyx_codeobj_tab[135] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_draw_glyph_with_pen, __pyx_mstate->__pyx_kp_b_iso88591_q_S_A_6I_q_6I_q_1K7K6QR_q_SSYYZ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[135])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 468};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_constant};
    __pyx_mstate_global->__pyx_codeobj_tab[136] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_constant, __pyx_mstate->__pyx_kp_b_iso88591_Q_9Cs_1_AQ_at_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[136])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 473};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[137] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_italics_correctio, __pyx_mstate->__pyx_kp_b_iso88591_7xq_6at_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[137])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 476};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[138] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_top_accent_attach, __pyx_mstate->__pyx_kp_b_iso88591_9_k, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[138])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 479};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_hb_direction};
    __pyx_mstate_global->__pyx_codeobj_tab[139] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_min_connector_overlap, __pyx_mstate->__pyx_kp_b_iso88591_8_IWA_C1G1_31D_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[139])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 485};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_kern, __pyx_mstate->__pyx_n_u_correction_height};
    __pyx_mstate_global->__pyx_codeobj_tab[140] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_kerning, __pyx_mstate->__pyx_kp_b_iso88591_K7VV___5_3aq_AQ_1D_7, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[140])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 490};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_kern, __pyx_mstate->__pyx_n_u_count, __pyx_mstate->__pyx_n_u_kerns_array, __pyx_mstate->__pyx_n_u_kerns, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset};
    __pyx_mstate_global->__pyx_codeobj_tab[141] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_kernings, __pyx_mstate->__pyx_kp_b_iso88591_q_5_3aq_AQ_fCq_k_a_U_1_WA_A_SS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[141])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 11, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 506};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_hb_direction, __pyx_mstate->__pyx_n_u_count, __pyx_mstate->__pyx_n_u_variants_array, __pyx_mstate->__pyx_n_u_variants, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset};
    __pyx_mstate_global->__pyx_codeobj_tab[142] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_variants, __pyx_mstate->__pyx_kp_b_iso88591_XQ_IWA_C1G1_Q_fCq_k_a_U_1_q_2_H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[142])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 12, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 523};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_hb_direction, __pyx_mstate->__pyx_n_u_count, __pyx_mstate->__pyx_n_u_assembly_array, __pyx_mstate->__pyx_n_u_assembly, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset, __pyx_mstate->__pyx_n_u_italics_correction};
    __pyx_mstate_global->__pyx_codeobj_tab[143] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_math_glyph_assembly, __pyx_mstate->__pyx_kp_b_iso88591_XQ_IWA_C1G1_Q_0_fCq_a_Q_U_1_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[143])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 546};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_position};
    __pyx_mstate_global->__pyx_codeobj_tab[144] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_metric_position, __pyx_mstate->__pyx_kp_b_iso88591_8_Qd_U_1_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[144])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 552};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_position};
    __pyx_mstate_global->__pyx_codeobj_tab[145] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_metric_position_with_fallbac, __pyx_mstate->__pyx_kp_b_iso88591_55Fa_0_Qa_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[145])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 557};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[146] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_metric_variation, __pyx_mstate->__pyx_kp_b_iso88591_9_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[146])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 560};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[147] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_metric_x_variation, __pyx_mstate->__pyx_kp_b_iso88591_1_AT_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[147])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 563};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[148] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_metric_y_variation, __pyx_mstate->__pyx_kp_b_iso88591_1_AT_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[148])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 567};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_blob};
    __pyx_mstate_global->__pyx_codeobj_tab[149] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_glyph_color_png, __pyx_mstate->__pyx_kp_b_iso88591_at_a_9AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[149])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 12, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 573};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_baseline_tag, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_script_tag, __pyx_mstate->__pyx_n_u_language_tag, __pyx_mstate->__pyx_n_u_hb_baseline_tag, __pyx_mstate->__pyx_n_u_hb_direction, __pyx_mstate->__pyx_n_u_hb_script_tag, __pyx_mstate->__pyx_n_u_hb_language_tag, __pyx_mstate->__pyx_n_u_hb_position, __pyx_mstate->__pyx_n_u_success, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[150] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_layout_baseline, __pyx_mstate->__pyx_kp_b_iso88591_A_1_1_a_Q_a_Q_a_Q_a_Q_a_Q_a_Q_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[150])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 620};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[151] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_get_style_value, __pyx_mstate->__pyx_kp_b_iso88591_k_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[151])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[152] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[152])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[153] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[153])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 793};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_inst};
    __pyx_mstate_global->__pyx_codeobj_tab[154] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_create, __pyx_mstate->__pyx_kp_b_iso88591_A_c_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[154])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 798};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[155] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_glyph_h_advance_func, __pyx_mstate->__pyx_kp_b_iso88591_A_6Q_a_4G_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[155])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 809};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[156] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_glyph_v_advance_func, __pyx_mstate->__pyx_kp_b_iso88591_A_6Q_a_4G_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[156])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 820};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[157] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_glyph_v_origin_func, __pyx_mstate->__pyx_kp_b_iso88591_A_5A_Q_37_Q_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[157])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 831};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[158] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_glyph_name_func, __pyx_mstate->__pyx_kp_b_iso88591_A_1_wk, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[158])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 842};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[159] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_nominal_glyph_func, __pyx_mstate->__pyx_kp_b_iso88591_A_41_A_2_A_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[159])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 853};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[160] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_variation_glyph_func, __pyx_mstate->__pyx_kp_b_iso88591_A_41_a_4G_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[160])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 865};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[161] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_font_h_extents_func, __pyx_mstate->__pyx_kp_b_iso88591_A_5A_Q_37_Q_A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[161])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 875};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_func, __pyx_mstate->__pyx_n_u_user_data};
    __pyx_mstate_global->__pyx_codeobj_tab[162] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__font_pxi, __pyx_mstate->__pyx_n_u_set_font_v_extents_func, __pyx_mstate->__pyx_kp_b_iso88591_A_5A_Q_37_Q_A_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[162])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[163] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[163])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[164] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[164])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 35};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_format, __pyx_mstate->__pyx_n_u_extents, __pyx_mstate->__pyx_n_u_c_extents, __pyx_mstate->__pyx_n_u_c_extents_ptr};
    __pyx_mstate_global->__pyx_codeobj_tab[165] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_configure, __pyx_mstate->__pyx_kp_b_iso88591_2_1_2_87_YgQ_Zwa_Zwa_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[165])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 48};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[166] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_clear, __pyx_mstate->__pyx_kp_b_iso88591_A_Qd_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[166])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[167] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[167])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[168] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[168])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 134};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_extents, __pyx_mstate->__pyx_n_u_c_extents};
    __pyx_mstate_global->__pyx_codeobj_tab[169] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_set_glyph_extents, __pyx_mstate->__pyx_kp_b_iso88591_gQ_gQ_7_q_4Faq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[169])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 142};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[170] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_draw_glyph, __pyx_mstate->__pyx_kp_b_iso88591_A_AT_34, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[170])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 145};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[171] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_draw_glyph_or_fail, __pyx_mstate->__pyx_kp_b_iso88591_HA_1D0B_kQR, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[171])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 148};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_img};
    __pyx_mstate_global->__pyx_codeobj_tab[172] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_render, __pyx_mstate->__pyx_kp_b_iso88591_1D_4s_1_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[172])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 154};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[173] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_clear, __pyx_mstate->__pyx_kp_b_iso88591_A_AT_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[173])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 157};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[174] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_reset, __pyx_mstate->__pyx_kp_b_iso88591_A_AT_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[174])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[175] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[175])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[176] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[176])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 217};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_extents, __pyx_mstate->__pyx_n_u_c_extents};
    __pyx_mstate_global->__pyx_codeobj_tab[177] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_set_glyph_extents, __pyx_mstate->__pyx_kp_b_iso88591_gQ_gQ_7_0_5H, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[177])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 249};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_color_index, __pyx_mstate->__pyx_n_u_color};
    __pyx_mstate_global->__pyx_codeobj_tab[178] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_set_custom_palette_color, __pyx_mstate->__pyx_kp_b_iso88591_4L_7q_WA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[178])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 253};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[179] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_clear_custom_palette_colors, __pyx_mstate->__pyx_kp_b_iso88591_A_31D, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[179])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 256};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[180] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_paint_glyph, __pyx_mstate->__pyx_kp_b_iso88591_Q_Qd_5T_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[180])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 259};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[181] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_paint_glyph_or_fail, __pyx_mstate->__pyx_kp_b_iso88591_XQ_AT1DD_ST, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[181])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 262};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_img};
    __pyx_mstate_global->__pyx_codeobj_tab[182] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_render, __pyx_mstate->__pyx_kp_b_iso88591_AT_4s_1_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[182])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 268};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[183] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_clear, __pyx_mstate->__pyx_kp_b_iso88591_A_Qd_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[183])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 271};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[184] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__raster_pxi, __pyx_mstate->__pyx_n_u_reset, __pyx_mstate->__pyx_kp_b_iso88591_A_Qd_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[184])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[185] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[185])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[186] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[186])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[187] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[187])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[188] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[188])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 66};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_subtables, __pyx_mstate->__pyx_n_u_graphnodes};
    __pyx_mstate_global->__pyx_codeobj_tab[189] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__serialize_pxi, __pyx_mstate->__pyx_n_u_repack, __pyx_mstate->__pyx_kp_b_iso88591_9A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[189])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 71};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_subtables, __pyx_mstate->__pyx_n_u_graphnodes};
    __pyx_mstate_global->__pyx_codeobj_tab[190] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__serialize_pxi, __pyx_mstate->__pyx_n_u_repack_with_tag, __pyx_mstate->__pyx_kp_b_iso88591_Qe_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[190])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 76};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_subtables, __pyx_mstate->__pyx_n_u_graphnodes};
    __pyx_mstate_global->__pyx_codeobj_tab[191] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__serialize_pxi, __pyx_mstate->__pyx_n_u_serialize, __pyx_mstate->__pyx_kp_b_iso88591_Qd_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[191])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 18, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 83};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_subtables, __pyx_mstate->__pyx_n_u_graphnodes, __pyx_mstate->__pyx_n_u_num_nodes, __pyx_mstate->__pyx_n_u_table_bytes, __pyx_mstate->__pyx_n_u_table_data, __pyx_mstate->__pyx_n_u_head, __pyx_mstate->__pyx_n_u_tail, __pyx_mstate->__pyx_n_u_p, __pyx_mstate->__pyx_n_u_obj_list, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_node, __pyx_mstate->__pyx_n_u_tag_packed, __pyx_mstate->__pyx_n_u_cstr, __pyx_mstate->__pyx_n_u_packed_blob, __pyx_mstate->__pyx_n_u_blob_length, __pyx_mstate->__pyx_n_u_blob_data, __pyx_mstate->__pyx_n_u_packed};
    __pyx_mstate_global->__pyx_codeobj_tab[192] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__serialize_pxi, __pyx_mstate->__pyx_n_u_serialize_with_tag, __pyx_mstate->__pyx_kp_b_iso88591_A_0N_s_c_AQ_j_Qc_MQcQRRS_AQ_CuA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[192])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_new_face};
    __pyx_mstate_global->__pyx_codeobj_tab[193] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_subset_preprocess, __pyx_mstate->__pyx_kp_b_iso88591_IQ_1D_y, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[193])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 5};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_input, __pyx_mstate->__pyx_n_u_new_face};
    __pyx_mstate_global->__pyx_codeobj_tab[194] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_subset, __pyx_mstate->__pyx_kp_b_iso88591_a_Q_y_1_l_1_y, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[194])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 48};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_source};
    __pyx_mstate_global->__pyx_codeobj_tab[195] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_subset, __pyx_mstate->__pyx_kp_b_iso88591_Ya_vQha, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[195])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 51};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[196] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_keep_everything, __pyx_mstate->__pyx_kp_b_iso88591_A_q_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[196])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 54};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[197] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_pin_all_axes_to_default, __pyx_mstate->__pyx_kp_b_iso88591_IQ_6at_t1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[197])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 57};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_hb_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[198] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_pin_axis_to_default, __pyx_mstate->__pyx_kp_b_iso88591_81_1Cwa_2_D_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[198])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 63};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_hb_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[199] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_pin_axis_location, __pyx_mstate->__pyx_kp_b_iso88591_k_Zq_1Cwa_0_D_81, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[199])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {6, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 69};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_min_value, __pyx_mstate->__pyx_n_u_max_value, __pyx_mstate->__pyx_n_u_def_value, __pyx_mstate->__pyx_n_u_hb_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[200] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_set_axis_range, __pyx_mstate->__pyx_kp_b_iso88591_A_1_1_1_1_WA_G_S_G_S_G_S_Q_D_8_k, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[200])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 9, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 83};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_axis_min_value, __pyx_mstate->__pyx_n_u_axis_max_value, __pyx_mstate->__pyx_n_u_axis_def_value, __pyx_mstate->__pyx_n_u_min_value, __pyx_mstate->__pyx_n_u_max_value, __pyx_mstate->__pyx_n_u_def_value};
    __pyx_mstate_global->__pyx_codeobj_tab[201] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_get_axis_range, __pyx_mstate->__pyx_kp_b_iso88591_1_WA_l_Q_aq_Q_1_Q_1_Q_1_k_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[201])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 102};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_set_type};
    __pyx_mstate_global->__pyx_codeobj_tab[202] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_sets, __pyx_mstate->__pyx_kp_b_iso88591_2_1_Q_A_lRS, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[202])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[203] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[203])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[204] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[204])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 151};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_new_face};
    __pyx_mstate_global->__pyx_codeobj_tab[205] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__subset_pxi, __pyx_mstate->__pyx_n_u_execute, __pyx_mstate->__pyx_kp_b_iso88591_1_a_9Cq_aq_9AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[205])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[206] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_reduce_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[206])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 3};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_pyx_state};
    __pyx_mstate_global->__pyx_codeobj_tab[207] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_setstate_cython, __pyx_mstate->__pyx_kp_b_iso88591_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[207])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 16, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 76};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_buffer, __pyx_mstate->__pyx_n_u_features, __pyx_mstate->__pyx_n_u_shapers, __pyx_mstate->__pyx_n_u_size, __pyx_mstate->__pyx_n_u_hb_features, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_feat, __pyx_mstate->__pyx_n_u_c_shapers, __pyx_mstate->__pyx_n_u_value, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_name_2, __pyx_mstate->__pyx_n_u_start, __pyx_mstate->__pyx_n_u_end, __pyx_mstate->__pyx_n_u_shaper, __pyx_mstate->__pyx_n_u_ret};
    __pyx_mstate_global->__pyx_codeobj_tab[208] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_shape, __pyx_mstate->__pyx_kp_b_iso88591_a_1_1_QgQ_A_Cq_q_Rq_ixvQ_r_6_WA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[208])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 128};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_hb_script, __pyx_mstate->__pyx_n_u_cstr};
    __pyx_mstate_global->__pyx_codeobj_tab[209] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_tag_to_script, __pyx_mstate->__pyx_kp_b_iso88591_7_QgYa_4AQ_A_a_Q_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[209])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 139};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_packed, __pyx_mstate->__pyx_n_u_hb_tag, __pyx_mstate->__pyx_n_u_hb_language, __pyx_mstate->__pyx_n_u_cstr};
    __pyx_mstate_global->__pyx_codeobj_tab[210] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_tag_to_language, __pyx_mstate->__pyx_kp_b_iso88591_HA_7_QgYa_1_1_uCq_q_Q_6, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[210])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 150};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_lookup_index, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[211] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_lookup_get_glyph_alter, __pyx_mstate->__pyx_kp_b_iso88591_0C1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[211])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 156};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_script_index, __pyx_mstate->__pyx_n_u_language_index};
    __pyx_mstate_global->__pyx_codeobj_tab[212] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_language_get_feature_t, __pyx_mstate->__pyx_kp_b_iso88591_nA_4_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[212])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 163};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag, __pyx_mstate->__pyx_n_u_script_index};
    __pyx_mstate_global->__pyx_codeobj_tab[213] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_script_get_language_ta, __pyx_mstate->__pyx_kp_b_iso88591_nL_4_a, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[213])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 168};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[214] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_table_get_script_tags, __pyx_mstate->__pyx_kp_b_iso88591_5XQ_4_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[214])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 172};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_baseline_tag, __pyx_mstate->__pyx_n_u_direction, __pyx_mstate->__pyx_n_u_script_tag, __pyx_mstate->__pyx_n_u_language_tag};
    __pyx_mstate_global->__pyx_codeobj_tab[215] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_get_baseline, __pyx_mstate->__pyx_kp_b_iso88591_1_4_1N, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[215])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 180};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[216] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_has_glyph_classes, __pyx_mstate->__pyx_kp_b_iso88591_q_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[216])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 184};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[217] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_has_positioning, __pyx_mstate->__pyx_kp_b_iso88591_Q_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[217])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 188};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[218] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_has_substitution, __pyx_mstate->__pyx_kp_b_iso88591_a_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[218])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 192};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[219] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_layout_get_glyph_class, __pyx_mstate->__pyx_kp_b_iso88591_1_4_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[219])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 196};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[220] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_has_palettes, __pyx_mstate->__pyx_kp_b_iso88591_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[220])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 200};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[221] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_palette_get_count, __pyx_mstate->__pyx_kp_b_iso88591_a_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[221])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 204};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_palette_index};
    __pyx_mstate_global->__pyx_codeobj_tab[222] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_palette_get_flags, __pyx_mstate->__pyx_kp_b_iso88591_a_AT_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[222])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 7, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 208};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_palette_index, __pyx_mstate->__pyx_n_u_ret, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_start_offset, __pyx_mstate->__pyx_n_u_color_count, __pyx_mstate->__pyx_n_u_colors};
    __pyx_mstate_global->__pyx_codeobj_tab[223] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_palette_get_colors, __pyx_mstate->__pyx_kp_b_iso88591_81_A_Q_A_c_at_o_STTaab_E_aq_wau, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[223])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 221};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_palette_index, __pyx_mstate->__pyx_n_u_name_id};
    __pyx_mstate_global->__pyx_codeobj_tab[224] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_palette_get_name_id, __pyx_mstate->__pyx_kp_b_iso88591_HA_Qd_Q_xs_q_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[224])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 229};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_color_index};
    __pyx_mstate_global->__pyx_codeobj_tab[225] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_palette_color_get_name, __pyx_mstate->__pyx_kp_b_iso88591_4_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[225])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 233};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[226] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_has_layers, __pyx_mstate->__pyx_kp_b_iso88591_q_4q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[226])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 237};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[227] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_glyph_get_layers, __pyx_mstate->__pyx_kp_b_iso88591_1_4_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[227])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 241};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[228] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_has_paint, __pyx_mstate->__pyx_kp_b_iso88591_a_4q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[228])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 245};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[229] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_glyph_has_paint, __pyx_mstate->__pyx_kp_b_iso88591_0_4_Qa, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[229])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 249};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[230] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_has_svg, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[230])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 253};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[231] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_glyph_get_svg, __pyx_mstate->__pyx_kp_b_iso88591_ha_4_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[231])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 257};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[232] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_has_png, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[232])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 261};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[233] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_color_glyph_get_png, __pyx_mstate->__pyx_kp_b_iso88591_ha_4_1A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[233])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 266};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face};
    __pyx_mstate_global->__pyx_codeobj_tab[234] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_has_data, __pyx_mstate->__pyx_kp_b_iso88591_A_4q_2, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[234])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 270};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_constant};
    __pyx_mstate_global->__pyx_codeobj_tab[235] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_constant, __pyx_mstate->__pyx_kp_b_iso88591_B_4, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[235])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 274};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[236] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_italics_correc, __pyx_mstate->__pyx_kp_b_iso88591_HA_4_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[236])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 278};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[237] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_top_accent_att, __pyx_mstate->__pyx_kp_b_iso88591_2_xq_4_4AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[237])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 282};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_face, __pyx_mstate->__pyx_n_u_glyph};
    __pyx_mstate_global->__pyx_codeobj_tab[238] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_is_glyph_extended_shape, __pyx_mstate->__pyx_kp_b_iso88591_7xq_4_AQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[238])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 286};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_direction};
    __pyx_mstate_global->__pyx_codeobj_tab[239] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_min_connector_overla, __pyx_mstate->__pyx_kp_b_iso88591_XQ_4_aq, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[239])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {4, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 290};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_kern, __pyx_mstate->__pyx_n_u_correction_height};
    __pyx_mstate_global->__pyx_codeobj_tab[240] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_kerning, __pyx_mstate->__pyx_kp_b_iso88591_89_4_awfA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[240])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 297};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_kern};
    __pyx_mstate_global->__pyx_codeobj_tab[241] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_kernings, __pyx_mstate->__pyx_kp_b_iso88591_4A_4_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[241])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 303};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_direction};
    __pyx_mstate_global->__pyx_codeobj_tab[242] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_variants, __pyx_mstate->__pyx_kp_b_iso88591_22B_4_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[242])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 307};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font, __pyx_mstate->__pyx_n_u_glyph, __pyx_mstate->__pyx_n_u_direction};
    __pyx_mstate_global->__pyx_codeobj_tab[243] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_math_get_glyph_assembly, __pyx_mstate->__pyx_kp_b_iso88591_2_4_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[243])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 314};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_font};
    __pyx_mstate_global->__pyx_codeobj_tab[244] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_uharfbuzz__harfbuzz_pyx, __pyx_mstate->__pyx_n_u_ot_font_set_funcs, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[244])) goto bad;
  }
  Py_DECREF(tuple_dedup_map);
  return 0;
  bad:
  Py_DECREF(tuple_dedup_map);
  return -1;
}
/* #### Code section: init_globals ### */

static int __Pyx_InitGlobals(void) {
  /* PythonCompatibility.init */
  if (likely(__Pyx_init_co_variables() == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CommonTypesMetaclass.init */
  if (likely(__pyx_CommonTypesMetaclass_init(__pyx_m) == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CachedMethodType.init */
  #if CYTHON_COMPILING_IN_LIMITED_API
  {
      PyObject *typesModule=NULL;
      typesModule = PyImport_ImportModule("types");
      if (typesModule) {
          __pyx_mstate_global->__Pyx_CachedMethodType = PyObject_GetAttrString(typesModule, "MethodType");
          Py_DECREF(typesModule);
      }
  } // error handling follows
  #endif
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* CythonFunctionShared.init */
  if (likely(__pyx_CyFunction_init(__pyx_m) == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* AssertionsEnabled.init */
  if (likely(__Pyx_init_assertions_enabled() == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  /* Generator.init */
  if (likely(__pyx_Generator_init(__pyx_m) == 0)); else
  
  if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)

  return 0;
  __pyx_L1_error:;
  return -1;
}
/* #### Code section: cleanup_globals ### */
/* #### Code section: cleanup_module ### */
/* #### Code section: main_method ### */
/* #### Code section: utility_code_pragmas ### */
#ifdef _MSC_VER
#pragma warning( push )
/* Warning 4127: conditional expression is constant
 * Cython uses constant conditional expressions to allow in inline functions to be optimized at
 * compile-time, so this warning is not useful
 */
#pragma warning( disable : 4127 )
#endif



/* #### Code section: utility_code_def ### */

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyErrExceptionMatches (used by PyObjectGetAttrStrNoError) */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    n = PyTuple_GET_SIZE(tuple);
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
    for (i=0; i<n; i++) {
        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
    int result;
    PyObject *exc_type;
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject *current_exception = tstate->current_exception;
    if (unlikely(!current_exception)) return 0;
    exc_type = (PyObject*) Py_TYPE(current_exception);
    if (exc_type == err) return 1;
#else
    exc_type = tstate->curexc_type;
    if (exc_type == err) return 1;
    if (unlikely(!exc_type)) return 0;
#endif
    #if CYTHON_AVOID_BORROWED_REFS
    Py_INCREF(exc_type);
    #endif
    if (unlikely(PyTuple_Check(err))) {
        result = __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
    } else {
        result = __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
    }
    #if CYTHON_AVOID_BORROWED_REFS
    Py_DECREF(exc_type);
    #endif
    return result;
}
#endif

/* PyErrFetchRestore (used by PyObjectGetAttrStrNoError) */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject *tmp_value;
    assert(type == NULL || (value != NULL && type == (PyObject*) Py_TYPE(value)));
    if (value) {
        #if CYTHON_COMPILING_IN_CPYTHON
        if (unlikely(((PyBaseExceptionObject*) value)->traceback != tb))
        #endif
            PyException_SetTraceback(value, tb);
    }
    tmp_value = tstate->current_exception;
    tstate->current_exception = value;
    Py_XDECREF(tmp_value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
#else
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#endif
}
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
#if PY_VERSION_HEX >= 0x030C00A6
    PyObject* exc_value;
    exc_value = tstate->current_exception;
    tstate->current_exception = 0;
    *value = exc_value;
    *type = NULL;
    *tb = NULL;
    if (exc_value) {
        *type = (PyObject*) Py_TYPE(exc_value);
        Py_INCREF(*type);
        #if CYTHON_COMPILING_IN_CPYTHON
        *tb = ((PyBaseExceptionObject*) exc_value)->traceback;
        Py_XINCREF(*tb);
        #else
        *tb = PyException_GetTraceback(exc_value);
        #endif
    }
#else
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#endif
}
#endif

/* PyObjectGetAttrStr (used by PyObjectGetAttrStrNoError) */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* PyObjectGetAttrStrNoError (used by GetBuiltinName) */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        __Pyx_PyErr_Clear();
}
#endif
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
    PyObject *result;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    (void) PyObject_GetOptionalAttr(obj, attr_name, &result);
    return result;
#else
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
        return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
    }
#endif
    result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
    if (unlikely(!result)) {
        __Pyx_PyObject_GetAttrStr_ClearAttributeError();
    }
    return result;
#endif
}

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStrNoError(__pyx_mstate_global->__pyx_b, name);
    if (unlikely(!result) && !PyErr_Occurred()) {
        PyErr_Format(PyExc_NameError,
            "name '%U' is not defined", name);
    }
    return result;
}

/* decode_c_string */
static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
         const char* cstring, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
    Py_ssize_t length;
    if (unlikely((start < 0) | (stop < 0))) {
        size_t slen = strlen(cstring);
        if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) {
            PyErr_SetString(PyExc_OverflowError,
                            "c-string too long to convert to Python");
            return NULL;
        }
        length = (Py_ssize_t) slen;
        if (start < 0) {
            start += length;
            if (start < 0)
                start = 0;
        }
        if (stop < 0)
            stop += length;
    }
    if (unlikely(stop <= start))
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_unicode);
    length = stop - start;
    cstring += start;
    if (decode_func) {
        return decode_func(cstring, length, errors);
    } else {
        return PyUnicode_Decode(cstring, length, encoding, errors);
    }
}

/* PyObjectCall (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = Py_TYPE(func)->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
    if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
        return NULL;
    result = (*call)(func, arg, kw);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallMethO (used by PyObjectFastCall) */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = __Pyx_CyOrPyCFunction_GET_FUNCTION(func);
    self = __Pyx_CyOrPyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall(" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectFastCall */
#if PY_VERSION_HEX < 0x03090000 || CYTHON_COMPILING_IN_LIMITED_API
static PyObject* __Pyx_PyObject_FastCall_fallback(PyObject *func, PyObject * const*args, size_t nargs, PyObject *kwargs) {
    PyObject *argstuple;
    PyObject *result = 0;
    size_t i;
    argstuple = PyTuple_New((Py_ssize_t)nargs);
    if (unlikely(!argstuple)) return NULL;
    for (i = 0; i < nargs; i++) {
        Py_INCREF(args[i]);
        if (__Pyx_PyTuple_SET_ITEM(argstuple, (Py_ssize_t)i, args[i]) != (0)) goto bad;
    }
    result = __Pyx_PyObject_Call(func, argstuple, kwargs);
  bad:
    Py_DECREF(argstuple);
    return result;
}
#endif
#if CYTHON_VECTORCALL && !CYTHON_COMPILING_IN_LIMITED_API
  #if PY_VERSION_HEX < 0x03090000
    #define __Pyx_PyVectorcall_Function(callable) _PyVectorcall_Function(callable)
  #elif CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE vectorcallfunc __Pyx_PyVectorcall_Function(PyObject *callable) {
    PyTypeObject *tp = Py_TYPE(callable);
    #if defined(__Pyx_CyFunction_USED)
    if (__Pyx_CyFunction_CheckExact(callable)) {
        return __Pyx_CyFunction_func_vectorcall(callable);
    }
    #endif
    if (!PyType_HasFeature(tp, Py_TPFLAGS_HAVE_VECTORCALL)) {
        return NULL;
    }
    assert(PyCallable_Check(callable));
    Py_ssize_t offset = tp->tp_vectorcall_offset;
    assert(offset > 0);
    vectorcallfunc ptr;
    memcpy(&ptr, (char *) callable + offset, sizeof(ptr));
    return ptr;
}
  #else
    #define __Pyx_PyVectorcall_Function(callable) PyVectorcall_Function(callable)
  #endif
#endif
static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject *const *args, size_t _nargs, PyObject *kwargs) {
    Py_ssize_t nargs = __Pyx_PyVectorcall_NARGS(_nargs);
#if CYTHON_COMPILING_IN_CPYTHON
    if (nargs == 0 && kwargs == NULL) {
        if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_NOARGS))
            return __Pyx_PyObject_CallMethO(func, NULL);
    }
    else if (nargs == 1 && kwargs == NULL) {
        if (__Pyx_CyOrPyCFunction_Check(func) && likely( __Pyx_CyOrPyCFunction_GET_FLAGS(func) & METH_O))
            return __Pyx_PyObject_CallMethO(func, args[0]);
    }
#endif
    if (kwargs == NULL) {
        #if CYTHON_VECTORCALL
          #if CYTHON_COMPILING_IN_LIMITED_API
            return PyObject_Vectorcall(func, args, _nargs, NULL);
          #else
            vectorcallfunc f = __Pyx_PyVectorcall_Function(func);
            if (f) {
                return f(func, args, _nargs, NULL);
            }
          #endif
        #endif
    }
    if (nargs == 0) {
        return __Pyx_PyObject_Call(func, __pyx_mstate_global->__pyx_empty_tuple, kwargs);
    }
    #if PY_VERSION_HEX >= 0x03090000 && !CYTHON_COMPILING_IN_LIMITED_API
    return PyObject_VectorcallDict(func, args, (size_t)nargs, kwargs);
    #else
    return __Pyx_PyObject_FastCall_fallback(func, args, (size_t)nargs, kwargs);
    #endif
}

/* WriteUnraisableException */
static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                  int lineno, const char *filename,
                                  int full_traceback, int nogil) {
    PyObject *old_exc, *old_val, *old_tb;
    PyObject *ctx;
    __Pyx_PyThreadState_declare
    PyGILState_STATE state;
    if (nogil)
        state = PyGILState_Ensure();
    else state = (PyGILState_STATE)0;
    CYTHON_UNUSED_VAR(clineno);
    CYTHON_UNUSED_VAR(lineno);
    CYTHON_UNUSED_VAR(filename);
    CYTHON_MAYBE_UNUSED_VAR(nogil);
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
    if (full_traceback) {
        Py_XINCREF(old_exc);
        Py_XINCREF(old_val);
        Py_XINCREF(old_tb);
        __Pyx_ErrRestore(old_exc, old_val, old_tb);
        PyErr_PrintEx(0);
    }
    ctx = PyUnicode_FromString(name);
    __Pyx_ErrRestore(old_exc, old_val, old_tb);
    if (!ctx) {
        PyErr_WriteUnraisable(Py_None);
    } else {
        PyErr_WriteUnraisable(ctx);
        Py_DECREF(ctx);
    }
    if (nogil)
        PyGILState_Release(state);
}

/* TupleAndListFromArray (used by fastcall) */
#if !CYTHON_COMPILING_IN_CPYTHON && CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject *
__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    Py_ssize_t i;
    if (n <= 0) {
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
    }
    res = PyTuple_New(n);
    if (unlikely(res == NULL)) return NULL;
    for (i = 0; i < n; i++) {
        if (unlikely(__Pyx_PyTuple_SET_ITEM(res, i, src[i]) < (0))) {
            Py_DECREF(res);
            return NULL;
        }
        Py_INCREF(src[i]);
    }
    return res;
}
#elif CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_copy_object_array(PyObject *const *CYTHON_RESTRICT src, PyObject** CYTHON_RESTRICT dest, Py_ssize_t length) {
    PyObject *v;
    Py_ssize_t i;
    for (i = 0; i < length; i++) {
        v = dest[i] = src[i];
        Py_INCREF(v);
    }
}
static CYTHON_INLINE PyObject *
__Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_tuple);
    }
    res = PyTuple_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyTupleObject*)res)->ob_item, n);
    return res;
}
static CYTHON_INLINE PyObject *
__Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n)
{
    PyObject *res;
    if (n <= 0) {
        return PyList_New(0);
    }
    res = PyList_New(n);
    if (unlikely(res == NULL)) return NULL;
    __Pyx_copy_object_array(src, ((PyListObject*)res)->ob_item, n);
    return res;
}
#endif

/* BytesEquals (used by UnicodeEquals) */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL ||\
        !(CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS)
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result;
#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
            Py_hash_t hash1, hash2;
            hash1 = ((PyBytesObject*)s1)->ob_shash;
            hash2 = ((PyBytesObject*)s2)->ob_shash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                return (equals == Py_NE);
            }
#endif
            result = memcmp(ps1, ps2, (size_t)length);
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
        return (equals == Py_NE);
    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
        return (equals == Py_NE);
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
#endif
}

/* UnicodeEquals (used by fastcall) */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    int s1_is_unicode, s2_is_unicode;
    if (s1 == s2) {
        goto return_eq;
    }
    s1_is_unicode = PyUnicode_CheckExact(s1);
    s2_is_unicode = PyUnicode_CheckExact(s2);
    if (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length, length2;
        int kind;
        void *data1, *data2;
        #if !CYTHON_COMPILING_IN_LIMITED_API
        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
            return -1;
        #endif
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(length < 0)) return -1;
        #endif
        length2 = __Pyx_PyUnicode_GET_LENGTH(s2);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(length2 < 0)) return -1;
        #endif
        if (length != length2) {
            goto return_ne;
        }
#if CYTHON_USE_UNICODE_INTERNALS
        {
            Py_hash_t hash1, hash2;
            hash1 = ((PyASCIIObject*)s1)->hash;
            hash2 = ((PyASCIIObject*)s2)->hash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                goto return_ne;
            }
        }
#endif
        kind = __Pyx_PyUnicode_KIND(s1);
        if (kind != __Pyx_PyUnicode_KIND(s2)) {
            goto return_ne;
        }
        data1 = __Pyx_PyUnicode_DATA(s1);
        data2 = __Pyx_PyUnicode_DATA(s2);
        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
            goto return_ne;
        } else if (length == 1) {
            goto return_eq;
        } else {
            int result = memcmp(data1, data2, (size_t)(length * kind));
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & s2_is_unicode) {
        goto return_ne;
    } else if ((s2 == Py_None) & s1_is_unicode) {
        goto return_ne;
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    return (equals == Py_EQ);
return_ne:
    return (equals == Py_NE);
#endif
}

/* fastcall */
#if CYTHON_METH_FASTCALL
static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s)
{
    Py_ssize_t i, n = __Pyx_PyTuple_GET_SIZE(kwnames);
    #if !CYTHON_ASSUME_SAFE_SIZE
    if (unlikely(n == -1)) return NULL;
    #endif
    for (i = 0; i < n; i++)
    {
        PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!namei)) return NULL;
        #endif
        if (s == namei) return kwvalues[i];
    }
    for (i = 0; i < n; i++)
    {
        PyObject *namei = __Pyx_PyTuple_GET_ITEM(kwnames, i);
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!namei)) return NULL;
        #endif
        int eq = __Pyx_PyUnicode_Equals(s, namei, Py_EQ);
        if (unlikely(eq != 0)) {
            if (unlikely(eq < 0)) return NULL;
            return kwvalues[i];
        }
    }
    return NULL;
}
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030d0000 || CYTHON_COMPILING_IN_LIMITED_API
CYTHON_UNUSED static PyObject *__Pyx_KwargsAsDict_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues) {
    Py_ssize_t i, nkwargs;
    PyObject *dict;
#if !CYTHON_ASSUME_SAFE_SIZE
    nkwargs = PyTuple_Size(kwnames);
    if (unlikely(nkwargs < 0)) return NULL;
#else
    nkwargs = PyTuple_GET_SIZE(kwnames);
#endif
    dict = PyDict_New();
    if (unlikely(!dict))
        return NULL;
    for (i=0; i<nkwargs; i++) {
#if !CYTHON_ASSUME_SAFE_MACROS
        PyObject *key = PyTuple_GetItem(kwnames, i);
        if (!key) goto bad;
#else
        PyObject *key = PyTuple_GET_ITEM(kwnames, i);
#endif
        if (unlikely(PyDict_SetItem(dict, key, kwvalues[i]) < 0))
            goto bad;
    }
    return dict;
bad:
    Py_DECREF(dict);
    return NULL;
}
#endif
#endif

/* decode_c_bytes (used by decode_bytes) */
static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
         const char* cstring, Py_ssize_t length, Py_ssize_t start, Py_ssize_t stop,
         const char* encoding, const char* errors,
         PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
    if (unlikely((start < 0) | (stop < 0))) {
        if (start < 0) {
            start += length;
            if (start < 0)
                start = 0;
        }
        if (stop < 0)
            stop += length;
    }
    if (stop > length)
        stop = length;
    if (unlikely(stop <= start))
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_unicode);
    length = stop - start;
    cstring += start;
    if (decode_func) {
        return decode_func(cstring, length, errors);
    } else {
        return PyUnicode_Decode(cstring, length, encoding, errors);
    }
}

/* PyObjectCallOneArg (used by CallUnboundCMethod0) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *args[2] = {NULL, arg};
    return __Pyx_PyObject_FastCall(func, args+1, 1 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* UnpackUnboundCMethod (used by CallUnboundCMethod0) */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *args, PyObject *kwargs) {
    PyObject *result;
    PyObject *selfless_args = PyTuple_GetSlice(args, 1, PyTuple_Size(args));
    if (unlikely(!selfless_args)) return NULL;
    result = PyObject_Call(method, selfless_args, kwargs);
    Py_DECREF(selfless_args);
    return result;
}
#elif CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03090000
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject **args, Py_ssize_t nargs, PyObject *kwnames) {
        return _PyObject_Vectorcall
            (method, args ? args+1 : NULL, nargs ? nargs-1 : 0, kwnames);
}
#else
static PyObject *__Pyx_SelflessCall(PyObject *method, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames) {
    return
#if PY_VERSION_HEX < 0x03090000
    _PyObject_Vectorcall
#else
    PyObject_Vectorcall
#endif
        (method, args ? args+1 : NULL, nargs ? (size_t) nargs-1 : 0, kwnames);
}
#endif
static PyMethodDef __Pyx_UnboundCMethod_Def = {
     "CythonUnboundCMethod",
     __PYX_REINTERPRET_FUNCION(PyCFunction, __Pyx_SelflessCall),
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030C0000
     METH_VARARGS | METH_KEYWORDS,
#else
     METH_FASTCALL | METH_KEYWORDS,
#endif
     NULL
};
static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
    PyObject *method, *result=NULL;
    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
    if (unlikely(!method))
        return -1;
    result = method;
#if CYTHON_COMPILING_IN_CPYTHON
    if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
        target->func = descr->d_method->ml_meth;
        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
    } else
#endif
#if CYTHON_COMPILING_IN_PYPY
#else
    if (PyCFunction_Check(method))
#endif
    {
        PyObject *self;
        int self_found;
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
        self = PyObject_GetAttrString(method, "__self__");
        if (!self) {
            PyErr_Clear();
        }
#else
        self = PyCFunction_GET_SELF(method);
#endif
        self_found = (self && self != Py_None);
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
        Py_XDECREF(self);
#endif
        if (self_found) {
            PyObject *unbound_method = PyCFunction_New(&__Pyx_UnboundCMethod_Def, method);
            if (unlikely(!unbound_method)) return -1;
            Py_DECREF(method);
            result = unbound_method;
        }
    }
#if !CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    if (unlikely(target->method)) {
        Py_DECREF(result);
    } else
#endif
    target->method = result;
    return 0;
}

/* CallUnboundCMethod0 */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
    if (likely(was_initialized == 2 && cfunc->func)) {
        if (likely(cfunc->flag == METH_NOARGS))
            return __Pyx_CallCFunction(cfunc, self, NULL);
        if (likely(cfunc->flag == METH_FASTCALL))
            return __Pyx_CallCFunctionFast(cfunc, self, NULL, 0);
        if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
            return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, NULL, 0, NULL);
        if (likely(cfunc->flag == (METH_VARARGS | METH_KEYWORDS)))
            return __Pyx_CallCFunctionWithKeywords(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple, NULL);
        if (cfunc->flag == METH_VARARGS)
            return __Pyx_CallCFunction(cfunc, self, __pyx_mstate_global->__pyx_empty_tuple);
        return __Pyx__CallUnboundCMethod0(cfunc, self);
    }
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    else if (unlikely(was_initialized == 1)) {
        __Pyx_CachedCFunction tmp_cfunc = {
#ifndef __cplusplus
            0
#endif
        };
        tmp_cfunc.type = cfunc->type;
        tmp_cfunc.method_name = cfunc->method_name;
        return __Pyx__CallUnboundCMethod0(&tmp_cfunc, self);
    }
#endif
    PyObject *result = __Pyx__CallUnboundCMethod0(cfunc, self);
    __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
    return result;
}
#endif
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    PyObject *result;
    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
    result = __Pyx_PyObject_CallOneArg(cfunc->method, self);
    return result;
}

/* py_dict_items (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
    return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_items, d);
}

/* py_dict_values (used by OwnedDictNext) */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d) {
    return __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_values, d);
}

/* OwnedDictNext (used by ParseKeywordsImpl) */
#if CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, PyObject **ppos, PyObject **pkey, PyObject **pvalue) {
    PyObject *next = NULL;
    if (!*ppos) {
        if (pvalue) {
            PyObject *dictview = pkey ? __Pyx_PyDict_Items(p) : __Pyx_PyDict_Values(p);
            if (unlikely(!dictview)) goto bad;
            *ppos = PyObject_GetIter(dictview);
            Py_DECREF(dictview);
        } else {
            *ppos = PyObject_GetIter(p);
        }
        if (unlikely(!*ppos)) goto bad;
    }
    next = PyIter_Next(*ppos);
    if (!next) {
        if (PyErr_Occurred()) goto bad;
        return 0;
    }
    if (pkey && pvalue) {
        *pkey = __Pyx_PySequence_ITEM(next, 0);
        if (unlikely(*pkey)) goto bad;
        *pvalue = __Pyx_PySequence_ITEM(next, 1);
        if (unlikely(*pvalue)) goto bad;
        Py_DECREF(next);
    } else if (pkey) {
        *pkey = next;
    } else {
        assert(pvalue);
        *pvalue = next;
    }
    return 1;
  bad:
    Py_XDECREF(next);
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
    PyErr_FormatUnraisable("Exception ignored in __Pyx_PyDict_NextRef");
#else
    PyErr_WriteUnraisable(__pyx_mstate_global->__pyx_n_u_Pyx_PyDict_NextRef);
#endif
    if (pkey) *pkey = NULL;
    if (pvalue) *pvalue = NULL;
    return 0;
}
#else // !CYTHON_AVOID_BORROWED_REFS
static int __Pyx_PyDict_NextRef(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) {
    int result = PyDict_Next(p, ppos, pkey, pvalue);
    if (likely(result == 1)) {
        if (pkey) Py_INCREF(*pkey);
        if (pvalue) Py_INCREF(*pvalue);
    }
    return result;
}
#endif

/* RaiseDoubleKeywords (used by ParseKeywordsImpl) */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
}

/* CallUnboundCMethod2 */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject *__Pyx_CallUnboundCMethod2(__Pyx_CachedCFunction *cfunc, PyObject *self, PyObject *arg1, PyObject *arg2) {
    int was_initialized = __Pyx_CachedCFunction_GetAndSetInitializing(cfunc);
    if (likely(was_initialized == 2 && cfunc->func)) {
        PyObject *args[2] = {arg1, arg2};
        if (cfunc->flag == METH_FASTCALL) {
            return __Pyx_CallCFunctionFast(cfunc, self, args, 2);
        }
        if (cfunc->flag == (METH_FASTCALL | METH_KEYWORDS))
            return __Pyx_CallCFunctionFastWithKeywords(cfunc, self, args, 2, NULL);
    }
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    else if (unlikely(was_initialized == 1)) {
        __Pyx_CachedCFunction tmp_cfunc = {
#ifndef __cplusplus
            0
#endif
        };
        tmp_cfunc.type = cfunc->type;
        tmp_cfunc.method_name = cfunc->method_name;
        return __Pyx__CallUnboundCMethod2(&tmp_cfunc, self, arg1, arg2);
    }
#endif
    PyObject *result = __Pyx__CallUnboundCMethod2(cfunc, self, arg1, arg2);
    __Pyx_CachedCFunction_SetFinishedInitializing(cfunc);
    return result;
}
#endif
static PyObject* __Pyx__CallUnboundCMethod2(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg1, PyObject* arg2){
    if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_COMPILING_IN_CPYTHON
    if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
        PyObject *result = NULL;
        PyObject *args = PyTuple_New(2);
        if (unlikely(!args)) return NULL;
        Py_INCREF(arg1);
        PyTuple_SET_ITEM(args, 0, arg1);
        Py_INCREF(arg2);
        PyTuple_SET_ITEM(args, 1, arg2);
        if (cfunc->flag & METH_KEYWORDS)
            result = __Pyx_CallCFunctionWithKeywords(cfunc, self, args, NULL);
        else
            result = __Pyx_CallCFunction(cfunc, self, args);
        Py_DECREF(args);
        return result;
    }
#endif
    {
        PyObject *args[4] = {NULL, self, arg1, arg2};
        return __Pyx_PyObject_FastCall(cfunc->method, args+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
    }
}

/* ParseKeywordsImpl (used by ParseKeywords) */
static int __Pyx_ValidateDuplicatePosArgs(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    const char* function_name)
{
    PyObject ** const *name = argnames;
    while (name != first_kw_arg) {
        PyObject *key = **name;
        int found = PyDict_Contains(kwds, key);
        if (unlikely(found)) {
            if (found == 1) __Pyx_RaiseDoubleKeywordsError(function_name, key);
            goto bad;
        }
        name++;
    }
    return 0;
bad:
    return -1;
}
#if CYTHON_USE_UNICODE_INTERNALS
static CYTHON_INLINE int __Pyx_UnicodeKeywordsEqual(PyObject *s1, PyObject *s2) {
    int kind;
    Py_ssize_t len = PyUnicode_GET_LENGTH(s1);
    if (len != PyUnicode_GET_LENGTH(s2)) return 0;
    kind = PyUnicode_KIND(s1);
    if (kind != PyUnicode_KIND(s2)) return 0;
    const void *data1 = PyUnicode_DATA(s1);
    const void *data2 = PyUnicode_DATA(s2);
    return (memcmp(data1, data2, (size_t) len * (size_t) kind) == 0);
}
#endif
static int __Pyx_MatchKeywordArg_str(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    PyObject ** const *name;
    #if CYTHON_USE_UNICODE_INTERNALS
    Py_hash_t key_hash = ((PyASCIIObject*)key)->hash;
    if (unlikely(key_hash == -1)) {
        key_hash = PyObject_Hash(key);
        if (unlikely(key_hash == -1))
            goto bad;
    }
    #endif
    name = first_kw_arg;
    while (*name) {
        PyObject *name_str = **name;
        #if CYTHON_USE_UNICODE_INTERNALS
        if (key_hash == ((PyASCIIObject*)name_str)->hash && __Pyx_UnicodeKeywordsEqual(name_str, key)) {
            *index_found = (size_t) (name - argnames);
            return 1;
        }
        #else
        #if CYTHON_ASSUME_SAFE_SIZE
        if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
        #endif
        {
            int cmp = PyUnicode_Compare(name_str, key);
            if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
            if (cmp == 0) {
                *index_found = (size_t) (name - argnames);
                return 1;
            }
        }
        #endif
        name++;
    }
    name = argnames;
    while (name != first_kw_arg) {
        PyObject *name_str = **name;
        #if CYTHON_USE_UNICODE_INTERNALS
        if (unlikely(key_hash == ((PyASCIIObject*)name_str)->hash)) {
            if (__Pyx_UnicodeKeywordsEqual(name_str, key))
                goto arg_passed_twice;
        }
        #else
        #if CYTHON_ASSUME_SAFE_SIZE
        if (PyUnicode_GET_LENGTH(name_str) == PyUnicode_GET_LENGTH(key))
        #endif
        {
            if (unlikely(name_str == key)) goto arg_passed_twice;
            int cmp = PyUnicode_Compare(name_str, key);
            if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
            if (cmp == 0) goto arg_passed_twice;
        }
        #endif
        name++;
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
bad:
    return -1;
}
static int __Pyx_MatchKeywordArg_nostr(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    PyObject ** const *name;
    if (unlikely(!PyUnicode_Check(key))) goto invalid_keyword_type;
    name = first_kw_arg;
    while (*name) {
        int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
        if (cmp == 1) {
            *index_found = (size_t) (name - argnames);
            return 1;
        }
        if (unlikely(cmp == -1)) goto bad;
        name++;
    }
    name = argnames;
    while (name != first_kw_arg) {
        int cmp = PyObject_RichCompareBool(**name, key, Py_EQ);
        if (unlikely(cmp != 0)) {
            if (cmp == 1) goto arg_passed_twice;
            else goto bad;
        }
        name++;
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    goto bad;
bad:
    return -1;
}
static CYTHON_INLINE int __Pyx_MatchKeywordArg(
    PyObject *key,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    size_t *index_found,
    const char *function_name)
{
    return likely(PyUnicode_CheckExact(key)) ?
        __Pyx_MatchKeywordArg_str(key, argnames, first_kw_arg, index_found, function_name) :
        __Pyx_MatchKeywordArg_nostr(key, argnames, first_kw_arg, index_found, function_name);
}
static void __Pyx_RejectUnknownKeyword(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject ** const *first_kw_arg,
    const char *function_name)
{
    #if CYTHON_AVOID_BORROWED_REFS
    PyObject *pos = NULL;
    #else
    Py_ssize_t pos = 0;
    #endif
    PyObject *key = NULL;
    __Pyx_BEGIN_CRITICAL_SECTION(kwds);
    while (
        #if CYTHON_AVOID_BORROWED_REFS
        __Pyx_PyDict_NextRef(kwds, &pos, &key, NULL)
        #else
        PyDict_Next(kwds, &pos, &key, NULL)
        #endif
    ) {
        PyObject** const *name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (!*name) {
            size_t index_found = 0;
            int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
            if (cmp != 1) {
                if (cmp == 0) {
                    PyErr_Format(PyExc_TypeError,
                        "%s() got an unexpected keyword argument '%U'",
                        function_name, key);
                }
                #if CYTHON_AVOID_BORROWED_REFS
                Py_DECREF(key);
                #endif
                break;
            }
        }
        #if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(key);
        #endif
    }
    __Pyx_END_CRITICAL_SECTION();
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(pos);
    #endif
    assert(PyErr_Occurred());
}
static int __Pyx_ParseKeywordDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    PyObject** const *name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    Py_ssize_t extracted = 0;
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
    if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
#endif
    name = first_kw_arg;
    while (*name && num_kwargs > extracted) {
        PyObject * key = **name;
        PyObject *value;
        int found = 0;
        #if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
        found = PyDict_GetItemRef(kwds, key, &value);
        #else
        value = PyDict_GetItemWithError(kwds, key);
        if (value) {
            Py_INCREF(value);
            found = 1;
        } else {
            if (unlikely(PyErr_Occurred())) goto bad;
        }
        #endif
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
            extracted++;
        }
        name++;
    }
    if (num_kwargs > extracted) {
        if (ignore_unknown_kwargs) {
            if (unlikely(__Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name) == -1))
                goto bad;
        } else {
            __Pyx_RejectUnknownKeyword(kwds, argnames, first_kw_arg, function_name);
            goto bad;
        }
    }
    return 0;
bad:
    return -1;
}
static int __Pyx_ParseKeywordDictToDict(
    PyObject *kwds,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject** const *name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    Py_ssize_t len;
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
    if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return -1;
#endif
    if (PyDict_Update(kwds2, kwds) < 0) goto bad;
    name = first_kw_arg;
    while (*name) {
        PyObject *key = **name;
        PyObject *value;
#if !CYTHON_COMPILING_IN_LIMITED_API && (PY_VERSION_HEX >= 0x030d00A2 || defined(PyDict_Pop))
        int found = PyDict_Pop(kwds2, key, &value);
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
        }
#elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
        int found = PyDict_GetItemRef(kwds2, key, &value);
        if (found) {
            if (unlikely(found < 0)) goto bad;
            values[name-argnames] = value;
            if (unlikely(PyDict_DelItem(kwds2, key) < 0)) goto bad;
        }
#else
    #if CYTHON_COMPILING_IN_CPYTHON
        value = _PyDict_Pop(kwds2, key, kwds2);
    #else
        value = __Pyx_CallUnboundCMethod2(&__pyx_mstate_global->__pyx_umethod_PyDict_Type_pop, kwds2, key, kwds2);
    #endif
        if (value == kwds2) {
            Py_DECREF(value);
        } else {
            if (unlikely(!value)) goto bad;
            values[name-argnames] = value;
        }
#endif
        name++;
    }
    len = PyDict_Size(kwds2);
    if (len > 0) {
        return __Pyx_ValidateDuplicatePosArgs(kwds, argnames, first_kw_arg, function_name);
    } else if (unlikely(len == -1)) {
        goto bad;
    }
    return 0;
bad:
    return -1;
}
static int __Pyx_ParseKeywordsTuple(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    PyObject *key = NULL;
    PyObject** const * name;
    PyObject** const *first_kw_arg = argnames + num_pos_args;
    for (Py_ssize_t pos = 0; pos < num_kwargs; pos++) {
#if CYTHON_AVOID_BORROWED_REFS
        key = __Pyx_PySequence_ITEM(kwds, pos);
#else
        key = __Pyx_PyTuple_GET_ITEM(kwds, pos);
#endif
#if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(!key)) goto bad;
#endif
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            PyObject *value = kwvalues[pos];
            values[name-argnames] = __Pyx_NewRef(value);
        } else {
            size_t index_found = 0;
            int cmp = __Pyx_MatchKeywordArg(key, argnames, first_kw_arg, &index_found, function_name);
            if (cmp == 1) {
                PyObject *value = kwvalues[pos];
                values[index_found] = __Pyx_NewRef(value);
            } else {
                if (unlikely(cmp == -1)) goto bad;
                if (kwds2) {
                    PyObject *value = kwvalues[pos];
                    if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
                } else if (!ignore_unknown_kwargs) {
                    goto invalid_keyword;
                }
            }
        }
        #if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(key);
        key = NULL;
        #endif
    }
    return 0;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    goto bad;
bad:
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(key);
    #endif
    return -1;
}

/* ParseKeywords */
static int __Pyx_ParseKeywords(
    PyObject *kwds,
    PyObject * const *kwvalues,
    PyObject ** const argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    Py_ssize_t num_kwargs,
    const char* function_name,
    int ignore_unknown_kwargs)
{
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds)))
        return __Pyx_ParseKeywordsTuple(kwds, kwvalues, argnames, kwds2, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
    else if (kwds2)
        return __Pyx_ParseKeywordDictToDict(kwds, argnames, kwds2, values, num_pos_args, function_name);
    else
        return __Pyx_ParseKeywordDict(kwds, argnames, values, num_pos_args, num_kwargs, function_name, ignore_unknown_kwargs);
}

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* KeywordStringCheck */
static int __Pyx_CheckKeywordStrings(
    const char* function_name,
    PyObject *kw)
{
#if CYTHON_COMPILING_IN_PYPY && !defined(PyArg_ValidateKeywordArguments)
    CYTHON_UNUSED_VAR(function_name);
    CYTHON_UNUSED_VAR(kw);
    return 0;
#else
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kw))) {
#if PY_VERSION_HEX >= 0x03090000
        CYTHON_UNUSED_VAR(function_name);
#else
        Py_ssize_t kwsize;
        #if CYTHON_ASSUME_SAFE_SIZE
        kwsize = PyTuple_GET_SIZE(kw);
        #else
        kwsize = PyTuple_Size(kw);
        if (unlikely(kwsize < 0)) return -1;
        #endif
        for (Py_ssize_t pos = 0; pos < kwsize; pos++) {
            PyObject* key = NULL;
            #if CYTHON_ASSUME_SAFE_MACROS
            key = PyTuple_GET_ITEM(kw, pos);
            #else
            key = PyTuple_GetItem(kw, pos);
            if (unlikely(!key)) return -1;
            #endif
            if (unlikely(!PyUnicode_Check(key))) {
                PyErr_Format(PyExc_TypeError,
                    "%.200s() keywords must be strings", function_name);
                return -1;
            }
        }
#endif
    } else {
        if (unlikely(!PyArg_ValidateKeywordArguments(kw))) return -1;
    }
    return 0;
#endif
}

/* RaiseClosureNameError */
static void __Pyx_RaiseClosureNameError(const char *varname) {
    PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
}

/* PyObjectFormatAndDecref */
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatSimpleAndDecref(PyObject* s, PyObject* f) {
    if (unlikely(!s)) return NULL;
    if (likely(PyUnicode_CheckExact(s))) return s;
    return __Pyx_PyObject_FormatAndDecref(s, f);
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_FormatAndDecref(PyObject* s, PyObject* f) {
    PyObject *result;
    if (unlikely(!s)) return NULL;
    result = PyObject_Format(s, f);
    Py_DECREF(s);
    return result;
}

/* UnicodeConcatInPlace */
# if CYTHON_COMPILING_IN_CPYTHON
static int
__Pyx_unicode_modifiable(PyObject *unicode, int unsafe_shared)
{
    if (!__Pyx_IS_UNIQUELY_REFERENCED(unicode, unsafe_shared))
        return 0;
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030F0000
    if (PyUnstable_Unicode_GET_CACHED_HASH(unicode) != -1)
        return 0;
#endif
    if (!PyUnicode_CheckExact(unicode))
        return 0;
    if (PyUnicode_CHECK_INTERNED(unicode))
        return 0;
    return 1;
}
static CYTHON_INLINE PyObject *__Pyx_PyUnicode_ConcatInPlaceImpl(PyObject **p_left, PyObject *right, int unsafe_shared
        #if CYTHON_REFNANNY
        , void* __pyx_refnanny
        #endif
    ) {
    PyObject *left = *p_left;
    Py_ssize_t left_len, right_len, new_len;
    if (unlikely(__Pyx_PyUnicode_READY(left) == -1))
        return NULL;
    if (unlikely(__Pyx_PyUnicode_READY(right) == -1))
        return NULL;
    left_len = PyUnicode_GET_LENGTH(left);
    if (left_len == 0) {
        Py_INCREF(right);
        return right;
    }
    right_len = PyUnicode_GET_LENGTH(right);
    if (right_len == 0) {
        Py_INCREF(left);
        return left;
    }
    if (unlikely(left_len > PY_SSIZE_T_MAX - right_len)) {
        PyErr_SetString(PyExc_OverflowError,
                        "strings are too large to concat");
        return NULL;
    }
    new_len = left_len + right_len;
    if (__Pyx_unicode_modifiable(left, unsafe_shared)
            && PyUnicode_CheckExact(right)
            && PyUnicode_KIND(right) <= PyUnicode_KIND(left)
            && !(PyUnicode_IS_ASCII(left) && !PyUnicode_IS_ASCII(right))) {
        int ret;
        __Pyx_GIVEREF(*p_left);
        ret = PyUnicode_Resize(p_left, new_len);
        __Pyx_GOTREF(*p_left);
        if (unlikely(ret != 0))
            return NULL;
        #if PY_VERSION_HEX >= 0x030d0000
        if (unlikely(PyUnicode_CopyCharacters(*p_left, left_len, right, 0, right_len) < 0)) return NULL;
        #else
        _PyUnicode_FastCopyCharacters(*p_left, left_len, right, 0, right_len);
        #endif
        __Pyx_INCREF(*p_left);
        __Pyx_GIVEREF(*p_left);
        return *p_left;
    } else {
        return __Pyx_PyUnicode_Concat(left, right);
    }
  }
#endif

/* JoinPyUnicode */
static PyObject* __Pyx_PyUnicode_Join(PyObject** values, Py_ssize_t value_count, Py_ssize_t result_ulength,
                                      Py_UCS4 max_char) {
#if CYTHON_USE_UNICODE_INTERNALS && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    PyObject *result_uval;
    int result_ukind, kind_shift;
    Py_ssize_t i, char_pos;
    void *result_udata;
    if (max_char > 1114111) max_char = 1114111;
    result_uval = PyUnicode_New(result_ulength, max_char);
    if (unlikely(!result_uval)) return NULL;
    result_ukind = (max_char <= 255) ? PyUnicode_1BYTE_KIND : (max_char <= 65535) ? PyUnicode_2BYTE_KIND : PyUnicode_4BYTE_KIND;
    kind_shift = (result_ukind == PyUnicode_4BYTE_KIND) ? 2 : result_ukind - 1;
    result_udata = PyUnicode_DATA(result_uval);
    assert(kind_shift == 2 || kind_shift == 1 || kind_shift == 0);
    if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - result_ulength < 0))
        goto overflow;
    char_pos = 0;
    for (i=0; i < value_count; i++) {
        int ukind;
        Py_ssize_t ulength;
        void *udata;
        PyObject *uval = values[i];
        #if !CYTHON_COMPILING_IN_LIMITED_API
        if (__Pyx_PyUnicode_READY(uval) == (-1))
            goto bad;
        #endif
        ulength = __Pyx_PyUnicode_GET_LENGTH(uval);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(ulength < 0)) goto bad;
        #endif
        if (unlikely(!ulength))
            continue;
        if (unlikely((PY_SSIZE_T_MAX >> kind_shift) - ulength < char_pos))
            goto overflow;
        ukind = __Pyx_PyUnicode_KIND(uval);
        udata = __Pyx_PyUnicode_DATA(uval);
        if (ukind == result_ukind) {
            memcpy((char *)result_udata + (char_pos << kind_shift), udata, (size_t) (ulength << kind_shift));
        } else {
            #if PY_VERSION_HEX >= 0x030d0000
            if (unlikely(PyUnicode_CopyCharacters(result_uval, char_pos, uval, 0, ulength) < 0)) goto bad;
            #elif CYTHON_COMPILING_IN_CPYTHON || defined(_PyUnicode_FastCopyCharacters)
            _PyUnicode_FastCopyCharacters(result_uval, char_pos, uval, 0, ulength);
            #else
            Py_ssize_t j;
            for (j=0; j < ulength; j++) {
                Py_UCS4 uchar = __Pyx_PyUnicode_READ(ukind, udata, j);
                __Pyx_PyUnicode_WRITE(result_ukind, result_udata, char_pos+j, uchar);
            }
            #endif
        }
        char_pos += ulength;
    }
    return result_uval;
overflow:
    PyErr_SetString(PyExc_OverflowError, "join() result is too long for a Python string");
bad:
    Py_DECREF(result_uval);
    return NULL;
#else
    Py_ssize_t i;
    PyObject *result = NULL;
    PyObject *value_tuple = PyTuple_New(value_count);
    if (unlikely(!value_tuple)) return NULL;
    CYTHON_UNUSED_VAR(max_char);
    CYTHON_UNUSED_VAR(result_ulength);
    for (i=0; i<value_count; i++) {
        if (__Pyx_PyTuple_SET_ITEM(value_tuple, i, values[i]) != (0)) goto bad;
        Py_INCREF(values[i]);
    }
    result = PyUnicode_Join(__pyx_mstate_global->__pyx_empty_unicode, value_tuple);
bad:
    Py_DECREF(value_tuple);
    return result;
#endif
}

/* PyDictVersioning (used by GetModuleGlobalName) */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
    PyObject **dictptr = NULL;
    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
    if (offset) {
#if CYTHON_COMPILING_IN_CPYTHON
        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
#else
        dictptr = _PyObject_GetDictPtr(obj);
#endif
    }
    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
}
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
        return 0;
    return obj_dict_version == __Pyx_get_object_dict_version(obj);
}
#endif

/* GetModuleGlobalName */
#if CYTHON_USE_DICT_VERSIONS
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
#else
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
#endif
{
    PyObject *result;
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(!__pyx_m)) {
        if (!PyErr_Occurred())
            PyErr_SetNone(PyExc_NameError);
        return NULL;
    }
    result = PyObject_GetAttr(__pyx_m, name);
    if (likely(result)) {
        return result;
    }
    PyErr_Clear();
#elif CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS
    if (unlikely(__Pyx_PyDict_GetItemRef(__pyx_mstate_global->__pyx_d, name, &result) == -1)) PyErr_Clear();
    __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return result;
    }
#else
    result = _PyDict_GetItem_KnownHash(__pyx_mstate_global->__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_mstate_global->__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
    PyErr_Clear();
#endif
    return __Pyx_GetBuiltinName(name);
}

/* dict_setdefault (used by FetchCommonType) */
static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value) {
    PyObject* value;
#if __PYX_LIMITED_VERSION_HEX >= 0x030F0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4)
    PyDict_SetDefaultRef(d, key, default_value, &value);
#elif CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    PyObject *args[] = {d, key, default_value};
    value = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_n_u_setdefault, args, 3 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#elif CYTHON_COMPILING_IN_LIMITED_API
    value = PyObject_CallMethodObjArgs(d, __pyx_mstate_global->__pyx_n_u_setdefault, key, default_value, NULL);
#else
    value = PyDict_SetDefault(d, key, default_value);
    if (unlikely(!value)) return NULL;
    Py_INCREF(value);
#endif
    return value;
}

/* LimitedApiGetTypeDict (used by SetItemOnTypeDict) */
#if CYTHON_COMPILING_IN_LIMITED_API
static Py_ssize_t __Pyx_GetTypeDictOffset(void) {
    PyObject *tp_dictoffset_o;
    Py_ssize_t tp_dictoffset;
    tp_dictoffset_o = PyObject_GetAttrString((PyObject*)(&PyType_Type), "__dictoffset__");
    if (unlikely(!tp_dictoffset_o)) return -1;
    tp_dictoffset = PyLong_AsSsize_t(tp_dictoffset_o);
    Py_DECREF(tp_dictoffset_o);
    if (unlikely(tp_dictoffset == 0)) {
        PyErr_SetString(
            PyExc_TypeError,
            "'type' doesn't have a dictoffset");
        return -1;
    } else if (unlikely(tp_dictoffset < 0)) {
        PyErr_SetString(
            PyExc_TypeError,
            "'type' has an unexpected negative dictoffset. "
            "Please report this as Cython bug");
        return -1;
    }
    return tp_dictoffset;
}
static PyObject *__Pyx_GetTypeDict(PyTypeObject *tp) {
    static Py_ssize_t tp_dictoffset = 0;
    if (unlikely(tp_dictoffset == 0)) {
        tp_dictoffset = __Pyx_GetTypeDictOffset();
        if (unlikely(tp_dictoffset == -1 && PyErr_Occurred())) {
            tp_dictoffset = 0; // try again next time?
            return NULL;
        }
    }
    return *(PyObject**)((char*)tp + tp_dictoffset);
}
#endif

/* SetItemOnTypeDict (used by FixUpExtensionType) */
static int __Pyx__SetItemOnTypeDict(PyTypeObject *tp, PyObject *k, PyObject *v) {
    int result;
    PyObject *tp_dict;
#if CYTHON_COMPILING_IN_LIMITED_API
    tp_dict = __Pyx_GetTypeDict(tp);
    if (unlikely(!tp_dict)) return -1;
#else
    tp_dict = tp->tp_dict;
#endif
    result = PyDict_SetItem(tp_dict, k, v);
    if (likely(!result)) {
        PyType_Modified(tp);
        if (unlikely(PyObject_HasAttr(v, __pyx_mstate_global->__pyx_n_u_set_name))) {
            PyObject *setNameResult = PyObject_CallMethodObjArgs(v, __pyx_mstate_global->__pyx_n_u_set_name,  (PyObject *) tp, k, NULL);
            if (!setNameResult) return -1;
            Py_DECREF(setNameResult);
        }
    }
    return result;
}

/* FixUpExtensionType (used by FetchCommonType) */
static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type) {
#if __PYX_LIMITED_VERSION_HEX > 0x030900B1
    CYTHON_UNUSED_VAR(spec);
    CYTHON_UNUSED_VAR(type);
    CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
#else
    const PyType_Slot *slot = spec->slots;
    int changed = 0;
#if !CYTHON_COMPILING_IN_LIMITED_API
    while (slot && slot->slot && slot->slot != Py_tp_members)
        slot++;
    if (slot && slot->slot == Py_tp_members) {
#if !CYTHON_COMPILING_IN_CPYTHON
        const
#endif  // !CYTHON_COMPILING_IN_CPYTHON)
            PyMemberDef *memb = (PyMemberDef*) slot->pfunc;
        while (memb && memb->name) {
            if (memb->name[0] == '_' && memb->name[1] == '_') {
                if (strcmp(memb->name, "__weaklistoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_weaklistoffset = memb->offset;
                    changed = 1;
                }
                else if (strcmp(memb->name, "__dictoffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_dictoffset = memb->offset;
                    changed = 1;
                }
#if CYTHON_METH_FASTCALL
                else if (strcmp(memb->name, "__vectorcalloffset__") == 0) {
                    assert(memb->type == T_PYSSIZET);
                    assert(memb->flags == READONLY);
                    type->tp_vectorcall_offset = memb->offset;
                    changed = 1;
                }
#endif  // CYTHON_METH_FASTCALL
#if !CYTHON_COMPILING_IN_PYPY
                else if (strcmp(memb->name, "__module__") == 0) {
                    PyObject *descr;
                    assert(memb->type == T_OBJECT);
                    assert(memb->flags == 0 || memb->flags == READONLY);
                    descr = PyDescr_NewMember(type, memb);
                    if (unlikely(!descr))
                        return -1;
                    int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
                    Py_DECREF(descr);
                    if (unlikely(set_item_result < 0)) {
                        return -1;
                    }
                    changed = 1;
                }
#endif  // !CYTHON_COMPILING_IN_PYPY
            }
            memb++;
        }
    }
#endif  // !CYTHON_COMPILING_IN_LIMITED_API
#if !CYTHON_COMPILING_IN_PYPY
    slot = spec->slots;
    while (slot && slot->slot && slot->slot != Py_tp_getset)
        slot++;
    if (slot && slot->slot == Py_tp_getset) {
        PyGetSetDef *getset = (PyGetSetDef*) slot->pfunc;
        while (getset && getset->name) {
            if (getset->name[0] == '_' && getset->name[1] == '_' && strcmp(getset->name, "__module__") == 0) {
                PyObject *descr = PyDescr_NewGetSet(type, getset);
                if (unlikely(!descr))
                    return -1;
                #if CYTHON_COMPILING_IN_LIMITED_API
                PyObject *pyname = PyUnicode_FromString(getset->name);
                if (unlikely(!pyname)) {
                    Py_DECREF(descr);
                    return -1;
                }
                int set_item_result = __Pyx_SetItemOnTypeDict(type, pyname, descr);
                Py_DECREF(pyname);
                #else
                CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
                int set_item_result = PyDict_SetItem(type->tp_dict, PyDescr_NAME(descr), descr);
                #endif
                Py_DECREF(descr);
                if (unlikely(set_item_result < 0)) {
                    return -1;
                }
                changed = 1;
            }
            ++getset;
        }
    }
#else
    CYTHON_UNUSED_VAR(__Pyx__SetItemOnTypeDict);
#endif  // !CYTHON_COMPILING_IN_PYPY
    if (changed)
        PyType_Modified(type);
#endif  // PY_VERSION_HEX > 0x030900B1
    return 0;
}

/* AddModuleRef (used by FetchSharedCythonModule) */
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  static PyObject *__Pyx_PyImport_AddModuleObjectRef(PyObject *name) {
      PyObject *module_dict = PyImport_GetModuleDict();
      PyObject *m;
      if (PyMapping_GetOptionalItem(module_dict, name, &m) < 0) {
          return NULL;
      }
      if (m != NULL && PyModule_Check(m)) {
          return m;
      }
      Py_XDECREF(m);
      m = PyModule_NewObject(name);
      if (m == NULL)
          return NULL;
      if (PyDict_CheckExact(module_dict)) {
          PyObject *new_m;
          (void)PyDict_SetDefaultRef(module_dict, name, m, &new_m);
          Py_DECREF(m);
          return new_m;
      } else {
           if (PyObject_SetItem(module_dict, name, m) != 0) {
                Py_DECREF(m);
                return NULL;
            }
            return m;
      }
  }
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
      PyObject *py_name = PyUnicode_FromString(name);
      if (!py_name) return NULL;
      PyObject *module = __Pyx_PyImport_AddModuleObjectRef(py_name);
      Py_DECREF(py_name);
      return module;
  }
#elif __PYX_LIMITED_VERSION_HEX >= 0x030d0000
  #define __Pyx_PyImport_AddModuleRef(name) PyImport_AddModuleRef(name)
#else
  static PyObject *__Pyx_PyImport_AddModuleRef(const char *name) {
      PyObject *module = PyImport_AddModule(name);
      Py_XINCREF(module);
      return module;
  }
#endif

/* FetchSharedCythonModule (used by FetchCommonType) */
static PyObject *__Pyx_FetchSharedCythonABIModule(void) {
    return __Pyx_PyImport_AddModuleRef(__PYX_ABI_MODULE_NAME);
}

/* FetchCommonType (used by CommonTypesMetaclass) */
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
static PyObject* __Pyx_PyType_FromMetaclass(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
    PyObject *result = __Pyx_PyType_FromModuleAndSpec(module, spec, bases);
    if (result && metaclass) {
        PyObject *old_tp = (PyObject*)Py_TYPE(result);
    Py_INCREF((PyObject*)metaclass);
#if __PYX_LIMITED_VERSION_HEX >= 0x03090000
        Py_SET_TYPE(result, metaclass);
#else
        result->ob_type = metaclass;
#endif
        Py_DECREF(old_tp);
    }
    return result;
}
#else
#define __Pyx_PyType_FromMetaclass(me, mo, s, b) PyType_FromMetaclass(me, mo, s, b)
#endif
static int __Pyx_VerifyCachedType(PyObject *cached_type,
                               const char *name,
                               Py_ssize_t expected_basicsize) {
    Py_ssize_t basicsize;
    if (!PyType_Check(cached_type)) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s is not a type object", name);
        return -1;
    }
    if (expected_basicsize == 0) {
        return 0; // size is inherited, nothing useful to check
    }
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_basicsize;
    py_basicsize = PyObject_GetAttrString(cached_type, "__basicsize__");
    if (unlikely(!py_basicsize)) return -1;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = NULL;
    if (unlikely(basicsize == (Py_ssize_t)-1) && PyErr_Occurred()) return -1;
#else
    basicsize = ((PyTypeObject*) cached_type)->tp_basicsize;
#endif
    if (basicsize != expected_basicsize) {
        PyErr_Format(PyExc_TypeError,
            "Shared Cython type %.200s has the wrong size, try recompiling",
            name);
        return -1;
    }
    return 0;
}
static PyTypeObject *__Pyx_FetchCommonTypeFromSpec(PyTypeObject *metaclass, PyObject *module, PyType_Spec *spec, PyObject *bases) {
    PyObject *abi_module = NULL, *cached_type = NULL, *abi_module_dict, *new_cached_type, *py_object_name;
    int get_item_ref_result;
    const char* object_name = strrchr(spec->name, '.');
    object_name = object_name ? object_name+1 : spec->name;
    py_object_name = PyUnicode_FromString(object_name);
    if (!py_object_name) return NULL;
    abi_module = __Pyx_FetchSharedCythonABIModule();
    if (!abi_module) goto done;
    abi_module_dict = PyModule_GetDict(abi_module);
    if (!abi_module_dict) goto done;
    get_item_ref_result = __Pyx_PyDict_GetItemRef(abi_module_dict, py_object_name, &cached_type);
    if (get_item_ref_result == 1) {
        if (__Pyx_VerifyCachedType(
              cached_type,
              object_name,
              spec->basicsize) < 0) {
            goto bad;
        }
        goto done;
    } else if (unlikely(get_item_ref_result == -1)) {
        goto bad;
    }
    cached_type = __Pyx_PyType_FromMetaclass(
        metaclass,
        CYTHON_USE_MODULE_STATE ? module : abi_module,
        spec, bases);
    if (unlikely(!cached_type)) goto bad;
    if (unlikely(__Pyx_fix_up_extension_type_from_spec(spec, (PyTypeObject *) cached_type) < 0)) goto bad;
    new_cached_type = __Pyx_PyDict_SetDefault(abi_module_dict, py_object_name, cached_type);
    if (unlikely(new_cached_type != cached_type)) {
        if (unlikely(!new_cached_type)) goto bad;
        Py_DECREF(cached_type);
        cached_type = new_cached_type;
        if (__Pyx_VerifyCachedType(
                cached_type,
                object_name,
                spec->basicsize) < 0) {
            goto bad;
        }
        goto done;
    } else {
        Py_DECREF(new_cached_type);
    }
done:
    Py_XDECREF(abi_module);
    Py_DECREF(py_object_name);
    assert(cached_type == NULL || PyType_Check(cached_type));
    return (PyTypeObject *) cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* CommonTypesMetaclass (used by CythonFunctionShared) */
static PyObject* __pyx_CommonTypesMetaclass_get_module(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED void* context) {
    return PyUnicode_FromString(__PYX_ABI_MODULE_NAME);
}
#if __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject* __pyx_CommonTypesMetaclass_call(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *args, CYTHON_UNUSED PyObject *kwds) {
    PyErr_SetString(PyExc_TypeError, "Cannot instantiate Cython internal types");
    return NULL;
}
static int __pyx_CommonTypesMetaclass_setattr(CYTHON_UNUSED PyObject *self, CYTHON_UNUSED PyObject *attr, CYTHON_UNUSED PyObject *value) {
    PyErr_SetString(PyExc_TypeError, "Cython internal types are immutable");
    return -1;
}
#endif
static PyGetSetDef __pyx_CommonTypesMetaclass_getset[] = {
    {"__module__", __pyx_CommonTypesMetaclass_get_module, NULL, NULL, NULL},
    {0, 0, 0, 0, 0}
};
static PyType_Slot __pyx_CommonTypesMetaclass_slots[] = {
    {Py_tp_getset, (void *)__pyx_CommonTypesMetaclass_getset},
    #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
    {Py_tp_call, (void*)__pyx_CommonTypesMetaclass_call},
    {Py_tp_new, (void*)__pyx_CommonTypesMetaclass_call},
    {Py_tp_setattro, (void*)__pyx_CommonTypesMetaclass_setattr},
    #endif
    {0, 0}
};
static PyType_Spec __pyx_CommonTypesMetaclass_spec = {
    __PYX_TYPE_MODULE_PREFIX "_common_types_metatype",
    0,
    0,
    Py_TPFLAGS_IMMUTABLETYPE |
    Py_TPFLAGS_DISALLOW_INSTANTIATION |
    Py_TPFLAGS_DEFAULT,
    __pyx_CommonTypesMetaclass_slots
};
static int __pyx_CommonTypesMetaclass_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
    PyObject *bases = PyTuple_Pack(1, &PyType_Type);
    if (unlikely(!bases)) {
        return -1;
    }
    mstate->__pyx_CommonTypesMetaclassType = __Pyx_FetchCommonTypeFromSpec(NULL, module, &__pyx_CommonTypesMetaclass_spec, bases);
    Py_DECREF(bases);
    if (unlikely(mstate->__pyx_CommonTypesMetaclassType == NULL)) {
        return -1;
    }
    return 0;
}

/* CallTypeTraverse (used by CythonFunctionShared) */
#if !CYTHON_USE_TYPE_SPECS || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x03090000)
#else
static int __Pyx_call_type_traverse(PyObject *o, int always_call, visitproc visit, void *arg) {
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x03090000
    if (__Pyx_get_runtime_version() < 0x03090000) return 0;
    #endif
    if (!always_call) {
        PyTypeObject *base = __Pyx_PyObject_GetSlot(o, tp_base, PyTypeObject*);
        unsigned long flags = PyType_GetFlags(base);
        if (flags & Py_TPFLAGS_HEAPTYPE) {
            return 0;
        }
    }
    Py_VISIT((PyObject*)Py_TYPE(o));
    return 0;
}
#endif

/* PyMethodNew (used by CythonFunctionShared) */
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    PyObject *result;
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    #if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    {
        PyObject *args[] = {func, self};
        result = PyObject_Vectorcall(__pyx_mstate_global->__Pyx_CachedMethodType, args, 2, NULL);
    }
    #else
    result = PyObject_CallFunctionObjArgs(__pyx_mstate_global->__Pyx_CachedMethodType, func, self, NULL);
    #endif
    return result;
}
#else
static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
    CYTHON_UNUSED_VAR(typ);
    if (!self)
        return __Pyx_NewRef(func);
    return PyMethod_New(func, self);
}
#endif

/* PyVectorcallFastCallDict (used by CythonFunctionShared) */
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
static PyObject *__Pyx_PyVectorcall_FastCallDict_kw(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    PyObject *res = NULL;
    PyObject *kwnames;
    PyObject **newargs;
    PyObject **kwvalues;
    Py_ssize_t i;
    #if CYTHON_AVOID_BORROWED_REFS
    PyObject *pos;
    #else
    Py_ssize_t pos;
    #endif
    size_t j;
    PyObject *key, *value;
    unsigned long keys_are_strings;
    #if !CYTHON_ASSUME_SAFE_SIZE
    Py_ssize_t nkw = PyDict_Size(kw);
    if (unlikely(nkw == -1)) return NULL;
    #else
    Py_ssize_t nkw = PyDict_GET_SIZE(kw);
    #endif
    newargs = (PyObject **)PyMem_Malloc((nargs + (size_t)nkw) * sizeof(args[0]));
    if (unlikely(newargs == NULL)) {
        PyErr_NoMemory();
        return NULL;
    }
    for (j = 0; j < nargs; j++) newargs[j] = args[j];
    kwnames = PyTuple_New(nkw);
    if (unlikely(kwnames == NULL)) {
        PyMem_Free(newargs);
        return NULL;
    }
    kwvalues = newargs + nargs;
    pos = 0;
    i = 0;
    keys_are_strings = Py_TPFLAGS_UNICODE_SUBCLASS;
    while (__Pyx_PyDict_NextRef(kw, &pos, &key, &value)) {
        keys_are_strings &=
        #if CYTHON_COMPILING_IN_LIMITED_API
            PyType_GetFlags(Py_TYPE(key));
        #else
            Py_TYPE(key)->tp_flags;
        #endif
        #if !CYTHON_ASSUME_SAFE_MACROS
        if (unlikely(PyTuple_SetItem(kwnames, i, key) < 0)) goto cleanup;
        #else
        PyTuple_SET_ITEM(kwnames, i, key);
        #endif
        kwvalues[i] = value;
        i++;
    }
    if (unlikely(!keys_are_strings)) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        goto cleanup;
    }
    res = vc(func, newargs, nargs, kwnames);
cleanup:
    #if CYTHON_AVOID_BORROWED_REFS
    Py_DECREF(pos);
    #endif
    Py_DECREF(kwnames);
    for (i = 0; i < nkw; i++)
        Py_DECREF(kwvalues[i]);
    PyMem_Free(newargs);
    return res;
}
static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw)
{
    Py_ssize_t kw_size =
        likely(kw == NULL) ?
        0 :
#if !CYTHON_ASSUME_SAFE_SIZE
        PyDict_Size(kw);
#else
        PyDict_GET_SIZE(kw);
#endif
    if (kw_size == 0) {
        return vc(func, args, nargs, NULL);
    }
#if !CYTHON_ASSUME_SAFE_SIZE
    else if (unlikely(kw_size == -1)) {
        return NULL;
    }
#endif
    return __Pyx_PyVectorcall_FastCallDict_kw(func, vc, args, nargs, kw);
}
#endif

/* CythonFunctionShared (used by CythonFunction) */
#if CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunctionNoMethod(PyObject *func, void (*cfunc)(void)) {
    if (__Pyx_CyFunction_Check(func)) {
        return PyCFunction_GetFunction(((__pyx_CyFunctionObject*)func)->func) == (PyCFunction) cfunc;
    } else if (PyCFunction_Check(func)) {
        return PyCFunction_GetFunction(func) == (PyCFunction) cfunc;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
    if ((PyObject*)Py_TYPE(func) == __pyx_mstate_global->__Pyx_CachedMethodType) {
        int result;
        PyObject *newFunc = PyObject_GetAttr(func, __pyx_mstate_global->__pyx_n_u_func_2);
        if (unlikely(!newFunc)) {
            PyErr_Clear(); // It's only an optimization, so don't throw an error
            return 0;
        }
        result = __Pyx__IsSameCyOrCFunctionNoMethod(newFunc, cfunc);
        Py_DECREF(newFunc);
        return result;
    }
    return __Pyx__IsSameCyOrCFunctionNoMethod(func, cfunc);
}
#else
static CYTHON_INLINE int __Pyx__IsSameCyOrCFunction(PyObject *func, void (*cfunc)(void)) {
    if (PyMethod_Check(func)) {
        func = PyMethod_GET_FUNCTION(func);
    }
    return __Pyx_CyOrPyCFunction_Check(func) && __Pyx_CyOrPyCFunction_GET_FUNCTION(func) == (PyCFunction) cfunc;
}
#endif
static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj) {
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    __Pyx_Py_XDECREF_SET(
        __Pyx_CyFunction_GetClassObj(f),
            ((classobj) ? __Pyx_NewRef(classobj) : NULL));
#else
    __Pyx_Py_XDECREF_SET(
        ((PyCMethodObject *) (f))->mm_class,
        (PyTypeObject*)((classobj) ? __Pyx_NewRef(classobj) : NULL));
#endif
}
static PyObject *
__Pyx_CyFunction_get_doc_locked(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_doc == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_doc = PyObject_GetAttrString(op->func, "__doc__");
        if (unlikely(!op->func_doc)) return NULL;
#else
        if (((PyCFunctionObject*)op)->m_ml->ml_doc) {
            op->func_doc = PyUnicode_FromString(((PyCFunctionObject*)op)->m_ml->ml_doc);
            if (unlikely(op->func_doc == NULL))
                return NULL;
        } else {
            Py_INCREF(Py_None);
            return Py_None;
        }
#endif
    }
    Py_INCREF(op->func_doc);
    return op->func_doc;
}
static PyObject *
__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, void *closure) {
    PyObject *result;
    CYTHON_UNUSED_VAR(closure);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_doc_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (value == NULL) {
        value = Py_None;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_doc, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_name_locked(__pyx_CyFunctionObject *op)
{
    if (unlikely(op->func_name == NULL)) {
#if CYTHON_COMPILING_IN_LIMITED_API
        op->func_name = PyObject_GetAttrString(op->func, "__name__");
#else
        op->func_name = PyUnicode_InternFromString(((PyCFunctionObject*)op)->m_ml->ml_name);
#endif
        if (unlikely(op->func_name == NULL))
            return NULL;
    }
    Py_INCREF(op->func_name);
    return op->func_name;
}
static PyObject *
__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, void *context)
{
    PyObject *result = NULL;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_name_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_name, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    PyObject *result;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    Py_INCREF(op->func_qualname);
    result = op->func_qualname;
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_qualname, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject *
__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(op->func_dict == NULL)) {
        op->func_dict = PyDict_New();
        if (unlikely(op->func_dict == NULL))
            return NULL;
    }
    Py_INCREF(op->func_dict);
    return op->func_dict;
}
#endif
static PyObject *
__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(op->func_globals);
    return op->func_globals;
}
static PyObject *
__Pyx_CyFunction_get_closure(__pyx_CyFunctionObject *op, void *context)
{
    CYTHON_UNUSED_VAR(op);
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(Py_None);
    return Py_None;
}
static PyObject *
__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, void *context)
{
    PyObject* result = (op->func_code) ? op->func_code : Py_None;
    CYTHON_UNUSED_VAR(context);
    Py_INCREF(result);
    return result;
}
static int
__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
    int result = 0;
    PyObject *res = op->defaults_getter((PyObject *) op);
    if (unlikely(!res))
        return -1;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
    Py_INCREF(op->defaults_tuple);
    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
    Py_INCREF(op->defaults_kwdict);
    #else
    op->defaults_tuple = __Pyx_PySequence_ITEM(res, 0);
    if (unlikely(!op->defaults_tuple)) result = -1;
    else {
        op->defaults_kwdict = __Pyx_PySequence_ITEM(res, 1);
        if (unlikely(!op->defaults_kwdict)) result = -1;
    }
    #endif
    Py_DECREF(res);
    return result;
}
static int
__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyTuple_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__defaults__ must be set to a tuple object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__defaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->defaults_tuple, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_defaults_locked(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_tuple;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_tuple;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result = NULL;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_defaults_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value) {
        value = Py_None;
    } else if (unlikely(value != Py_None && !PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__kwdefaults__ must be set to a dict object");
        return -1;
    }
    PyErr_WarnEx(PyExc_RuntimeWarning, "changes to cyfunction.__kwdefaults__ will not "
                 "currently affect the values used in function calls", 1);
    Py_INCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->defaults_kwdict, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults_locked(__pyx_CyFunctionObject *op) {
    PyObject* result = op->defaults_kwdict;
    if (unlikely(!result)) {
        if (op->defaults_getter) {
            if (unlikely(__Pyx_CyFunction_init_defaults(op) < 0)) return NULL;
            result = op->defaults_kwdict;
        } else {
            result = Py_None;
        }
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, void *context) {
    PyObject* result;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_kwdefaults_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static int
__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    if (!value || value == Py_None) {
        value = NULL;
    } else if (unlikely(!PyDict_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__annotations__ must be set to a dict object");
        return -1;
    }
    Py_XINCREF(value);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    __Pyx_Py_XDECREF_SET(op->func_annotations, value);
    __Pyx_END_CRITICAL_SECTION();
    return 0;
}
static PyObject *
__Pyx_CyFunction_get_annotations_locked(__pyx_CyFunctionObject *op) {
    PyObject* result = op->func_annotations;
    if (unlikely(!result)) {
        result = PyDict_New();
        if (unlikely(!result)) return NULL;
        op->func_annotations = result;
    }
    Py_INCREF(result);
    return result;
}
static PyObject *
__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, void *context) {
    PyObject *result;
    CYTHON_UNUSED_VAR(context);
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    result = __Pyx_CyFunction_get_annotations_locked(op);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine_value(__pyx_CyFunctionObject *op) {
    int is_coroutine = op->flags & __Pyx_CYFUNCTION_COROUTINE;
    if (is_coroutine) {
        PyObject *is_coroutine_value, *module, *fromlist, *marker = __pyx_mstate_global->__pyx_n_u_is_coroutine;
        fromlist = PyList_New(1);
        if (unlikely(!fromlist)) return NULL;
        Py_INCREF(marker);
#if CYTHON_ASSUME_SAFE_MACROS
        PyList_SET_ITEM(fromlist, 0, marker);
#else
        if (unlikely(PyList_SetItem(fromlist, 0, marker) < 0)) {
            Py_DECREF(marker);
            Py_DECREF(fromlist);
            return NULL;
        }
#endif
        module = PyImport_ImportModuleLevelObject(__pyx_mstate_global->__pyx_n_u_asyncio_coroutines, NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
        if (unlikely(!module)) goto ignore;
        is_coroutine_value = __Pyx_PyObject_GetAttrStr(module, marker);
        Py_DECREF(module);
        if (likely(is_coroutine_value)) {
            return is_coroutine_value;
        }
ignore:
        PyErr_Clear();
    }
    return __Pyx_PyBool_FromLong(is_coroutine);
}
static PyObject *
__Pyx_CyFunction_get_is_coroutine(__pyx_CyFunctionObject *op, void *context) {
    PyObject *result;
    CYTHON_UNUSED_VAR(context);
    if (op->func_is_coroutine) {
        return __Pyx_NewRef(op->func_is_coroutine);
    }
    result = __Pyx_CyFunction_get_is_coroutine_value(op);
    if (unlikely(!result))
        return NULL;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    if (op->func_is_coroutine) {
        Py_DECREF(result);
        result = __Pyx_NewRef(op->func_is_coroutine);
    } else {
        op->func_is_coroutine = __Pyx_NewRef(result);
    }
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static void __Pyx_CyFunction_raise_argument_count_error(__pyx_CyFunctionObject *func, const char* message, Py_ssize_t size) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        py_name, message, size);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s (%" CYTHON_FORMAT_SSIZE_T "d given)",
        name, message, size);
#endif
}
static void __Pyx_CyFunction_raise_type_error(__pyx_CyFunctionObject *func, const char* message) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *py_name = __Pyx_CyFunction_get_name(func, NULL);
    if (!py_name) return;
    PyErr_Format(PyExc_TypeError,
        "%.200S() %s",
        py_name, message);
    Py_DECREF(py_name);
#else
    const char* name = ((PyCFunctionObject*)func)->m_ml->ml_name;
    PyErr_Format(PyExc_TypeError,
        "%.200s() %s",
        name, message);
#endif
}
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *
__Pyx_CyFunction_get_module(__pyx_CyFunctionObject *op, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_GetAttrString(op->func, "__module__");
}
static int
__Pyx_CyFunction_set_module(__pyx_CyFunctionObject *op, PyObject* value, void *context) {
    CYTHON_UNUSED_VAR(context);
    return PyObject_SetAttrString(op->func, "__module__", value);
}
#endif
static PyGetSetDef __pyx_CyFunction_getsets[] = {
    {"func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
    {"func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
    {"__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
    {"func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
    {"__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)PyObject_GenericSetDict, 0, 0},
#else
    {"func_dict", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
    {"__dict__", (getter)PyObject_GenericGetDict, (setter)PyObject_GenericSetDict, 0, 0},
#endif
    {"func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
    {"func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
    {"func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
    {"func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
    {"__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
    {"__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
    {"_is_coroutine", (getter)__Pyx_CyFunction_get_is_coroutine, 0, 0, 0},
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", (getter)__Pyx_CyFunction_get_module, (setter)__Pyx_CyFunction_set_module, 0, 0},
#endif
    {0, 0, 0, 0, 0}
};
static PyMemberDef __pyx_CyFunction_members[] = {
#if !CYTHON_COMPILING_IN_LIMITED_API
    {"__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), 0, 0},
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    {"__dictoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_dict), READONLY, 0},
#endif
#if CYTHON_METH_FASTCALL
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_vectorcall), READONLY, 0},
#else
    {"__vectorcalloffset__", T_PYSSIZET, offsetof(PyCFunctionObject, vectorcall), READONLY, 0},
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
    {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CyFunctionObject, func_weakreflist), READONLY, 0},
#else
    {"__weaklistoffset__", T_PYSSIZET, offsetof(PyCFunctionObject, m_weakreflist), READONLY, 0},
#endif
#endif
    {0, 0, 0,  0, 0}
};
static PyObject *
__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, PyObject *args)
{
    PyObject *result = NULL;
    CYTHON_UNUSED_VAR(args);
    __Pyx_BEGIN_CRITICAL_SECTION(m);
    Py_INCREF(m->func_qualname);
    result = m->func_qualname;
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
static PyMethodDef __pyx_CyFunction_methods[] = {
    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
    {0, 0, 0, 0}
};
#if CYTHON_COMPILING_IN_LIMITED_API
#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
#else
#define __Pyx_CyFunction_weakreflist(cyfunc) (((PyCFunctionObject*)cyfunc)->m_weakreflist)
#endif
static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject *op, PyMethodDef *ml, int flags, PyObject* qualname,
                                       PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
#if !CYTHON_COMPILING_IN_LIMITED_API
    PyCFunctionObject *cf = (PyCFunctionObject*) op;
#endif
    if (unlikely(op == NULL))
        return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    op->func = PyCFunction_NewEx(ml, (PyObject*)op, module);
    if (unlikely(!op->func)) return NULL;
#endif
    op->flags = flags;
    __Pyx_CyFunction_weakreflist(op) = NULL;
#if !CYTHON_COMPILING_IN_LIMITED_API
    cf->m_ml = ml;
    cf->m_self = (PyObject *) op;
#endif
    Py_XINCREF(closure);
    op->func_closure = closure;
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_XINCREF(module);
    cf->m_module = module;
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    op->func_dict = NULL;
#endif
    op->func_name = NULL;
    Py_INCREF(qualname);
    op->func_qualname = qualname;
    op->func_doc = NULL;
#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
    op->func_classobj = NULL;
#else
    ((PyCMethodObject*)op)->mm_class = NULL;
#endif
    op->func_globals = globals;
    Py_INCREF(op->func_globals);
    Py_XINCREF(code);
    op->func_code = code;
    op->defaults = NULL;
    op->defaults_tuple = NULL;
    op->defaults_kwdict = NULL;
    op->defaults_getter = NULL;
    op->func_annotations = NULL;
    op->func_is_coroutine = NULL;
#if CYTHON_METH_FASTCALL
    switch (ml->ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | METH_KEYWORDS | METH_METHOD)) {
    case METH_NOARGS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_NOARGS;
        break;
    case METH_O:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_O;
        break;
    case METH_METHOD | METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD;
        break;
    case METH_FASTCALL | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS;
        break;
    case METH_VARARGS | METH_KEYWORDS:
        __Pyx_CyFunction_func_vectorcall(op) = NULL;
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        Py_DECREF(op);
        return NULL;
    }
#endif
    return (PyObject *) op;
}
static int
__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
{
    Py_CLEAR(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_CLEAR(m->func);
#else
    Py_CLEAR(((PyCFunctionObject*)m)->m_module);
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    Py_CLEAR(m->func_dict);
#elif PY_VERSION_HEX < 0x030d0000
    _PyObject_ClearManagedDict((PyObject*)m);
#else
    PyObject_ClearManagedDict((PyObject*)m);
#endif
    Py_CLEAR(m->func_name);
    Py_CLEAR(m->func_qualname);
    Py_CLEAR(m->func_doc);
    Py_CLEAR(m->func_globals);
    Py_CLEAR(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
#if PY_VERSION_HEX < 0x030900B1
    Py_CLEAR(__Pyx_CyFunction_GetClassObj(m));
#else
    {
        PyObject *cls = (PyObject*) ((PyCMethodObject *) (m))->mm_class;
        ((PyCMethodObject *) (m))->mm_class = NULL;
        Py_XDECREF(cls);
    }
#endif
#endif
    Py_CLEAR(m->defaults_tuple);
    Py_CLEAR(m->defaults_kwdict);
    Py_CLEAR(m->func_annotations);
    Py_CLEAR(m->func_is_coroutine);
    Py_CLEAR(m->defaults);
    return 0;
}
static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    if (__Pyx_CyFunction_weakreflist(m) != NULL)
        PyObject_ClearWeakRefs((PyObject *) m);
    __Pyx_CyFunction_clear(m);
    __Pyx_PyHeapTypeObject_GC_Del(m);
}
static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
{
    PyObject_GC_UnTrack(m);
    __Pyx__CyFunction_dealloc(m);
}
static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
{
    {
        int e = __Pyx_call_type_traverse((PyObject*)m, 1, visit, arg);
        if (e) return e;
    }
    Py_VISIT(m->func_closure);
#if CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(m->func);
#else
    Py_VISIT(((PyCFunctionObject*)m)->m_module);
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(m->func_dict);
#else
    {
        int e =
#if PY_VERSION_HEX < 0x030d0000
            _PyObject_VisitManagedDict
#else
            PyObject_VisitManagedDict
#endif
                ((PyObject*)m, visit, arg);
        if (e != 0) return e;
    }
#endif
    __Pyx_VISIT_CONST(m->func_name);
    __Pyx_VISIT_CONST(m->func_qualname);
    Py_VISIT(m->func_doc);
    Py_VISIT(m->func_globals);
    __Pyx_VISIT_CONST(m->func_code);
#if !CYTHON_COMPILING_IN_LIMITED_API
    Py_VISIT(__Pyx_CyFunction_GetClassObj(m));
#endif
    Py_VISIT(m->defaults_tuple);
    Py_VISIT(m->defaults_kwdict);
    Py_VISIT(m->func_is_coroutine);
    Py_VISIT(m->defaults);
    return 0;
}
static PyObject*
__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
{
    PyObject *repr;
    __Pyx_BEGIN_CRITICAL_SECTION(op);
    repr = PyUnicode_FromFormat("<cyfunction %U at %p>",
                                op->func_qualname, (void *)op);
    __Pyx_END_CRITICAL_SECTION();
    return repr;
}
static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) {
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *f = ((__pyx_CyFunctionObject*)func)->func;
    PyCFunction meth;
    int flags;
    meth = PyCFunction_GetFunction(f);
    if (unlikely(!meth)) return NULL;
    flags = PyCFunction_GetFlags(f);
    if (unlikely(flags < 0)) return NULL;
#else
    PyCFunctionObject* f = (PyCFunctionObject*)func;
    PyCFunction meth = f->m_ml->ml_meth;
    int flags = f->m_ml->ml_flags;
#endif
    Py_ssize_t size;
    switch (flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
    case METH_VARARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0))
            return (*meth)(self, arg);
        break;
    case METH_VARARGS | METH_KEYWORDS:
        return (*(PyCFunctionWithKeywords)(void(*)(void))meth)(self, arg, kw);
    case METH_NOARGS:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 0))
                return (*meth)(self, NULL);
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes no arguments", size);
            return NULL;
        }
        break;
    case METH_O:
        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
#if CYTHON_ASSUME_SAFE_SIZE
            size = PyTuple_GET_SIZE(arg);
#else
            size = PyTuple_Size(arg);
            if (unlikely(size < 0)) return NULL;
#endif
            if (likely(size == 1)) {
                PyObject *result, *arg0;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                arg0 = PyTuple_GET_ITEM(arg, 0);
                #else
                arg0 = __Pyx_PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
                #endif
                result = (*meth)(self, arg0);
                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                Py_DECREF(arg0);
                #endif
                return result;
            }
            __Pyx_CyFunction_raise_argument_count_error(
                (__pyx_CyFunctionObject*)func,
                "takes exactly one argument", size);
            return NULL;
        }
        break;
    default:
        PyErr_SetString(PyExc_SystemError, "Bad call flags for CyFunction");
        return NULL;
    }
    __Pyx_CyFunction_raise_type_error(
        (__pyx_CyFunctionObject*)func, "takes no keyword arguments");
    return NULL;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *self, *result;
#if CYTHON_COMPILING_IN_LIMITED_API
    self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)func)->func);
    if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
    self = ((PyCFunctionObject*)func)->m_self;
#endif
    result = __Pyx_CyFunction_CallMethod(func, self, arg, kw);
    return result;
}
static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
    PyObject *result;
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
     __pyx_vectorcallfunc vc = __Pyx_CyFunction_func_vectorcall(cyfunc);
    if (vc) {
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
        return __Pyx_PyVectorcall_FastCallDict(func, vc, &PyTuple_GET_ITEM(args, 0), (size_t)PyTuple_GET_SIZE(args), kw);
#else
        (void) &__Pyx_PyVectorcall_FastCallDict;
        return PyVectorcall_Call(func, args, kw);
#endif
    }
#endif
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        Py_ssize_t argc;
        PyObject *new_args;
        PyObject *self;
#if CYTHON_ASSUME_SAFE_SIZE
        argc = PyTuple_GET_SIZE(args);
#else
        argc = PyTuple_Size(args);
        if (unlikely(argc < 0)) return NULL;
#endif
        new_args = PyTuple_GetSlice(args, 1, argc);
        if (unlikely(!new_args))
            return NULL;
        self = PyTuple_GetItem(args, 0);
        if (unlikely(!self)) {
            Py_DECREF(new_args);
            PyErr_Format(PyExc_TypeError,
                         "unbound method %.200S() needs an argument",
                         cyfunc->func_qualname);
            return NULL;
        }
        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
        Py_DECREF(new_args);
    } else {
        result = __Pyx_CyFunction_Call(func, args, kw);
    }
    return result;
}
#if CYTHON_METH_FASTCALL && CYTHON_VECTORCALL
static CYTHON_INLINE int __Pyx_CyFunction_Vectorcall_CheckArgs(__pyx_CyFunctionObject *cyfunc, Py_ssize_t nargs, PyObject *kwnames)
{
    int ret = 0;
    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
        if (unlikely(nargs < 1)) {
            __Pyx_CyFunction_raise_type_error(
                cyfunc, "needs an argument");
            return -1;
        }
        ret = 1;
    }
    if (unlikely(kwnames) && unlikely(__Pyx_PyTuple_GET_SIZE(kwnames))) {
        __Pyx_CyFunction_raise_type_error(
            cyfunc, "takes no keyword arguments");
        return -1;
    }
    return ret;
}
static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 0)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes no arguments", nargs);
        return NULL;
    }
    return meth(self, NULL);
}
static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, kwnames)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    if (unlikely(nargs != 1)) {
        __Pyx_CyFunction_raise_argument_count_error(
            cyfunc, "takes exactly one argument", nargs);
        return NULL;
    }
    return meth(self, args[0]);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    return ((__Pyx_PyCFunctionFastWithKeywords)(void(*)(void))meth)(self, args, nargs, kwnames);
}
static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames)
{
    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *)func;
    PyTypeObject *cls = (PyTypeObject *) __Pyx_CyFunction_GetClassObj(cyfunc);
    Py_ssize_t nargs = PyVectorcall_NARGS(nargsf);
    PyObject *self;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyCFunction meth = PyCFunction_GetFunction(cyfunc->func);
    if (unlikely(!meth)) return NULL;
#else
    PyCFunction meth = ((PyCFunctionObject*)cyfunc)->m_ml->ml_meth;
#endif
    switch (__Pyx_CyFunction_Vectorcall_CheckArgs(cyfunc, nargs, NULL)) {
    case 1:
        self = args[0];
        args += 1;
        nargs -= 1;
        break;
    case 0:
#if CYTHON_COMPILING_IN_LIMITED_API
        self = PyCFunction_GetSelf(((__pyx_CyFunctionObject*)cyfunc)->func);
        if (unlikely(!self) && PyErr_Occurred()) return NULL;
#else
        self = ((PyCFunctionObject*)cyfunc)->m_self;
#endif
        break;
    default:
        return NULL;
    }
    #if PY_VERSION_HEX < 0x030e00A6
    size_t nargs_value = (size_t) nargs;
    #else
    Py_ssize_t nargs_value = nargs;
    #endif
    return ((__Pyx_PyCMethod)(void(*)(void))meth)(self, cls, args, nargs_value, kwnames);
}
#endif
static PyType_Slot __pyx_CyFunctionType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_CyFunction_dealloc},
    {Py_tp_repr, (void *)__Pyx_CyFunction_repr},
    {Py_tp_call, (void *)__Pyx_CyFunction_CallAsMethod},
    {Py_tp_traverse, (void *)__Pyx_CyFunction_traverse},
    {Py_tp_clear, (void *)__Pyx_CyFunction_clear},
    {Py_tp_methods, (void *)__pyx_CyFunction_methods},
    {Py_tp_members, (void *)__pyx_CyFunction_members},
    {Py_tp_getset, (void *)__pyx_CyFunction_getsets},
    {Py_tp_descr_get, (void *)__Pyx_PyMethod_New},
    {0, 0},
};
static PyType_Spec __pyx_CyFunctionType_spec = {
    __PYX_TYPE_MODULE_PREFIX "cython_function_or_method",
    sizeof(__pyx_CyFunctionObject),
    0,
#ifdef Py_TPFLAGS_METHOD_DESCRIPTOR
    Py_TPFLAGS_METHOD_DESCRIPTOR |
#endif
#if CYTHON_METH_FASTCALL
#if defined(Py_TPFLAGS_HAVE_VECTORCALL)
    Py_TPFLAGS_HAVE_VECTORCALL |
#elif defined(_Py_TPFLAGS_HAVE_VECTORCALL)
    _Py_TPFLAGS_HAVE_VECTORCALL |
#endif
#endif // CYTHON_METH_FASTCALL
#if PY_VERSION_HEX >= 0x030C0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_TPFLAGS_MANAGED_DICT |
#endif
    Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION |
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
    __pyx_CyFunctionType_slots
};
static int __pyx_CyFunction_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
    mstate->__pyx_CyFunctionType = __Pyx_FetchCommonTypeFromSpec(
        mstate->__pyx_CommonTypesMetaclassType, module, &__pyx_CyFunctionType_spec, NULL);
    if (unlikely(mstate->__pyx_CyFunctionType == NULL)) {
        return -1;
    }
    return 0;
}
static CYTHON_INLINE PyObject *__Pyx_CyFunction_InitDefaults(PyObject *func, PyTypeObject *defaults_type) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults = PyObject_CallObject((PyObject*)defaults_type, NULL); // _PyObject_New(defaults_type);
    if (unlikely(!m->defaults))
        return NULL;
    return m->defaults;
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_tuple = tuple;
    Py_INCREF(tuple);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->defaults_kwdict = dict;
    Py_INCREF(dict);
}
static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
    m->func_annotations = dict;
    Py_INCREF(dict);
}

/* CythonFunction */
static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml, int flags, PyObject* qualname,
                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
    PyObject *op = __Pyx_CyFunction_Init(
        PyObject_GC_New(__pyx_CyFunctionObject, __pyx_mstate_global->__pyx_CyFunctionType),
        ml, flags, qualname, closure, module, globals, code
    );
    if (likely(op)) {
        PyObject_GC_Track(op);
    }
    return op;
}

/* PyObjectFastCallMethod */
#if !CYTHON_VECTORCALL || PY_VERSION_HEX < 0x03090000
static PyObject *__Pyx_PyObject_FastCallMethod(PyObject *name, PyObject *const *args, size_t nargsf) {
    PyObject *result;
    PyObject *attr = PyObject_GetAttr(args[0], name);
    if (unlikely(!attr))
        return NULL;
    result = __Pyx_PyObject_FastCall(attr, args+1, nargsf - 1);
    Py_DECREF(attr);
    return result;
}
#endif

/* RejectKeywords */
static void __Pyx_RejectKeywords(const char* function_name, PyObject *kwds) {
    PyObject *key = NULL;
    if (CYTHON_METH_FASTCALL && likely(PyTuple_Check(kwds))) {
        key = __Pyx_PySequence_ITEM(kwds, 0);
    } else {
#if CYTHON_AVOID_BORROWED_REFS
        PyObject *pos = NULL;
#else
        Py_ssize_t pos = 0;
#endif
#if !CYTHON_COMPILING_IN_PYPY || defined(PyArg_ValidateKeywordArguments)
        if (unlikely(!PyArg_ValidateKeywordArguments(kwds))) return;
#endif
        __Pyx_PyDict_NextRef(kwds, &pos, &key, NULL);
#if CYTHON_AVOID_BORROWED_REFS
        Py_XDECREF(pos);
#endif
    }
    if (likely(key)) {
        PyErr_Format(PyExc_TypeError,
            "%s() got an unexpected keyword argument '%U'",
            function_name, key);
        Py_DECREF(key);
    }
}

/* ExtTypeTest */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    __Pyx_TypeName obj_type_name;
    __Pyx_TypeName type_name;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    type_name = __Pyx_PyType_GetFullyQualifiedName(type);
    PyErr_Format(PyExc_TypeError,
                 "Cannot convert " __Pyx_FMT_TYPENAME " to " __Pyx_FMT_TYPENAME,
                 obj_type_name, type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
}

/* pybuiltin_invalid (used by pyint_simplify) */
static void __Pyx_PyBuiltin_Invalid(PyObject *obj, const char *type_name, const char *argname) {
    __Pyx_TypeName obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    if (argname) {
        PyErr_Format(PyExc_TypeError,
            "Argument '%.200s' has incorrect type (expected %.200s, got " __Pyx_FMT_TYPENAME ")",
            argname, type_name, obj_type_name
        );
    } else {
        PyErr_Format(PyExc_TypeError,
            "Expected %.200s, got " __Pyx_FMT_TYPENAME,
            type_name, obj_type_name
        );
    }
    __Pyx_DECREF_TypeName(obj_type_name);
}

/* pyint_simplify */
static CYTHON_INLINE int __Pyx_PyInt_FromNumber(PyObject **number_var, const char *argname, int accept_none) {
    PyObject *number = *number_var;
    if (likely((accept_none && number == Py_None) || PyLong_CheckExact(number))) {
        return 0;
    }
    PyObject *int_object;
    if (likely(PyNumber_Check(number))) {
        int_object = PyNumber_Long(number);
        if (unlikely(!int_object)) goto bad;
    } else {
        __Pyx_PyBuiltin_Invalid(number, "int", argname);
        goto bad;
    }
    *number_var = int_object;
    Py_DECREF(number);
    return 0;
bad:
    *number_var = NULL;
    Py_DECREF(number);
    return -1;
}

/* ArgTypeTestFunc (used by ArgTypeTest) */
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    __Pyx_TypeName type_name;
    __Pyx_TypeName obj_type_name;
    PyObject *extra_info = __pyx_mstate_global->__pyx_empty_unicode;
    int from_annotation_subclass = 0;
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (!exact) {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    } else if (exact == 2) {
        if (__Pyx_TypeCheck(obj, type)) {
            from_annotation_subclass = 1;
            extra_info = __pyx_mstate_global->__pyx_kp_u_Note_that_Cython_is_deliberately;
        }
    }
    type_name = __Pyx_PyType_GetFullyQualifiedName(type);
    obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected " __Pyx_FMT_TYPENAME
        ", got " __Pyx_FMT_TYPENAME ")"
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        "%s%U"
#endif
        , name, type_name, obj_type_name
#if __PYX_LIMITED_VERSION_HEX < 0x030C0000
        , (from_annotation_subclass ? ". " : ""), extra_info
#endif
        );
#if __PYX_LIMITED_VERSION_HEX >= 0x030C0000
    if (exact == 2 && from_annotation_subclass) {
        PyObject *res;
        PyObject *vargs[2];
        vargs[0] = PyErr_GetRaisedException();
        vargs[1] = extra_info;
        res = PyObject_VectorcallMethod(__pyx_mstate_global->__pyx_kp_u_add_note, vargs, 2, NULL);
        Py_XDECREF(res);
        PyErr_SetRaisedException(vargs[0]);
    }
#endif
    __Pyx_DECREF_TypeName(type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* RaiseException */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *instance_class = NULL;
        if (value && PyExceptionInstance_Check(value)) {
            instance_class = (PyObject*) Py_TYPE(value);
            if (instance_class != type) {
                int is_subclass = PyObject_IsSubclass(instance_class, type);
                if (!is_subclass) {
                    instance_class = NULL;
                } else if (unlikely(is_subclass == -1)) {
                    goto bad;
                } else {
                    type = instance_class;
                }
            }
        }
        if (!instance_class) {
            PyObject *args;
            if (!value)
                args = PyTuple_New(0);
            else if (PyTuple_Check(value)) {
                Py_INCREF(value);
                args = value;
            } else
                args = PyTuple_Pack(1, value);
            if (!args)
                goto bad;
            owned_instance = PyObject_Call(type, args, NULL);
            Py_DECREF(args);
            if (!owned_instance)
                goto bad;
            value = owned_instance;
            if (!PyExceptionInstance_Check(value)) {
                PyErr_Format(PyExc_TypeError,
                             "calling %R should have returned an instance of "
                             "BaseException, not %R",
                             type, Py_TYPE(value));
                goto bad;
            }
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
    if (cause) {
        PyObject *fixed_cause;
        if (cause == Py_None) {
            fixed_cause = NULL;
        } else if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        } else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        } else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        PyException_SetCause(value, fixed_cause);
    }
    PyErr_SetObject(type, value);
    if (tb) {
#if PY_VERSION_HEX >= 0x030C00A6
        PyException_SetTraceback(value, tb);
#elif CYTHON_FAST_THREAD_STATE
        PyThreadState *tstate = __Pyx_PyThreadState_Current;
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
#else
        PyObject *tmp_type, *tmp_value, *tmp_tb;
        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
        Py_INCREF(tb);
        PyErr_Restore(tmp_type, tmp_value, tb);
        Py_XDECREF(tmp_tb);
#endif
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}

/* RaiseUnboundLocalError */
static void __Pyx_RaiseUnboundLocalError(const char *varname) {
    PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
}

/* GetException (used by pep479) */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
#endif
{
    PyObject *local_type = NULL, *local_value, *local_tb = NULL;
#if CYTHON_FAST_THREAD_STATE
    PyObject *tmp_type, *tmp_value, *tmp_tb;
  #if PY_VERSION_HEX >= 0x030C0000
    local_value = tstate->current_exception;
    tstate->current_exception = 0;
  #else
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
  #endif
#elif __PYX_LIMITED_VERSION_HEX > 0x030C0000
    local_value = PyErr_GetRaisedException();
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
#if __PYX_LIMITED_VERSION_HEX > 0x030C0000
    if (likely(local_value)) {
        local_type = (PyObject*) Py_TYPE(local_value);
        Py_INCREF(local_type);
        local_tb = PyException_GetTraceback(local_value);
    }
#else
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_FAST_THREAD_STATE
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    if (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
#endif // __PYX_LIMITED_VERSION_HEX > 0x030C0000
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_FAST_THREAD_STATE
    #if CYTHON_USE_EXC_INFO_STACK
    {
        _PyErr_StackItem *exc_info = tstate->exc_info;
      #if PY_VERSION_HEX >= 0x030B00a4
        tmp_value = exc_info->exc_value;
        exc_info->exc_value = local_value;
        tmp_type = NULL;
        tmp_tb = NULL;
        Py_XDECREF(local_type);
        Py_XDECREF(local_tb);
      #else
        tmp_type = exc_info->exc_type;
        tmp_value = exc_info->exc_value;
        tmp_tb = exc_info->exc_traceback;
        exc_info->exc_type = local_type;
        exc_info->exc_value = local_value;
        exc_info->exc_traceback = local_tb;
      #endif
    }
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#elif __PYX_LIMITED_VERSION_HEX >= 0x030b0000
    PyErr_SetHandledException(local_value);
    Py_XDECREF(local_value);
    Py_XDECREF(local_type);
    Py_XDECREF(local_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
#if __PYX_LIMITED_VERSION_HEX <= 0x030C0000
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
#endif
}

/* pep479 */
static void __Pyx_Generator_Replace_StopIteration(int in_async_gen) {
    PyObject *exc, *val, *tb, *cur_exc, *new_exc;
    __Pyx_PyThreadState_declare
    int is_async_stopiteration = 0;
    CYTHON_MAYBE_UNUSED_VAR(in_async_gen);
    __Pyx_PyThreadState_assign
    cur_exc = __Pyx_PyErr_CurrentExceptionType();
    if (likely(!__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopIteration))) {
        if (in_async_gen && unlikely(__Pyx_PyErr_GivenExceptionMatches(cur_exc, PyExc_StopAsyncIteration))) {
            is_async_stopiteration = 1;
        } else {
            return;
        }
    }
    __Pyx_GetException(&exc, &val, &tb);
    Py_XDECREF(exc);
    Py_XDECREF(tb);
    new_exc = PyObject_CallFunction(PyExc_RuntimeError, "s",
        is_async_stopiteration ? "async generator raised StopAsyncIteration" :
        in_async_gen ? "async generator raised StopIteration" :
        "generator raised StopIteration");
    if (!new_exc) {
        Py_XDECREF(val);
        return;
    }
    PyException_SetCause(new_exc, val); // steals ref to val
    PyErr_SetObject(PyExc_RuntimeError, new_exc);
}

/* IterFinish (used by dict_iter) */
static CYTHON_INLINE int __Pyx_IterFinish(void) {
    PyObject* exc_type;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    exc_type = __Pyx_PyErr_CurrentExceptionType();
    if (unlikely(exc_type)) {
        if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))
            return -1;
        __Pyx_PyErr_Clear();
        return 0;
    }
    return 0;
}

/* PyObjectCallNoArg (used by PyObjectCallMethod0) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
    PyObject *arg[2] = {NULL, NULL};
    return __Pyx_PyObject_FastCall(func, arg + 1, 0 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* PyObjectGetMethod (used by PyObjectCallMethod0) */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    __Pyx_TypeName type_name;
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if defined(Py_TPFLAGS_METHOD_DESCRIPTOR) && Py_TPFLAGS_METHOD_DESCRIPTOR
        if (__Pyx_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR))
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || __Pyx_IS_TYPE(descr, &PyMethodDescr_Type)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (likely(descr != NULL)) {
        *method = descr;
        return 0;
    }
    type_name = __Pyx_PyType_GetFullyQualifiedName(tp);
    PyErr_Format(PyExc_AttributeError,
                 "'" __Pyx_FMT_TYPENAME "' object has no attribute '%U'",
                 type_name, name);
    __Pyx_DECREF_TypeName(type_name);
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}
#endif

/* PyObjectCallMethod0 (used by dict_iter) */
static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
#if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
    PyObject *args[1] = {obj};
    (void) __Pyx_PyObject_CallOneArg;
    (void) __Pyx_PyObject_CallNoArg;
    return PyObject_VectorcallMethod(method_name, args, 1 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#else
    PyObject *method = NULL, *result = NULL;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_CallOneArg(method, obj);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) goto bad;
    result = __Pyx_PyObject_CallNoArg(method);
    Py_DECREF(method);
bad:
    return result;
#endif
}

/* RaiseNeedMoreValuesToUnpack (used by UnpackTuple2) */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    PyErr_Format(PyExc_ValueError,
                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
                 index, (index == 1) ? "" : "s");
}

/* RaiseTooManyValuesToUnpack (used by UnpackItemEndCheck) */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    PyErr_Format(PyExc_ValueError,
                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
}

/* UnpackItemEndCheck (used by UnpackTuple2) */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    }
    return __Pyx_IterFinish();
}

/* RaiseNoneIterError (used by UnpackTupleError) */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
}

/* UnpackTupleError (used by UnpackTuple2) */
static void __Pyx_UnpackTupleError(PyObject *t, Py_ssize_t index) {
    if (t == Py_None) {
      __Pyx_RaiseNoneNotIterableError();
    } else {
      Py_ssize_t size = __Pyx_PyTuple_GET_SIZE(t);
 #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely(size < 0)) return;
 #endif
      if (size < index) {
        __Pyx_RaiseNeedMoreValuesError(size);
      } else {
        __Pyx_RaiseTooManyValuesError(index);
      }
    }
}

/* UnpackTuple2 (used by dict_iter) */
static CYTHON_INLINE int __Pyx_unpack_tuple2(
        PyObject* tuple, PyObject** value1, PyObject** value2, int is_tuple, int has_known_size, int decref_tuple) {
    if (likely(is_tuple || PyTuple_Check(tuple))) {
        Py_ssize_t size;
        if (has_known_size) {
            return __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple);
        }
        size = __Pyx_PyTuple_GET_SIZE(tuple);
        if (likely(size == 2)) {
            return __Pyx_unpack_tuple2_exact(tuple, value1, value2, decref_tuple);
        }
        if (size >= 0) {
            __Pyx_UnpackTupleError(tuple, 2);
        }
        return -1;
    } else {
        return __Pyx_unpack_tuple2_generic(tuple, value1, value2, has_known_size, decref_tuple);
    }
}
static CYTHON_INLINE int __Pyx_unpack_tuple2_exact(
        PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2, int decref_tuple) {
    PyObject *value1 = NULL, *value2 = NULL;
#if CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
    value1 = __Pyx_PySequence_ITEM(tuple, 0);  if (unlikely(!value1)) goto bad;
    value2 = __Pyx_PySequence_ITEM(tuple, 1);  if (unlikely(!value2)) goto bad;
#else
    value1 = PyTuple_GET_ITEM(tuple, 0);  Py_INCREF(value1);
    value2 = PyTuple_GET_ITEM(tuple, 1);  Py_INCREF(value2);
#endif
    if (decref_tuple) {
        Py_DECREF(tuple);
    }
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
#if CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
bad:
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
#endif
}
static int __Pyx_unpack_tuple2_generic(PyObject* tuple, PyObject** pvalue1, PyObject** pvalue2,
                                       int has_known_size, int decref_tuple) {
    Py_ssize_t index;
    PyObject *value1 = NULL, *value2 = NULL, *iter = NULL;
    iternextfunc iternext;
    iter = PyObject_GetIter(tuple);
    if (unlikely(!iter)) goto bad;
    if (decref_tuple) { Py_DECREF(tuple); tuple = NULL; }
    iternext = __Pyx_PyObject_GetIterNextFunc(iter);
    value1 = iternext(iter); if (unlikely(!value1)) { index = 0; goto unpacking_failed; }
    value2 = iternext(iter); if (unlikely(!value2)) { index = 1; goto unpacking_failed; }
    if (!has_known_size && unlikely(__Pyx_IternextUnpackEndCheck(iternext(iter), 2))) goto bad;
    Py_DECREF(iter);
    *pvalue1 = value1;
    *pvalue2 = value2;
    return 0;
unpacking_failed:
    if (!has_known_size && __Pyx_IterFinish() == 0)
        __Pyx_RaiseNeedMoreValuesError(index);
bad:
    Py_XDECREF(iter);
    Py_XDECREF(value1);
    Py_XDECREF(value2);
    if (decref_tuple) { Py_XDECREF(tuple); }
    return -1;
}

/* dict_iter */
#if CYTHON_COMPILING_IN_PYPY
#include <string.h>
#endif
static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* iterable, int is_dict, PyObject* method_name,
                                                   Py_ssize_t* p_orig_length, int* p_source_is_dict) {
    is_dict = is_dict || likely(PyDict_CheckExact(iterable));
    *p_source_is_dict = is_dict;
    if (is_dict) {
#if !CYTHON_COMPILING_IN_PYPY
        *p_orig_length = PyDict_Size(iterable);
        Py_INCREF(iterable);
        return iterable;
#else
        static PyObject *py_items = NULL, *py_keys = NULL, *py_values = NULL;
        PyObject **pp = NULL;
        if (method_name) {
            const char *name = PyUnicode_AsUTF8(method_name);
            if (strcmp(name, "iteritems") == 0) pp = &py_items;
            else if (strcmp(name, "iterkeys") == 0) pp = &py_keys;
            else if (strcmp(name, "itervalues") == 0) pp = &py_values;
            if (pp) {
                if (!*pp) {
                    *pp = PyUnicode_FromString(name + 4);
                    if (!*pp)
                        return NULL;
                }
                method_name = *pp;
            }
        }
#endif
    }
    *p_orig_length = 0;
    if (method_name) {
        PyObject* iter;
        iterable = __Pyx_PyObject_CallMethod0(iterable, method_name);
        if (!iterable)
            return NULL;
#if !CYTHON_COMPILING_IN_PYPY
        if (PyTuple_CheckExact(iterable) || PyList_CheckExact(iterable))
            return iterable;
#endif
        iter = PyObject_GetIter(iterable);
        Py_DECREF(iterable);
        return iter;
    }
    return PyObject_GetIter(iterable);
}
#if !CYTHON_AVOID_BORROWED_REFS
static CYTHON_INLINE int __Pyx_dict_iter_next_source_is_dict(
        PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
        PyObject** pkey, PyObject** pvalue, PyObject** pitem) {
    PyObject *key, *value;
    if (unlikely(orig_length != PyDict_Size(iter_obj))) {
        PyErr_SetString(PyExc_RuntimeError, "dictionary changed size during iteration");
        return -1;
    }
    if (unlikely(!PyDict_Next(iter_obj, ppos, &key, &value))) {
        return 0;
    }
    if (pitem) {
        PyObject* tuple = PyTuple_New(2);
        if (unlikely(!tuple)) {
            return -1;
        }
        Py_INCREF(key);
        Py_INCREF(value);
        #if CYTHON_ASSUME_SAFE_MACROS
        PyTuple_SET_ITEM(tuple, 0, key);
        PyTuple_SET_ITEM(tuple, 1, value);
        #else
        if (unlikely(PyTuple_SetItem(tuple, 0, key) < 0)) {
            Py_DECREF(value);
            Py_DECREF(tuple);
            return -1;
        }
        if (unlikely(PyTuple_SetItem(tuple, 1, value) < 0)) {
            Py_DECREF(tuple);
            return -1;
        }
        #endif
        *pitem = tuple;
    } else {
        if (pkey) {
            Py_INCREF(key);
            *pkey = key;
        }
        if (pvalue) {
            Py_INCREF(value);
            *pvalue = value;
        }
    }
    return 1;
}
#endif
static CYTHON_INLINE int __Pyx_dict_iter_next(
        PyObject* iter_obj, CYTHON_NCP_UNUSED Py_ssize_t orig_length, CYTHON_NCP_UNUSED Py_ssize_t* ppos,
        PyObject** pkey, PyObject** pvalue, PyObject** pitem, int source_is_dict) {
    PyObject* next_item;
#if !CYTHON_AVOID_BORROWED_REFS
    if (source_is_dict) {
        int result;
#if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_BEGIN_CRITICAL_SECTION(iter_obj);
#endif
        result = __Pyx_dict_iter_next_source_is_dict(iter_obj, orig_length, ppos, pkey, pvalue, pitem);
#if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_END_CRITICAL_SECTION();
#endif
        return result;
    } else if (PyTuple_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        Py_ssize_t tuple_size = __Pyx_PyTuple_GET_SIZE(iter_obj);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(tuple_size < 0)) return -1;
        #endif
        if (unlikely(pos >= tuple_size)) return 0;
        *ppos = pos + 1;
        #if CYTHON_ASSUME_SAFE_MACROS
        next_item = PyTuple_GET_ITEM(iter_obj, pos);
        #else
        next_item = PyTuple_GetItem(iter_obj, pos);
        if (unlikely(!next_item)) return -1;
        #endif
        Py_INCREF(next_item);
    } else if (PyList_CheckExact(iter_obj)) {
        Py_ssize_t pos = *ppos;
        Py_ssize_t list_size = __Pyx_PyList_GET_SIZE(iter_obj);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(list_size < 0)) return -1;
        #endif
        if (unlikely(pos >= list_size)) return 0;
        *ppos = pos + 1;
        next_item = __Pyx_PyList_GetItemRef(iter_obj, pos);
        if (unlikely(!next_item)) return -1;
    } else
#endif
    {
        next_item = PyIter_Next(iter_obj);
        if (unlikely(!next_item)) {
            return __Pyx_IterFinish();
        }
    }
    if (pitem) {
        *pitem = next_item;
    } else if (pkey && pvalue) {
        if (__Pyx_unpack_tuple2(next_item, pkey, pvalue, source_is_dict, source_is_dict, 1))
            return -1;
    } else if (pkey) {
        *pkey = next_item;
    } else {
        *pvalue = next_item;
    }
    return 1;
}

/* PyUnicode_Unicode */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Unicode(PyObject *obj) {
    if (unlikely(obj == Py_None))
        obj = __pyx_mstate_global->__pyx_kp_u_None;
    return __Pyx_NewRef(obj);
}

/* RaiseUnexpectedTypeError */
static int
__Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj)
{
    __Pyx_TypeName obj_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(obj));
    PyErr_Format(PyExc_TypeError, "Expected %s, got " __Pyx_FMT_TYPENAME,
                 expected, obj_type_name);
    __Pyx_DECREF_TypeName(obj_type_name);
    return 0;
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (unlikely(!j)) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_SIZE
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyList_GET_SIZE(o);
    }
    if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS)) {
        return __Pyx_PyList_GetItemRefFast(o, wrapped_i, unsafe_shared);
    } else
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
        return __Pyx_NewRef(PyList_GET_ITEM(o, wrapped_i));
    }
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
#else
    (void)wraparound;
    (void)boundscheck;
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyTuple_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
        return __Pyx_NewRef(PyTuple_GET_ITEM(o, wrapped_i));
    }
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
#else
    (void)wraparound;
    (void)boundscheck;
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                     int wraparound, int boundscheck, int unsafe_shared) {
    CYTHON_MAYBE_UNUSED_VAR(unsafe_shared);
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((CYTHON_AVOID_BORROWED_REFS || CYTHON_AVOID_THREAD_UNSAFE_BORROWED_REFS)) {
            return __Pyx_PyList_GetItemRefFast(o, n, unsafe_shared);
        } else if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
            return __Pyx_NewRef(PyList_GET_ITEM(o, n));
        }
    } else
    #if !CYTHON_AVOID_BORROWED_REFS
    if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
            return __Pyx_NewRef(PyTuple_GET_ITEM(o, n));
        }
    } else
    #endif
#endif
#if CYTHON_USE_TYPE_SLOTS && !CYTHON_COMPILING_IN_PYPY
    {
        PyMappingMethods *mm = Py_TYPE(o)->tp_as_mapping;
        PySequenceMethods *sm = Py_TYPE(o)->tp_as_sequence;
        if (!is_list && mm && mm->mp_subscript) {
            PyObject *r, *key = PyLong_FromSsize_t(i);
            if (unlikely(!key)) return NULL;
            r = mm->mp_subscript(o, key);
            Py_DECREF(key);
            return r;
        }
        if (is_list || likely(sm && sm->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(sm->sq_length)) {
                Py_ssize_t l = sm->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return sm->sq_item(o, i);
        }
    }
#else
    if (is_list || !PyMapping_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    (void)wraparound;
    (void)boundscheck;
    return __Pyx_GetItemInt_Generic(o, PyLong_FromSsize_t(i));
}

/* SwapException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_value = exc_info->exc_value;
    exc_info->exc_value = *value;
    if (tmp_value == NULL || tmp_value == Py_None) {
        Py_XDECREF(tmp_value);
        tmp_value = NULL;
        tmp_type = NULL;
        tmp_tb = NULL;
    } else {
        tmp_type = (PyObject*) Py_TYPE(tmp_value);
        Py_INCREF(tmp_type);
        #if CYTHON_COMPILING_IN_CPYTHON
        tmp_tb = ((PyBaseExceptionObject*) tmp_value)->traceback;
        Py_XINCREF(tmp_tb);
        #else
        tmp_tb = PyException_GetTraceback(tmp_value);
        #endif
    }
  #elif CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = *type;
    exc_info->exc_value = *value;
    exc_info->exc_traceback = *tb;
  #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = *type;
    tstate->exc_value = *value;
    tstate->exc_traceback = *tb;
  #endif
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
    PyErr_SetExcInfo(*type, *value, *tb);
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#endif

/* GetTopmostException (used by SaveResetException) */
#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_value == NULL || exc_info->exc_value == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    PyObject *exc_value = exc_info->exc_value;
    if (exc_value == NULL || exc_value == Py_None) {
        *value = NULL;
        *type = NULL;
        *tb = NULL;
    } else {
        *value = exc_value;
        Py_INCREF(*value);
        *type = (PyObject*) Py_TYPE(exc_value);
        Py_INCREF(*type);
        *tb = PyException_GetTraceback(exc_value);
    }
  #elif CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    *type = exc_info->exc_type;
    *value = exc_info->exc_value;
    *tb = exc_info->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
  #endif
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
  #if CYTHON_USE_EXC_INFO_STACK && PY_VERSION_HEX >= 0x030B00a4
    _PyErr_StackItem *exc_info = tstate->exc_info;
    PyObject *tmp_value = exc_info->exc_value;
    exc_info->exc_value = value;
    Py_XDECREF(tmp_value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
  #else
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = type;
    exc_info->exc_value = value;
    exc_info->exc_traceback = tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
  #endif
}
#endif

/* PyObjectVectorCallKwBuilder */
#if CYTHON_VECTORCALL
static int __Pyx_VectorcallBuilder_AddArg(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    (void)__Pyx_PyObject_FastCallDict;
    if (__Pyx_PyTuple_SET_ITEM(builder, n, key) != (0)) return -1;
    Py_INCREF(key);
    args[n] = value;
    return 0;
}
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    (void)__Pyx_VectorcallBuilder_AddArgStr;
    if (unlikely(!PyUnicode_Check(key))) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        return -1;
    }
    return __Pyx_VectorcallBuilder_AddArg(key, value, builder, args, n);
}
static int __Pyx_VectorcallBuilder_AddArgStr(const char *key, PyObject *value, PyObject *builder, PyObject **args, int n) {
    PyObject *pyKey = PyUnicode_FromString(key);
    if (!pyKey) return -1;
    return __Pyx_VectorcallBuilder_AddArg(pyKey, value, builder, args, n);
}
#else // CYTHON_VECTORCALL
CYTHON_UNUSED static int __Pyx_VectorcallBuilder_AddArg_Check(PyObject *key, PyObject *value, PyObject *builder, CYTHON_UNUSED PyObject **args, CYTHON_UNUSED int n) {
    if (unlikely(!PyUnicode_Check(key))) {
        PyErr_SetString(PyExc_TypeError, "keywords must be strings");
        return -1;
    }
    return PyDict_SetItem(builder, key, value);
}
#endif

/* PyLongBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_Fallback___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, int inplace) {
    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
}
#if CYTHON_USE_PYLONG_INTERNALS
static PyObject* __Pyx_Unpacked___Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(inplace);
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    long a;
    const PY_LONG_LONG llb = intval;
    PY_LONG_LONG lla;
    if (unlikely(__Pyx_PyLong_IsZero(op1))) {
        return __Pyx_NewRef(op2);
    }
    const int is_positive = __Pyx_PyLong_IsPos(op1);
    const digit* digits = __Pyx_PyLong_Digits(op1);
    const Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
    if (likely(size == 1)) {
        a = (long) digits[0];
        if (!is_positive) a *= -1;
    } else {
        switch (size) {
            case 2:
                if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                    a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                    lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            case 3:
                if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                    a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                    lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            case 4:
                if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                    a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                    lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
        }
        return PyLong_Type.tp_as_number->nb_add(op1, op2);
    }
    calculate_long:
        {
            long x;
            x = a + b;
            return PyLong_FromLong(x);
        }
    calculate_long_long:
        {
            PY_LONG_LONG llx;
            llx = lla + llb;
            return PyLong_FromLongLong(llx);
        }
    
}
#endif
static PyObject* __Pyx_Float___Pyx_PyLong_AddObjC(PyObject *float_val, long intval, int zerodivision_check) {
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    double a = __Pyx_PyFloat_AS_DOUBLE(float_val);
        double result;
        
        result = ((double)a) + (double)b;
        return PyFloat_FromDouble(result);
}
static CYTHON_INLINE PyObject* __Pyx_PyLong_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_UNUSED_VAR(zerodivision_check);
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        return __Pyx_Unpacked___Pyx_PyLong_AddObjC(op1, op2, intval, inplace, zerodivision_check);
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        return __Pyx_Float___Pyx_PyLong_AddObjC(op1, intval, zerodivision_check);
    }
    return __Pyx_Fallback___Pyx_PyLong_AddObjC(op1, op2, inplace);
}
#endif

/* PyLongBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_Fallback___Pyx_PyLong_MultiplyObjC(PyObject *op1, PyObject *op2, int inplace) {
    return (inplace ? PyNumber_InPlaceMultiply : PyNumber_Multiply)(op1, op2);
}
#if CYTHON_USE_PYLONG_INTERNALS
static PyObject* __Pyx_Unpacked___Pyx_PyLong_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(inplace);
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    long a;
    const PY_LONG_LONG llb = intval;
    PY_LONG_LONG lla;
    if (unlikely(__Pyx_PyLong_IsZero(op1))) {
        return __Pyx_NewRef(op1);
    }
    const int is_positive = __Pyx_PyLong_IsPos(op1);
    const digit* digits = __Pyx_PyLong_Digits(op1);
    const Py_ssize_t size = __Pyx_PyLong_DigitCount(op1);
    if (likely(size == 1)) {
        a = (long) digits[0];
        if (!is_positive) a *= -1;
    } else {
        switch (size) {
            case 2:
                if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT+30) {
                    a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT+30) {
                    lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            case 3:
                if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT+30) {
                    a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT+30) {
                    lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
            case 4:
                if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT+30) {
                    a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if (!is_positive) a *= -1;
                    goto calculate_long;
                } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT+30) {
                    lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                    if (!is_positive) lla *= -1;
                    goto calculate_long_long;
                }
                break;
        }
        return PyLong_Type.tp_as_number->nb_multiply(op1, op2);
    }
    calculate_long:
        CYTHON_UNUSED_VAR(a);
        CYTHON_UNUSED_VAR(b);
        lla = a;
        goto calculate_long_long;
    calculate_long_long:
        {
            PY_LONG_LONG llx;
            llx = lla * llb;
            return PyLong_FromLongLong(llx);
        }
    
}
#endif
static PyObject* __Pyx_Float___Pyx_PyLong_MultiplyObjC(PyObject *float_val, long intval, int zerodivision_check) {
    CYTHON_UNUSED_VAR(zerodivision_check);
    const long b = intval;
    double a = __Pyx_PyFloat_AS_DOUBLE(float_val);
        double result;
        
        result = ((double)a) * (double)b;
        return PyFloat_FromDouble(result);
}
static CYTHON_INLINE PyObject* __Pyx_PyLong_MultiplyObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check) {
    CYTHON_MAYBE_UNUSED_VAR(intval);
    CYTHON_UNUSED_VAR(zerodivision_check);
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        return __Pyx_Unpacked___Pyx_PyLong_MultiplyObjC(op1, op2, intval, inplace, zerodivision_check);
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        return __Pyx_Float___Pyx_PyLong_MultiplyObjC(op1, intval, zerodivision_check);
    }
    return __Pyx_Fallback___Pyx_PyLong_MultiplyObjC(op1, op2, inplace);
}
#endif

/* CIntToDigits (used by CIntToPyUnicode) */
static const char DIGIT_PAIRS_10[2*10*10+1] = {
    "00010203040506070809"
    "10111213141516171819"
    "20212223242526272829"
    "30313233343536373839"
    "40414243444546474849"
    "50515253545556575859"
    "60616263646566676869"
    "70717273747576777879"
    "80818283848586878889"
    "90919293949596979899"
};
static const char DIGIT_PAIRS_8[2*8*8+1] = {
    "0001020304050607"
    "1011121314151617"
    "2021222324252627"
    "3031323334353637"
    "4041424344454647"
    "5051525354555657"
    "6061626364656667"
    "7071727374757677"
};
static const char DIGITS_HEX[2*16+1] = {
    "0123456789abcdef"
    "0123456789ABCDEF"
};

/* BuildPyUnicode (used by COrdinalToPyUnicode) */
static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, const char* chars, int clength,
                                                int prepend_sign, char padding_char) {
    PyObject *uval;
    Py_ssize_t uoffset = ulength - clength;
#if CYTHON_USE_UNICODE_INTERNALS
    Py_ssize_t i;
    void *udata;
    uval = PyUnicode_New(ulength, 127);
    if (unlikely(!uval)) return NULL;
    udata = PyUnicode_DATA(uval);
    if (uoffset > 0) {
        i = 0;
        if (prepend_sign) {
            __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, 0, '-');
            i++;
        }
        for (; i < uoffset; i++) {
            __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, i, padding_char);
        }
    }
    for (i=0; i < clength; i++) {
        __Pyx_PyUnicode_WRITE(PyUnicode_1BYTE_KIND, udata, uoffset+i, chars[i]);
    }
#else
    {
        PyObject *sign = NULL, *padding = NULL;
        uval = NULL;
        if (uoffset > 0) {
            prepend_sign = !!prepend_sign;
            if (uoffset > prepend_sign) {
                padding = PyUnicode_FromOrdinal(padding_char);
                if (likely(padding) && uoffset > prepend_sign + 1) {
                    PyObject *tmp = PySequence_Repeat(padding, uoffset - prepend_sign);
                    Py_DECREF(padding);
                    padding = tmp;
                }
                if (unlikely(!padding)) goto done_or_error;
            }
            if (prepend_sign) {
                sign = PyUnicode_FromOrdinal('-');
                if (unlikely(!sign)) goto done_or_error;
            }
        }
        uval = PyUnicode_DecodeASCII(chars, clength, NULL);
        if (likely(uval) && padding) {
            PyObject *tmp = PyUnicode_Concat(padding, uval);
            Py_DECREF(uval);
            uval = tmp;
        }
        if (likely(uval) && sign) {
            PyObject *tmp = PyUnicode_Concat(sign, uval);
            Py_DECREF(uval);
            uval = tmp;
        }
done_or_error:
        Py_XDECREF(padding);
        Py_XDECREF(sign);
    }
#endif
    return uval;
}

/* COrdinalToPyUnicode (used by CIntToPyUnicode) */
static CYTHON_INLINE int __Pyx_CheckUnicodeValue(int value) {
    return value <= 1114111;
}
static PyObject* __Pyx_PyUnicode_FromOrdinal_Padded(int value, Py_ssize_t ulength, char padding_char) {
    Py_ssize_t padding_length = ulength - 1;
    if (likely((padding_length <= 250) && (value < 0xD800 || value > 0xDFFF))) {
        char chars[256];
        if (value <= 255) {
            memset(chars, padding_char, (size_t) padding_length);
            chars[ulength-1] = (char) value;
            return PyUnicode_DecodeLatin1(chars, ulength, NULL);
        }
        char *cpos = chars + sizeof(chars);
        if (value < 0x800) {
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0xc0 | (value & 0x1f));
        } else if (value < 0x10000) {
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0xe0 | (value & 0x0f));
        } else {
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0x80 | (value & 0x3f));
            value >>= 6;
            *--cpos = (char) (0xf0 | (value & 0x07));
        }
        cpos -= padding_length;
        memset(cpos, padding_char, (size_t) padding_length);
        return PyUnicode_DecodeUTF8(cpos, chars + sizeof(chars) - cpos, NULL);
    }
    if (value <= 127 && CYTHON_USE_UNICODE_INTERNALS) {
        const char chars[1] = {(char) value};
        return __Pyx_PyUnicode_BuildFromAscii(ulength, chars, 1, 0, padding_char);
    }
    {
        PyObject *uchar, *padding_uchar, *padding, *result;
        padding_uchar = PyUnicode_FromOrdinal(padding_char);
        if (unlikely(!padding_uchar)) return NULL;
        padding = PySequence_Repeat(padding_uchar, padding_length);
        Py_DECREF(padding_uchar);
        if (unlikely(!padding)) return NULL;
        uchar = PyUnicode_FromOrdinal(value);
        if (unlikely(!uchar)) {
            Py_DECREF(padding);
            return NULL;
        }
        result = PyUnicode_Concat(padding, uchar);
        Py_DECREF(padding);
        Py_DECREF(uchar);
        return result;
    }
}

/* CIntToPyUnicode */
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!(is_unsigned || value == 0 || value > 0) ||
                    !(sizeof(value) <= 2 || value & ~ (Py_ssize_t) 0x01fffff || __Pyx_CheckUnicodeValue((int) value)))) {
        PyErr_SetString(PyExc_OverflowError, "%c arg not in range(0x110000)");
        return NULL;
    }
    if (width <= 1) {
        return PyUnicode_FromOrdinal((int) value);
    }
    return __Pyx_PyUnicode_FromOrdinal_Padded((int) value, width, padding_char);
}
static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(Py_ssize_t)*3+2];
    char *dpos, *end = digits + sizeof(Py_ssize_t)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    Py_ssize_t remaining;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const Py_ssize_t neg_one = (Py_ssize_t) -1, const_zero = (Py_ssize_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (format_char == 'X') {
        hex_digits += 16;
        format_char = 'x';
    }
    remaining = value;
    last_one_off = 0;
    dpos = end;
    do {
        int digit_pos;
        switch (format_char) {
        case 'o':
            digit_pos = abs((int)(remaining % (8*8)));
            remaining = (Py_ssize_t) (remaining / (8*8));
            dpos -= 2;
            memcpy(dpos, DIGIT_PAIRS_8 + digit_pos * 2, 2);
            last_one_off = (digit_pos < 8);
            break;
        case 'd':
            digit_pos = abs((int)(remaining % (10*10)));
            remaining = (Py_ssize_t) (remaining / (10*10));
            dpos -= 2;
            memcpy(dpos, DIGIT_PAIRS_10 + digit_pos * 2, 2);
            last_one_off = (digit_pos < 10);
            break;
        case 'x':
            *(--dpos) = hex_digits[abs((int)(remaining % 16))];
            remaining = (Py_ssize_t) (remaining / 16);
            break;
        default:
            assert(0);
            break;
        }
    } while (unlikely(remaining != 0));
    assert(!last_one_off || *dpos == '0');
    dpos += last_one_off;
    length = end - dpos;
    ulength = length;
    prepend_sign = 0;
    if (!is_unsigned && value <= neg_one) {
        if (padding_char == ' ' || width <= length + 1) {
            *(--dpos) = '-';
            ++length;
        } else {
            prepend_sign = 1;
        }
        ++ulength;
    }
    if (width > ulength) {
        ulength = width;
    }
    if (ulength == 1) {
        return PyUnicode_FromOrdinal(*dpos);
    }
    return __Pyx_PyUnicode_BuildFromAscii(ulength, dpos, (int) length, prepend_sign, padding_char);
}

/* PyObjectCall2Args (used by PyObjectCallMethod1) */
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args[3] = {NULL, arg1, arg2};
    return __Pyx_PyObject_FastCall(function, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
}

/* PyObjectCallMethod1 (used by StringJoin) */
#if !(CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000)))
static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
#endif
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
#if CYTHON_VECTORCALL && (__PYX_LIMITED_VERSION_HEX >= 0x030C0000 || (!CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x03090000))
    PyObject *args[2] = {obj, arg};
    (void) __Pyx_PyObject_CallOneArg;
    (void) __Pyx_PyObject_Call2Args;
    return PyObject_VectorcallMethod(method_name, args, 2 | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
#else
    PyObject *method = NULL, *result;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_Call2Args(method, obj, arg);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) return NULL;
    return __Pyx__PyObject_CallMethod1(method, arg);
#endif
}

/* StringJoin */
static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* values) {
    (void) __Pyx_PyObject_CallMethod1;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030e0000 || defined(PyBytes_Join)
    return PyBytes_Join(sep, values);
#elif CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000 || defined(_PyBytes_Join)
    return _PyBytes_Join(sep, values);
#else
    return __Pyx_PyObject_CallMethod1(sep, __pyx_mstate_global->__pyx_n_u_join, values);
#endif
}

/* pyfloat_simplify */
static CYTHON_INLINE int __Pyx_PyFloat_FromNumber(PyObject **number_var, const char *argname, int accept_none) {
    PyObject *number = *number_var;
    if (likely((accept_none && number == Py_None) || PyFloat_CheckExact(number))) {
        return 0;
    }
    PyObject *float_object;
    if (likely(PyLong_CheckExact(number))) {
        double val;
#if CYTHON_USE_PYLONG_INTERNALS
        if (likely(__Pyx_PyLong_IsCompact(number))) {
            val = (double) __Pyx_PyLong_CompactValue(number);
        } else
#endif
        {
            val = PyLong_AsDouble(number);
            if (unlikely(val == -1.0 && PyErr_Occurred())) goto bad;
        }
        float_object = PyFloat_FromDouble(val);
    }
    else if (PyNumber_Check(number)) {
        float_object = PyNumber_Float(number);
    } else {
        __Pyx_PyBuiltin_Invalid(number, "float", argname);
        goto bad;
    }
    if (unlikely(!float_object)) goto bad;
    *number_var = float_object;
    Py_DECREF(number);
    return 0;
bad:
    *number_var = NULL;
    Py_DECREF(number);
    return -1;
}

/* SliceTupleAndList */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE void __Pyx_crop_slice(Py_ssize_t* _start, Py_ssize_t* _stop, Py_ssize_t* _length) {
    Py_ssize_t start = *_start, stop = *_stop, length = *_length;
    if (start < 0) {
        start += length;
        if (start < 0)
            start = 0;
    }
    if (stop < 0)
        stop += length;
    else if (stop > length)
        stop = length;
    *_length = stop - start;
    *_start = start;
    *_stop = stop;
}
static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length = PyTuple_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    return __Pyx_PyTuple_FromArray(((PyTupleObject*)src)->ob_item + start, length);
}
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice_locked(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length = PyList_GET_SIZE(src);
    __Pyx_crop_slice(&start, &stop, &length);
    if (length <= 0) {
        return PyList_New(0);
    }
    return __Pyx_PyList_FromArray(((PyListObject*)src)->ob_item + start, length);
}
static CYTHON_INLINE PyObject* __Pyx_PyList_GetSlice(
            PyObject* src, Py_ssize_t start, Py_ssize_t stop) {
    PyObject *result;
    __Pyx_BEGIN_CRITICAL_SECTION(src);
    result = __Pyx_PyList_GetSlice_locked(src, start, stop);
    __Pyx_END_CRITICAL_SECTION();
    return result;
}
#endif // CYTHON_COMPILING_IN_CPYTHON

/* AllocateExtensionType */
static PyObject *__Pyx_AllocateExtensionType(PyTypeObject *t, int is_final) {
    if (is_final || likely(!__Pyx_PyType_HasFeature(t, Py_TPFLAGS_IS_ABSTRACT))) {
        allocfunc alloc_func = __Pyx_PyType_GetSlot(t, tp_alloc, allocfunc);
        return alloc_func(t, 0);
    } else {
        newfunc tp_new = __Pyx_PyType_TryGetSlot(&PyBaseObject_Type, tp_new, newfunc);
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
        if (!tp_new) {
            PyObject *new_str = PyUnicode_FromString("__new__");
            if (likely(new_str)) {
                PyObject *o = PyObject_CallMethodObjArgs((PyObject *)&PyBaseObject_Type, new_str, t, NULL);
                Py_DECREF(new_str);
                return o;
            } else
                return NULL;
        } else
    #endif
        return tp_new(t, __pyx_mstate_global->__pyx_empty_tuple, 0);
    }
}

/* ValidateBasesTuple (used by PyType_Ready) */
#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases) {
    Py_ssize_t i, n;
#if CYTHON_ASSUME_SAFE_SIZE
    n = PyTuple_GET_SIZE(bases);
#else
    n = PyTuple_Size(bases);
    if (unlikely(n < 0)) return -1;
#endif
    for (i = 1; i < n; i++)
    {
        PyTypeObject *b;
#if CYTHON_AVOID_BORROWED_REFS
        PyObject *b0 = PySequence_GetItem(bases, i);
        if (!b0) return -1;
#elif CYTHON_ASSUME_SAFE_MACROS
        PyObject *b0 = PyTuple_GET_ITEM(bases, i);
#else
        PyObject *b0 = PyTuple_GetItem(bases, i);
        if (!b0) return -1;
#endif
        b = (PyTypeObject*) b0;
        if (!__Pyx_PyType_HasFeature(b, Py_TPFLAGS_HEAPTYPE))
        {
            __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
            PyErr_Format(PyExc_TypeError,
                "base class '" __Pyx_FMT_TYPENAME "' is not a heap type", b_name);
            __Pyx_DECREF_TypeName(b_name);
#if CYTHON_AVOID_BORROWED_REFS
            Py_DECREF(b0);
#endif
            return -1;
        }
        if (dictoffset == 0)
        {
            Py_ssize_t b_dictoffset = 0;
#if CYTHON_USE_TYPE_SLOTS
            b_dictoffset = b->tp_dictoffset;
#else
            PyObject *py_b_dictoffset = PyObject_GetAttrString((PyObject*)b, "__dictoffset__");
            if (!py_b_dictoffset) goto dictoffset_return;
            b_dictoffset = PyLong_AsSsize_t(py_b_dictoffset);
            Py_DECREF(py_b_dictoffset);
            if (b_dictoffset == -1 && PyErr_Occurred()) goto dictoffset_return;
#endif
            if (b_dictoffset) {
                {
                    __Pyx_TypeName b_name = __Pyx_PyType_GetFullyQualifiedName(b);
                    PyErr_Format(PyExc_TypeError,
                        "extension type '%.200s' has no __dict__ slot, "
                        "but base type '" __Pyx_FMT_TYPENAME "' has: "
                        "either add 'cdef dict __dict__' to the extension type "
                        "or add '__slots__ = [...]' to the base type",
                        type_name, b_name);
                    __Pyx_DECREF_TypeName(b_name);
                }
#if !CYTHON_USE_TYPE_SLOTS
              dictoffset_return:
#endif
#if CYTHON_AVOID_BORROWED_REFS
                Py_DECREF(b0);
#endif
                return -1;
            }
        }
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(b0);
#endif
    }
    return 0;
}
#endif

/* PyType_Ready */
CYTHON_UNUSED static int __Pyx_PyType_HasMultipleInheritance(PyTypeObject *t) {
    while (t) {
        PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
        if (bases) {
            return 1;
        }
        t = __Pyx_PyType_GetSlot(t, tp_base, PyTypeObject*);
    }
    return 0;
}
static int __Pyx_PyType_Ready(PyTypeObject *t) {
#if CYTHON_USE_TYPE_SPECS || !CYTHON_COMPILING_IN_CPYTHON || defined(PYSTON_MAJOR_VERSION)
    (void)__Pyx_PyObject_CallMethod0;
#if CYTHON_USE_TYPE_SPECS
    (void)__Pyx_validate_bases_tuple;
#endif
    return PyType_Ready(t);
#else
    int r;
    if (!__Pyx_PyType_HasMultipleInheritance(t)) {
        return PyType_Ready(t);
    }
    PyObject *bases = __Pyx_PyType_GetSlot(t, tp_bases, PyObject*);
    if (bases && unlikely(__Pyx_validate_bases_tuple(t->tp_name, t->tp_dictoffset, bases) == -1))
        return -1;
#if !defined(PYSTON_MAJOR_VERSION)
    {
        int gc_was_enabled;
    #if PY_VERSION_HEX >= 0x030A00b1
        gc_was_enabled = PyGC_Disable();
        (void)__Pyx_PyObject_CallMethod0;
    #else
        PyObject *ret, *py_status;
        PyObject *gc = NULL;
        #if (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM+0 >= 0x07030400) &&\
                !CYTHON_COMPILING_IN_GRAAL
        gc = PyImport_GetModule(__pyx_mstate_global->__pyx_kp_u_gc);
        #endif
        if (unlikely(!gc)) gc = PyImport_Import(__pyx_mstate_global->__pyx_kp_u_gc);
        if (unlikely(!gc)) return -1;
        py_status = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_isenabled);
        if (unlikely(!py_status)) {
            Py_DECREF(gc);
            return -1;
        }
        gc_was_enabled = __Pyx_PyObject_IsTrue(py_status);
        Py_DECREF(py_status);
        if (gc_was_enabled > 0) {
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_disable);
            if (unlikely(!ret)) {
                Py_DECREF(gc);
                return -1;
            }
            Py_DECREF(ret);
        } else if (unlikely(gc_was_enabled == -1)) {
            Py_DECREF(gc);
            return -1;
        }
    #endif
        t->tp_flags |= Py_TPFLAGS_HEAPTYPE;
#if PY_VERSION_HEX >= 0x030A0000
        t->tp_flags |= Py_TPFLAGS_IMMUTABLETYPE;
#endif
#else
        (void)__Pyx_PyObject_CallMethod0;
#endif
    r = PyType_Ready(t);
#if !defined(PYSTON_MAJOR_VERSION)
        t->tp_flags &= ~Py_TPFLAGS_HEAPTYPE;
    #if PY_VERSION_HEX >= 0x030A00b1
        if (gc_was_enabled)
            PyGC_Enable();
    #else
        if (gc_was_enabled) {
            PyObject *tp, *v, *tb;
            PyErr_Fetch(&tp, &v, &tb);
            ret = __Pyx_PyObject_CallMethod0(gc, __pyx_mstate_global->__pyx_kp_u_enable);
            if (likely(ret || r == -1)) {
                Py_XDECREF(ret);
                PyErr_Restore(tp, v, tb);
            } else {
                Py_XDECREF(tp);
                Py_XDECREF(v);
                Py_XDECREF(tb);
                r = -1;
            }
        }
        Py_DECREF(gc);
    #endif
    }
#endif
    return r;
#endif
}

/* SetVTable */
static int __Pyx_SetVtable(PyTypeObject *type, void *vtable) {
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
    if (unlikely(!ob))
        goto bad;
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(PyObject_SetAttr((PyObject *) type, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#else
    if (unlikely(PyDict_SetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable, ob) < 0))
#endif
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* GetVTable (used by MergeVTables) */
static void* __Pyx_GetVtable(PyTypeObject *type) {
    void* ptr;
#if CYTHON_COMPILING_IN_LIMITED_API
    PyObject *ob = PyObject_GetAttr((PyObject *)type, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#else
    PyObject *ob = PyObject_GetItem(type->tp_dict, __pyx_mstate_global->__pyx_n_u_pyx_vtable);
#endif
    if (!ob)
        goto bad;
    ptr = PyCapsule_GetPointer(ob, 0);
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* MergeVTables */
static int __Pyx_MergeVtables(PyTypeObject *type) {
    int i=0;
    Py_ssize_t size;
    void** base_vtables;
    __Pyx_TypeName tp_base_name = NULL;
    __Pyx_TypeName base_name = NULL;
    void* unknown = (void*)-1;
    PyObject* bases = __Pyx_PyType_GetSlot(type, tp_bases, PyObject*);
    int base_depth = 0;
    {
        PyTypeObject* base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
        while (base) {
            base_depth += 1;
            base = __Pyx_PyType_GetSlot(base, tp_base, PyTypeObject*);
        }
    }
    base_vtables = (void**) PyMem_Malloc(sizeof(void*) * (size_t)(base_depth + 1));
    base_vtables[0] = unknown;
#if CYTHON_COMPILING_IN_LIMITED_API
    size = PyTuple_Size(bases);
    if (size < 0) goto other_failure;
#else
    size = PyTuple_GET_SIZE(bases);
#endif
    for (i = 1; i < size; i++) {
        PyObject *basei;
        void* base_vtable;
#if CYTHON_AVOID_BORROWED_REFS
        basei = PySequence_GetItem(bases, i);
        if (unlikely(!basei)) goto other_failure;
#elif !CYTHON_ASSUME_SAFE_MACROS
        basei = PyTuple_GetItem(bases, i);
        if (unlikely(!basei)) goto other_failure;
#else
        basei = PyTuple_GET_ITEM(bases, i);
#endif
        base_vtable = __Pyx_GetVtable((PyTypeObject*)basei);
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(basei);
#endif
        if (base_vtable != NULL) {
            int j;
            PyTypeObject* base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
            for (j = 0; j < base_depth; j++) {
                if (base_vtables[j] == unknown) {
                    base_vtables[j] = __Pyx_GetVtable(base);
                    base_vtables[j + 1] = unknown;
                }
                if (base_vtables[j] == base_vtable) {
                    break;
                } else if (base_vtables[j] == NULL) {
                    goto bad;
                }
                base = __Pyx_PyType_GetSlot(base, tp_base, PyTypeObject*);
            }
        }
    }
    PyErr_Clear();
    PyMem_Free(base_vtables);
    return 0;
bad:
    {
        PyTypeObject* basei = NULL;
        PyTypeObject* tp_base = __Pyx_PyType_GetSlot(type, tp_base, PyTypeObject*);
        tp_base_name = __Pyx_PyType_GetFullyQualifiedName(tp_base);
#if CYTHON_AVOID_BORROWED_REFS
        basei = (PyTypeObject*)PySequence_GetItem(bases, i);
        if (unlikely(!basei)) goto really_bad;
#elif !CYTHON_ASSUME_SAFE_MACROS
        basei = (PyTypeObject*)PyTuple_GetItem(bases, i);
        if (unlikely(!basei)) goto really_bad;
#else
        basei = (PyTypeObject*)PyTuple_GET_ITEM(bases, i);
#endif
        base_name = __Pyx_PyType_GetFullyQualifiedName(basei);
#if CYTHON_AVOID_BORROWED_REFS
        Py_DECREF(basei);
#endif
    }
    PyErr_Format(PyExc_TypeError,
        "multiple bases have vtable conflict: '" __Pyx_FMT_TYPENAME "' and '" __Pyx_FMT_TYPENAME "'", tp_base_name, base_name);
#if CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
really_bad: // bad has failed!
#endif
    __Pyx_DECREF_TypeName(tp_base_name);
    __Pyx_DECREF_TypeName(base_name);
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_AVOID_BORROWED_REFS || !CYTHON_ASSUME_SAFE_MACROS
other_failure:
#endif
    PyMem_Free(base_vtables);
    return -1;
}

/* DelItemOnTypeDict (used by SetupReduce) */
static int __Pyx__DelItemOnTypeDict(PyTypeObject *tp, PyObject *k) {
    int result;
    PyObject *tp_dict;
#if CYTHON_COMPILING_IN_LIMITED_API
    tp_dict = __Pyx_GetTypeDict(tp);
    if (unlikely(!tp_dict)) return -1;
#else
    tp_dict = tp->tp_dict;
#endif
    result = PyDict_DelItem(tp_dict, k);
    if (likely(!result)) PyType_Modified(tp);
    return result;
}

/* SetupReduce */
static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStrNoError(meth, __pyx_mstate_global->__pyx_n_u_name);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_getstate = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
    PyObject *getstate = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_getstate);
#else
    getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_getstate);
    if (!getstate && PyErr_Occurred()) {
        goto __PYX_BAD;
    }
#endif
    if (getstate) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_getstate);
#else
        object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_getstate);
        if (!object_getstate && PyErr_Occurred()) {
            goto __PYX_BAD;
        }
#endif
        if (object_getstate != getstate) {
            goto __PYX_GOOD;
        }
    }
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_mstate_global->__pyx_n_u_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
    if (reduce_ex == object_reduce_ex) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce); if (!object_reduce) goto __PYX_BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_mstate_global->__pyx_n_u_reduce); if (!object_reduce) goto __PYX_BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_mstate_global->__pyx_n_u_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_mstate_global->__pyx_n_u_reduce_cython)) {
            reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_reduce_cython);
            if (likely(reduce_cython)) {
                ret = __Pyx_SetItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                ret = __Pyx_DelItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
            } else if (reduce == object_reduce || PyErr_Occurred()) {
                goto __PYX_BAD;
            }
            setstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_setstate);
            if (!setstate) PyErr_Clear();
            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_mstate_global->__pyx_n_u_setstate_cython)) {
                setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_mstate_global->__pyx_n_u_setstate_cython);
                if (likely(setstate_cython)) {
                    ret = __Pyx_SetItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                    ret = __Pyx_DelItemOnTypeDict((PyTypeObject*)type_obj, __pyx_mstate_global->__pyx_n_u_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                } else if (!setstate || PyErr_Occurred()) {
                    goto __PYX_BAD;
                }
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto __PYX_GOOD;
__PYX_BAD:
    if (!PyErr_Occurred()) {
        __Pyx_TypeName type_obj_name =
            __Pyx_PyType_GetFullyQualifiedName((PyTypeObject*)type_obj);
        PyErr_Format(PyExc_RuntimeError,
            "Unable to initialize pickling for " __Pyx_FMT_TYPENAME, type_obj_name);
        __Pyx_DECREF_TypeName(type_obj_name);
    }
    ret = -1;
__PYX_GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
    Py_XDECREF(object_getstate);
    Py_XDECREF(getstate);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}

/* HasAttr (used by ImportImpl) */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!PyUnicode_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_PyObject_GetAttrStrNoError(o, n);
    if (!r) {
        return (unlikely(PyErr_Occurred())) ? -1 : 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}
#endif

/* ImportImpl (used by Import) */
static int __Pyx__Import_GetModule(PyObject *qualname, PyObject **module) {
    PyObject *imported_module = PyImport_GetModule(qualname);
    if (unlikely(!imported_module)) {
        *module = NULL;
        if (PyErr_Occurred()) {
            return -1;
        }
        return 0;
    }
    *module = imported_module;
    return 1;
}
static int __Pyx__Import_Lookup(PyObject *qualname, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject **module) {
    PyObject *imported_module;
    PyObject *top_level_package_name;
    Py_ssize_t i;
    int status, module_found;
    Py_ssize_t dot_index;
    module_found = __Pyx__Import_GetModule(qualname, &imported_module);
    if (unlikely(!module_found || module_found == -1)) {
        *module = NULL;
        return module_found;
    }
    if (imported_names) {
        for (i = 0; i < len_imported_names; i++) {
            PyObject *imported_name = imported_names[i];
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
            int has_imported_attribute = PyObject_HasAttr(imported_module, imported_name);
#else
            int has_imported_attribute = PyObject_HasAttrWithError(imported_module, imported_name);
            if (unlikely(has_imported_attribute == -1)) goto error;
#endif
            if (!has_imported_attribute) {
                goto not_found;
            }
        }
        *module = imported_module;
        return 1;
    }
    dot_index = PyUnicode_FindChar(qualname, '.', 0, PY_SSIZE_T_MAX, 1);
    if (dot_index == -1) {
        *module = imported_module;
        return 1;
    }
    if (unlikely(dot_index == -2)) goto error;
    top_level_package_name = PyUnicode_Substring(qualname, 0, dot_index);
    if (unlikely(!top_level_package_name)) goto error;
    Py_DECREF(imported_module);
    status = __Pyx__Import_GetModule(top_level_package_name, module);
    Py_DECREF(top_level_package_name);
    return status;
error:
    Py_DECREF(imported_module);
    *module = NULL;
    return -1;
not_found:
    Py_DECREF(imported_module);
    *module = NULL;
    return 0;
}
static PyObject *__Pyx__Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, PyObject *moddict, int level) {
    PyObject *module = 0;
    PyObject *empty_dict = 0;
    PyObject *from_list = 0;
    int module_found;
    if (!qualname) {
        qualname = name;
    }
    module_found = __Pyx__Import_Lookup(qualname, imported_names, len_imported_names, &module);
    if (likely(module_found == 1)) {
        return module;
    } else if (unlikely(module_found == -1)) {
        return NULL;
    }
    empty_dict = PyDict_New();
    if (unlikely(!empty_dict))
        goto bad;
    if (imported_names) {
#if CYTHON_COMPILING_IN_CPYTHON
        from_list = __Pyx_PyList_FromArray(imported_names, len_imported_names);
        if (unlikely(!from_list))
            goto bad;
#else
        from_list = PyList_New(len_imported_names);
        if (unlikely(!from_list)) goto bad;
        for (Py_ssize_t i=0; i<len_imported_names; ++i) {
            if (PyList_SetItem(from_list, i, __Pyx_NewRef(imported_names[i])) < 0) goto bad;
        }
#endif
    }
    if (level == -1) {
        const char* package_sep = strchr(__Pyx_MODULE_NAME, '.');
        if (package_sep != (0)) {
            module = PyImport_ImportModuleLevelObject(
                name, moddict, empty_dict, from_list, 1);
            if (unlikely(!module)) {
                if (unlikely(!PyErr_ExceptionMatches(PyExc_ImportError)))
                    goto bad;
                PyErr_Clear();
            }
        }
        level = 0;
    }
    if (!module) {
        module = PyImport_ImportModuleLevelObject(
            name, moddict, empty_dict, from_list, level);
    }
bad:
    Py_XDECREF(from_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* Import */
static PyObject *__Pyx_Import(PyObject *name, PyObject *const *imported_names, Py_ssize_t len_imported_names, PyObject *qualname, int level) {
    return __Pyx__Import(name, imported_names, len_imported_names, qualname, __pyx_mstate_global->__pyx_d, level);
}

/* ImportFrom */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        const char* module_name_str = 0;
        PyObject* module_name = 0;
        PyObject* module_dot = 0;
        PyObject* full_name = 0;
        PyErr_Clear();
        module_name_str = PyModule_GetName(module);
        if (unlikely(!module_name_str)) { goto modbad; }
        module_name = PyUnicode_FromString(module_name_str);
        if (unlikely(!module_name)) { goto modbad; }
        module_dot = PyUnicode_Concat(module_name, __pyx_mstate_global->__pyx_kp_u__10);
        if (unlikely(!module_dot)) { goto modbad; }
        full_name = PyUnicode_Concat(module_dot, name);
        if (unlikely(!full_name)) { goto modbad; }
        #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM  < 0x07030400) ||\
                CYTHON_COMPILING_IN_GRAAL
        {
            PyObject *modules = PyImport_GetModuleDict();
            if (unlikely(!modules))
                goto modbad;
            value = PyObject_GetItem(modules, full_name);
        }
        #else
        value = PyImport_GetModule(full_name);
        #endif
      modbad:
        Py_XDECREF(full_name);
        Py_XDECREF(module_dot);
        Py_XDECREF(module_name);
    }
    if (unlikely(!value)) {
        PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
    }
    return value;
}

/* Py3UpdateBases */
static PyObject*
__Pyx_PEP560_update_bases(PyObject *bases)
{
    Py_ssize_t i, j, size_bases;
    PyObject *base = NULL, *meth, *new_base, *result, *new_bases = NULL;
#if CYTHON_ASSUME_SAFE_SIZE
    size_bases = PyTuple_GET_SIZE(bases);
#else
    size_bases = PyTuple_Size(bases);
    if (size_bases < 0) return NULL;
#endif
    for (i = 0; i < size_bases; i++) {
#if CYTHON_AVOID_BORROWED_REFS
        Py_CLEAR(base);
#endif
#if CYTHON_ASSUME_SAFE_MACROS
        base = PyTuple_GET_ITEM(bases, i);
#else
        base = PyTuple_GetItem(bases, i);
        if (!base) goto error;
#endif
#if CYTHON_AVOID_BORROWED_REFS
        Py_INCREF(base);
#endif
        if (PyType_Check(base)) {
            if (new_bases) {
                if (PyList_Append(new_bases, base) < 0) {
                    goto error;
                }
            }
            continue;
        }
        meth = __Pyx_PyObject_GetAttrStrNoError(base, __pyx_mstate_global->__pyx_n_u_mro_entries);
        if (!meth && PyErr_Occurred()) {
            goto error;
        }
        if (!meth) {
            if (new_bases) {
                if (PyList_Append(new_bases, base) < 0) {
                    goto error;
                }
            }
            continue;
        }
        new_base = __Pyx_PyObject_CallOneArg(meth, bases);
        Py_DECREF(meth);
        if (!new_base) {
            goto error;
        }
        if (!PyTuple_Check(new_base)) {
            PyErr_SetString(PyExc_TypeError,
                            "__mro_entries__ must return a tuple");
            Py_DECREF(new_base);
            goto error;
        }
        if (!new_bases) {
            if (!(new_bases = PyList_New(i))) {
                goto error;
            }
            for (j = 0; j < i; j++) {
                PyObject *base_from_list;
#if CYTHON_ASSUME_SAFE_MACROS
                base_from_list = PyTuple_GET_ITEM(bases, j);
                PyList_SET_ITEM(new_bases, j, base_from_list);
                Py_INCREF(base_from_list);
#else
                base_from_list = PyTuple_GetItem(bases, j);
                if (!base_from_list) goto error;
                Py_INCREF(base_from_list);
                if (PyList_SetItem(new_bases, j, base_from_list) < 0) goto error;
#endif
            }
        }
#if CYTHON_ASSUME_SAFE_SIZE
        j = PyList_GET_SIZE(new_bases);
#else
        j = PyList_Size(new_bases);
        if (j < 0) goto error;
#endif
        if (PyList_SetSlice(new_bases, j, j, new_base) < 0) {
            goto error;
        }
        Py_DECREF(new_base);
    }
    if (!new_bases) {
        Py_INCREF(bases);
        return bases;
    }
    result = PyList_AsTuple(new_bases);
    Py_DECREF(new_bases);
#if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(base);
#endif
    return result;
error:
    Py_XDECREF(new_bases);
#if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(base);
#endif
    return NULL;
}

/* CalculateMetaclass */
static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
    Py_ssize_t i, nbases;
#if CYTHON_ASSUME_SAFE_SIZE
    nbases = PyTuple_GET_SIZE(bases);
#else
    nbases = PyTuple_Size(bases);
    if (nbases < 0) return NULL;
#endif
    for (i=0; i < nbases; i++) {
        PyTypeObject *tmptype;
#if CYTHON_ASSUME_SAFE_MACROS
        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
#else
        PyObject *tmp = PyTuple_GetItem(bases, i);
        if (!tmp) return NULL;
#endif
        tmptype = Py_TYPE(tmp);
        if (!metaclass) {
            metaclass = tmptype;
            continue;
        }
        if (PyType_IsSubtype(metaclass, tmptype))
            continue;
        if (PyType_IsSubtype(tmptype, metaclass)) {
            metaclass = tmptype;
            continue;
        }
        PyErr_SetString(PyExc_TypeError,
                        "metaclass conflict: "
                        "the metaclass of a derived class "
                        "must be a (non-strict) subclass "
                        "of the metaclasses of all its bases");
        return NULL;
    }
    if (!metaclass) {
        metaclass = &PyType_Type;
    }
    Py_INCREF((PyObject*) metaclass);
    return (PyObject*) metaclass;
}

/* PyObjectLookupSpecial (used by Py3ClassCreate) */
#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx__PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name, int with_error) {
    PyObject *res;
    PyTypeObject *tp = Py_TYPE(obj);
    res = _PyType_Lookup(tp, attr_name);
    if (likely(res)) {
        descrgetfunc f = Py_TYPE(res)->tp_descr_get;
        if (!f) {
            Py_INCREF(res);
        } else {
            res = f(res, obj, (PyObject *)tp);
        }
    } else if (with_error) {
        PyErr_SetObject(PyExc_AttributeError, attr_name);
    }
    return res;
}
#endif

/* Py3ClassCreate */
static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
    PyObject *ns;
    if (metaclass) {
        PyObject *prep = __Pyx_PyObject_GetAttrStrNoError(metaclass, __pyx_mstate_global->__pyx_n_u_prepare);
        if (prep) {
            PyObject *pargs[3] = {NULL, name, bases};
            ns = __Pyx_PyObject_FastCallDict(prep, pargs+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw);
            Py_DECREF(prep);
        } else {
            if (unlikely(PyErr_Occurred()))
                return NULL;
            ns = PyDict_New();
        }
    } else {
        ns = PyDict_New();
    }
    if (unlikely(!ns))
        return NULL;
    if (unlikely(PyObject_SetItem(ns, __pyx_mstate_global->__pyx_n_u_module, modname) < 0)) goto bad;
    if (unlikely(PyObject_SetItem(ns, __pyx_mstate_global->__pyx_n_u_qualname, qualname) < 0)) goto bad;
    if (unlikely(doc && PyObject_SetItem(ns, __pyx_mstate_global->__pyx_n_u_doc, doc) < 0)) goto bad;
    return ns;
bad:
    Py_DECREF(ns);
    return NULL;
}
static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
                                      PyObject *dict, PyObject *mkw,
                                      int calculate_metaclass, int allow_py2_metaclass) {
    PyObject *result;
    PyObject *owned_metaclass = NULL;
    PyObject *margs[4] = {NULL, name, bases, dict};
    if (allow_py2_metaclass) {
        owned_metaclass = PyObject_GetItem(dict, __pyx_mstate_global->__pyx_n_u_metaclass);
        if (owned_metaclass) {
            metaclass = owned_metaclass;
        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
            PyErr_Clear();
        } else {
            return NULL;
        }
    }
    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
        Py_XDECREF(owned_metaclass);
        if (unlikely(!metaclass))
            return NULL;
        owned_metaclass = metaclass;
    }
    result = __Pyx_PyObject_FastCallDict(metaclass, margs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, mkw);
    Py_XDECREF(owned_metaclass);
    return result;
}

/* ClassMethod */
static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
#if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM <= 0x05080000
    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
        return PyClassMethod_New(method);
    }
#else
#if CYTHON_COMPILING_IN_PYPY
    if (PyMethodDescr_Check(method))
#else
    if (__Pyx_TypeCheck(method, &PyMethodDescr_Type))
#endif
    {
#if CYTHON_COMPILING_IN_LIMITED_API
        return PyErr_Format(
            PyExc_SystemError,
            "Cython cannot yet handle classmethod on a MethodDescriptorType (%S) in limited API mode. "
            "This is most likely a classmethod in a cdef class method with binding=False. "
            "Try setting 'binding' to True.",
            method);
#elif CYTHON_COMPILING_IN_GRAAL && defined(GRAALPY_VERSION_NUM) && GRAALPY_VERSION_NUM > 0x19000000
        PyTypeObject *d_type = GraalPyDescrObject_GetType(method);
        return PyDescr_NewClassMethod(d_type, GraalPyMethodDescrObject_GetMethod(method));
#elif CYTHON_COMPILING_IN_GRAAL
        PyTypeObject *d_type = PyDescrObject_GetType(method);
        return PyDescr_NewClassMethod(d_type, PyMethodDescrObject_GetMethod(method));
#else
        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
        PyTypeObject *d_type = descr->d_common.d_type;
        return PyDescr_NewClassMethod(d_type, descr->d_method);
#endif
    }
#endif
#if !CYTHON_COMPILING_IN_LIMITED_API
    else if (PyMethod_Check(method)) {
        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
    }
    else {
        return PyClassMethod_New(method);
    }
#else
    {
        PyObject *func=NULL;
        PyObject *builtins, *classmethod, *classmethod_str, *result=NULL;
        if (__Pyx_TypeCheck(method, __pyx_mstate_global->__Pyx_CachedMethodType)) {
            func = PyObject_GetAttrString(method, "__func__");
            if (!func) goto bad;
        } else {
            func = method;
            Py_INCREF(func);
        }
        builtins = PyEval_GetBuiltins(); // borrowed
        if (unlikely(!builtins)) goto bad;
        classmethod_str = PyUnicode_FromString("classmethod");
        if (unlikely(!classmethod_str)) goto bad;
        classmethod = PyObject_GetItem(builtins, classmethod_str);
        Py_DECREF(classmethod_str);
        if (unlikely(!classmethod)) goto bad;
        result = PyObject_CallFunctionObjArgs(classmethod, func, NULL);
        Py_DECREF(classmethod);
        bad:
        Py_XDECREF(func);
        return result;
    }
#endif
}

/* GetNameInClass */
static PyObject *__Pyx__GetNameInClass(PyObject *nmspace, PyObject *name) {
    PyObject *result;
    PyObject *dict;
    assert(PyType_Check(nmspace));
#if CYTHON_USE_TYPE_SLOTS
    dict = ((PyTypeObject*)nmspace)->tp_dict;
    Py_XINCREF(dict);
#else
    dict = PyObject_GetAttr(nmspace, __pyx_mstate_global->__pyx_n_u_dict);
#endif
    if (likely(dict)) {
        result = PyObject_GetItem(dict, name);
        Py_DECREF(dict);
        if (result) {
            return result;
        }
    }
    PyErr_Clear();
    __Pyx_GetModuleGlobalNameUncached(result, name);
    return result;
}

/* CLineInTraceback (used by AddTraceback) */
#if CYTHON_CLINE_IN_TRACEBACK && CYTHON_CLINE_IN_TRACEBACK_RUNTIME
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
#define __Pyx_PyProbablyModule_GetDict(o) __Pyx_XNewRef(PyModule_GetDict(o))
#elif !CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
#define __Pyx_PyProbablyModule_GetDict(o) PyObject_GenericGetDict(o, NULL);
#else
PyObject* __Pyx_PyProbablyModule_GetDict(PyObject *o) {
    PyObject **dict_ptr = _PyObject_GetDictPtr(o);
    return dict_ptr ? __Pyx_XNewRef(*dict_ptr) : NULL;
}
#endif
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) {
    PyObject *use_cline = NULL;
    PyObject *ptype, *pvalue, *ptraceback;
    PyObject *cython_runtime_dict;
    CYTHON_MAYBE_UNUSED_VAR(tstate);
    if (unlikely(!__pyx_mstate_global->__pyx_cython_runtime)) {
        return c_line;
    }
    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
    cython_runtime_dict = __Pyx_PyProbablyModule_GetDict(__pyx_mstate_global->__pyx_cython_runtime);
    if (likely(cython_runtime_dict)) {
        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
            use_cline, cython_runtime_dict,
            __Pyx_PyDict_SetDefault(cython_runtime_dict, __pyx_mstate_global->__pyx_n_u_cline_in_traceback, Py_False))
    }
    if (use_cline == NULL || use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    Py_XDECREF(use_cline);
    Py_XDECREF(cython_runtime_dict);
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache (used by AddTraceback) */
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    int start = 0, mid = 0, end = count - 1;
    if (end >= 0 && code_line > entries[end].code_line) {
        return count;
    }
    while (start < end) {
        mid = start + (end - start) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static __Pyx_CachedCodeObjectType *__pyx__find_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line) {
    __Pyx_CachedCodeObjectType* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!code_cache->entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(code_cache->entries, code_cache->count, code_line);
    if (unlikely(pos >= code_cache->count) || unlikely(code_cache->entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = code_cache->entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static __Pyx_CachedCodeObjectType *__pyx_find_code_object(int code_line) {
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
    (void)__pyx__find_code_object;
    return NULL; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just miss.
#else
    struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_nonatomic_int_type old_count = __pyx_atomic_incr_acq_rel(&code_cache->accessor_count);
    if (old_count < 0) {
        __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
        return NULL;
    }
#endif
    __Pyx_CachedCodeObjectType *result = __pyx__find_code_object(code_cache, code_line);
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_decr_acq_rel(&code_cache->accessor_count);
#endif
    return result;
#endif
}
static void __pyx__insert_code_object(struct __Pyx_CodeObjectCache *code_cache, int code_line, __Pyx_CachedCodeObjectType* code_object)
{
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = code_cache->entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            code_cache->entries = entries;
            code_cache->max_count = 64;
            code_cache->count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(code_cache->entries, code_cache->count, code_line);
    if ((pos < code_cache->count) && unlikely(code_cache->entries[pos].code_line == code_line)) {
        __Pyx_CachedCodeObjectType* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_INCREF(code_object);
        Py_DECREF(tmp);
        return;
    }
    if (code_cache->count == code_cache->max_count) {
        int new_max = code_cache->max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            code_cache->entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        code_cache->entries = entries;
        code_cache->max_count = new_max;
    }
    for (i=code_cache->count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    code_cache->count++;
    Py_INCREF(code_object);
}
static void __pyx_insert_code_object(int code_line, __Pyx_CachedCodeObjectType* code_object) {
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING && !CYTHON_ATOMICS
    (void)__pyx__insert_code_object;
    return; // Most implementation should have atomics. But otherwise, don't make it thread-safe, just fail.
#else
    struct __Pyx_CodeObjectCache *code_cache = &__pyx_mstate_global->__pyx_code_cache;
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_nonatomic_int_type expected = 0;
    if (!__pyx_atomic_int_cmp_exchange(&code_cache->accessor_count, &expected, INT_MIN)) {
        return;
    }
#endif
    __pyx__insert_code_object(code_cache, code_line, code_object);
#if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
    __pyx_atomic_sub(&code_cache->accessor_count, INT_MIN);
#endif
#endif
}

/* AddTraceback */
#include "compile.h"
#include "frameobject.h"
#include "traceback.h"
#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API && !defined(PYPY_VERSION)
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
#if CYTHON_COMPILING_IN_LIMITED_API
static PyObject *__Pyx_PyCode_Replace_For_AddTraceback(PyObject *code, PyObject *scratch_dict,
                                                       PyObject *firstlineno, PyObject *name) {
    PyObject *replace = NULL;
    if (unlikely(PyDict_SetItemString(scratch_dict, "co_firstlineno", firstlineno))) return NULL;
    if (unlikely(PyDict_SetItemString(scratch_dict, "co_name", name))) return NULL;
    replace = PyObject_GetAttrString(code, "replace");
    if (likely(replace)) {
        PyObject *result = PyObject_Call(replace, __pyx_mstate_global->__pyx_empty_tuple, scratch_dict);
        Py_DECREF(replace);
        return result;
    }
    PyErr_Clear();
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyObject *code_object = NULL, *py_py_line = NULL, *py_funcname = NULL, *dict = NULL;
    PyObject *replace = NULL, *getframe = NULL, *frame = NULL;
    PyObject *exc_type, *exc_value, *exc_traceback;
    int success = 0;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(__Pyx_PyThreadState_Current, c_line);
    }
    PyErr_Fetch(&exc_type, &exc_value, &exc_traceback);
    code_object = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!code_object) {
        code_object = Py_CompileString("_getframe()", filename, Py_eval_input);
        if (unlikely(!code_object)) goto bad;
        py_py_line = PyLong_FromLong(py_line);
        if (unlikely(!py_py_line)) goto bad;
        if (c_line) {
            py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        } else {
            py_funcname = PyUnicode_FromString(funcname);
        }
        if (unlikely(!py_funcname)) goto bad;
        dict = PyDict_New();
        if (unlikely(!dict)) goto bad;
        {
            PyObject *old_code_object = code_object;
            code_object = __Pyx_PyCode_Replace_For_AddTraceback(code_object, dict, py_py_line, py_funcname);
            Py_DECREF(old_code_object);
        }
        if (unlikely(!code_object)) goto bad;
        __pyx_insert_code_object(c_line ? -c_line : py_line, code_object);
    } else {
        dict = PyDict_New();
    }
    getframe = PySys_GetObject("_getframe");
    if (unlikely(!getframe)) goto bad;
    if (unlikely(PyDict_SetItemString(dict, "_getframe", getframe))) goto bad;
    frame = PyEval_EvalCode(code_object, dict, dict);
    if (unlikely(!frame) || frame == Py_None) goto bad;
    success = 1;
  bad:
    PyErr_Restore(exc_type, exc_value, exc_traceback);
    Py_XDECREF(code_object);
    Py_XDECREF(py_py_line);
    Py_XDECREF(py_funcname);
    Py_XDECREF(dict);
    Py_XDECREF(replace);
    if (success) {
        PyTraceBack_Here(
            (struct _frame*)frame);
    }
    Py_XDECREF(frame);
}
#else
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = NULL;
    PyObject *py_funcname = NULL;
    if (c_line) {
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        if (!py_funcname) goto bad;
        funcname = PyUnicode_AsUTF8(py_funcname);
        if (!funcname) goto bad;
    }
    py_code = PyCode_NewEmpty(filename, funcname, py_line);
    Py_XDECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject *ptype, *pvalue, *ptraceback;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(tstate, c_line);
    }
    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!py_code) {
        __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) {
            /* If the code object creation fails, then we should clear the
               fetched exception references and propagate the new exception */
            Py_XDECREF(ptype);
            Py_XDECREF(pvalue);
            Py_XDECREF(ptraceback);
            goto bad;
        }
        __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
    }
    py_frame = PyFrame_New(
        tstate,            /*PyThreadState *tstate,*/
        py_code,           /*PyCodeObject *code,*/
        __pyx_mstate_global->__pyx_d,    /*PyObject *globals,*/
        0                  /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}
#endif

/* CIntFromPyVerify */
#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* FromPyCTupleUtility */
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE && !CYTHON_AVOID_BORROWED_REFS
static void __Pyx_tuple___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(PyObject * o, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc *result) {
        result->f0 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 0));
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 1));
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f2 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 2));
        if ((result->f2 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f3 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 3));
        if ((result->f3 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f4 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 4));
        if ((result->f4 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f5 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 5));
        if ((result->f5 == (double)-1) && PyErr_Occurred()) goto bad;
    return;
bad:
    return;
}
static void __Pyx_list___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(PyObject * o, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc *result) {
        result->f0 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 0));
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 1));
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f2 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 2));
        if ((result->f2 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f3 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 3));
        if ((result->f3 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f4 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 4));
        if ((result->f4 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f5 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 5));
        if ((result->f5 == (double)-1) && PyErr_Occurred()) goto bad;
    return;
bad:
    return;
}
#endif
static void __Pyx_seq___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(PyObject * o, __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc *result) {
    if (unlikely(!PySequence_Check(o))) {
        __Pyx_TypeName o_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(o));
        PyErr_Format(PyExc_TypeError,
                     "Expected a sequence of size %zd, got " __Pyx_FMT_TYPENAME, (Py_ssize_t) 6, o_type_name);
        __Pyx_DECREF_TypeName(o_type_name);
        goto bad;
    } else if (unlikely(PySequence_Length(o) != 6)) {
        PyErr_Format(PyExc_TypeError,
                     "Expected a sequence of size %zd, got size %zd", (Py_ssize_t) 6, PySequence_Length(o));
        goto bad;
    }
    {
        PyObject *item;
        item = __Pyx_PySequence_ITEM(o, 0);  if (unlikely(!item)) goto bad;
        result->f0 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 1);  if (unlikely(!item)) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 2);  if (unlikely(!item)) goto bad;
        result->f2 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f2 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 3);  if (unlikely(!item)) goto bad;
        result->f3 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f3 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 4);  if (unlikely(!item)) goto bad;
        result->f4 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f4 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 5);  if (unlikely(!item)) goto bad;
        result->f5 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f5 == (double)-1) && PyErr_Occurred()) goto bad;
    }
    return;
bad:
    return;
}
static CYTHON_INLINE __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc __pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(PyObject * o) {
    __pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc result;
    #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_Check(o) && PyTuple_GET_SIZE(o) == 6)) {
        __Pyx_tuple___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(o, &result);
    } else if (likely(PyList_Check(o) && PyList_GET_SIZE(o) == 6)) {
        __Pyx_list___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(o, &result);
    } else
    #endif
    {
        __Pyx_seq___pyx_convert__from_py___pyx_ctuple_ee55be__double__and_double__and_double__and_double__an__etc(o, &result);
    }
    return result;
}

/* FromPyCTupleUtility */
#if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE && !CYTHON_AVOID_BORROWED_REFS
static void __Pyx_tuple___pyx_convert__from_py___pyx_ctuple_double__and_double(PyObject * o, __pyx_ctuple_double__and_double *result) {
        result->f0 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 0));
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(PyTuple_GET_ITEM(o, 1));
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
    return;
bad:
    return;
}
static void __Pyx_list___pyx_convert__from_py___pyx_ctuple_double__and_double(PyObject * o, __pyx_ctuple_double__and_double *result) {
        result->f0 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 0));
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(PyList_GET_ITEM(o, 1));
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
    return;
bad:
    return;
}
#endif
static void __Pyx_seq___pyx_convert__from_py___pyx_ctuple_double__and_double(PyObject * o, __pyx_ctuple_double__and_double *result) {
    if (unlikely(!PySequence_Check(o))) {
        __Pyx_TypeName o_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(o));
        PyErr_Format(PyExc_TypeError,
                     "Expected a sequence of size %zd, got " __Pyx_FMT_TYPENAME, (Py_ssize_t) 2, o_type_name);
        __Pyx_DECREF_TypeName(o_type_name);
        goto bad;
    } else if (unlikely(PySequence_Length(o) != 2)) {
        PyErr_Format(PyExc_TypeError,
                     "Expected a sequence of size %zd, got size %zd", (Py_ssize_t) 2, PySequence_Length(o));
        goto bad;
    }
    {
        PyObject *item;
        item = __Pyx_PySequence_ITEM(o, 0);  if (unlikely(!item)) goto bad;
        result->f0 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f0 == (double)-1) && PyErr_Occurred()) goto bad;
        item = __Pyx_PySequence_ITEM(o, 1);  if (unlikely(!item)) goto bad;
        result->f1 = __Pyx_PyFloat_AsDouble(item);
        Py_DECREF(item);
        if ((result->f1 == (double)-1) && PyErr_Occurred()) goto bad;
    }
    return;
bad:
    return;
}
static CYTHON_INLINE __pyx_ctuple_double__and_double __pyx_convert__from_py___pyx_ctuple_double__and_double(PyObject * o) {
    __pyx_ctuple_double__and_double result;
    #if CYTHON_ASSUME_SAFE_MACROS && CYTHON_ASSUME_SAFE_SIZE && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_Check(o) && PyTuple_GET_SIZE(o) == 2)) {
        __Pyx_tuple___pyx_convert__from_py___pyx_ctuple_double__and_double(o, &result);
    } else if (likely(PyList_Check(o) && PyList_GET_SIZE(o) == 2)) {
        __Pyx_list___pyx_convert__from_py___pyx_ctuple_double__and_double(o, &result);
    } else
    #endif
    {
        __Pyx_seq___pyx_convert__from_py___pyx_ctuple_double__and_double(o, &result);
    }
    return result;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_codepoint_t(hb_codepoint_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_codepoint_t neg_one = (hb_codepoint_t) -1, const_zero = (hb_codepoint_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_codepoint_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_codepoint_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_codepoint_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_codepoint_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_codepoint_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_codepoint_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_codepoint_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_glyph_flags_t(hb_glyph_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_glyph_flags_t neg_one = (hb_glyph_flags_t) -1, const_zero = (hb_glyph_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_glyph_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_glyph_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_glyph_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_glyph_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_glyph_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_glyph_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_glyph_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_flags_t(hb_buffer_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_flags_t neg_one = (hb_buffer_flags_t) -1, const_zero = (hb_buffer_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_buffer_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_buffer_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_buffer_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_buffer_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_buffer_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_cluster_level_t(hb_buffer_cluster_level_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_cluster_level_t neg_one = (hb_buffer_cluster_level_t) -1, const_zero = (hb_buffer_cluster_level_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_buffer_cluster_level_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_cluster_level_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_buffer_cluster_level_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_buffer_cluster_level_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_cluster_level_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_buffer_cluster_level_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_buffer_cluster_level_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_content_type_t(hb_buffer_content_type_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_content_type_t neg_one = (hb_buffer_content_type_t) -1, const_zero = (hb_buffer_content_type_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_buffer_content_type_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_content_type_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_buffer_content_type_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_buffer_content_type_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_content_type_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_buffer_content_type_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_buffer_content_type_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_serialize_format_t(hb_buffer_serialize_format_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_serialize_format_t neg_one = (hb_buffer_serialize_format_t) -1, const_zero = (hb_buffer_serialize_format_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_buffer_serialize_format_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_serialize_format_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_buffer_serialize_format_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_buffer_serialize_format_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_serialize_format_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_buffer_serialize_format_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_buffer_serialize_format_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_buffer_serialize_flags_t(hb_buffer_serialize_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_serialize_flags_t neg_one = (hb_buffer_serialize_flags_t) -1, const_zero = (hb_buffer_serialize_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_buffer_serialize_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_serialize_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_buffer_serialize_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_buffer_serialize_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_buffer_serialize_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_buffer_serialize_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_buffer_serialize_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_var_axis_flags_t(hb_ot_var_axis_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_var_axis_flags_t neg_one = (hb_ot_var_axis_flags_t) -1, const_zero = (hb_ot_var_axis_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_var_axis_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_var_axis_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_var_axis_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_var_axis_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_var_axis_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_var_axis_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_var_axis_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_color_palette_flags_t(hb_ot_color_palette_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_color_palette_flags_t neg_one = (hb_ot_color_palette_flags_t) -1, const_zero = (hb_ot_color_palette_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_color_palette_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_color_palette_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_color_palette_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_color_palette_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_color_palette_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_color_palette_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_color_palette_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_layout_glyph_class_t(hb_ot_layout_glyph_class_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_layout_glyph_class_t neg_one = (hb_ot_layout_glyph_class_t) -1, const_zero = (hb_ot_layout_glyph_class_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_layout_glyph_class_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_layout_glyph_class_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_layout_glyph_class_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_layout_glyph_class_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_layout_glyph_class_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_layout_glyph_class_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_layout_glyph_class_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_name_id_predefined_t(hb_ot_name_id_predefined_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_name_id_predefined_t neg_one = (hb_ot_name_id_predefined_t) -1, const_zero = (hb_ot_name_id_predefined_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_name_id_predefined_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_name_id_predefined_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_name_id_predefined_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_name_id_predefined_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_name_id_predefined_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_name_id_predefined_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_name_id_predefined_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE int __Pyx_PyLong_As_int(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const int neg_one = (int) -1, const_zero = (int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        int val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyLong_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) >= 2 * PyLong_SHIFT)) {
                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) >= 3 * PyLong_SHIFT)) {
                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) >= 4 * PyLong_SHIFT)) {
                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (int) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(int) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(int) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(int) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(int) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(int) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(int) - 1 > 4 * PyLong_SHIFT)) {
                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(int) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
        } else if ((sizeof(int) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        int val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (int) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (int) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (int) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (int) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(int) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((int) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(int) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((int) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((int) 1) << (sizeof(int) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (int) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int");
    return (int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int");
    return (int) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_paint_composite_mode_t(hb_paint_composite_mode_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_paint_composite_mode_t neg_one = (hb_paint_composite_mode_t) -1, const_zero = (hb_paint_composite_mode_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_paint_composite_mode_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_paint_composite_mode_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_paint_composite_mode_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_paint_composite_mode_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_paint_composite_mode_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_paint_composite_mode_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_paint_composite_mode_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_paint_extend_t(hb_paint_extend_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_paint_extend_t neg_one = (hb_paint_extend_t) -1, const_zero = (hb_paint_extend_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_paint_extend_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_paint_extend_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_paint_extend_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_paint_extend_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_paint_extend_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_paint_extend_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_paint_extend_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_constant_t(hb_ot_math_constant_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_math_constant_t neg_one = (hb_ot_math_constant_t) -1, const_zero = (hb_ot_math_constant_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_math_constant_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_constant_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_math_constant_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_math_constant_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_constant_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_math_constant_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_math_constant_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_kern_t(hb_ot_math_kern_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_math_kern_t neg_one = (hb_ot_math_kern_t) -1, const_zero = (hb_ot_math_kern_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_math_kern_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_kern_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_math_kern_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_math_kern_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_kern_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_math_kern_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_math_kern_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_math_glyph_part_flags_t(hb_ot_math_glyph_part_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_math_glyph_part_flags_t neg_one = (hb_ot_math_glyph_part_flags_t) -1, const_zero = (hb_ot_math_glyph_part_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_math_glyph_part_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_glyph_part_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_math_glyph_part_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_math_glyph_part_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_math_glyph_part_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_math_glyph_part_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_math_glyph_part_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_metrics_tag_t(hb_ot_metrics_tag_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_metrics_tag_t neg_one = (hb_ot_metrics_tag_t) -1, const_zero = (hb_ot_metrics_tag_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_metrics_tag_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_metrics_tag_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_metrics_tag_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_metrics_tag_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_metrics_tag_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_metrics_tag_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_metrics_tag_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_style_tag_t(hb_style_tag_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_style_tag_t neg_one = (hb_style_tag_t) -1, const_zero = (hb_style_tag_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_style_tag_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_style_tag_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_style_tag_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_style_tag_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_style_tag_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_style_tag_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_style_tag_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_raster_format_t(hb_raster_format_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_raster_format_t neg_one = (hb_raster_format_t) -1, const_zero = (hb_raster_format_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_raster_format_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_raster_format_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_raster_format_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_raster_format_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_raster_format_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_raster_format_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_raster_format_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_subset_sets_t(hb_subset_sets_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_subset_sets_t neg_one = (hb_subset_sets_t) -1, const_zero = (hb_subset_sets_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_subset_sets_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_subset_sets_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_subset_sets_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_subset_sets_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_subset_sets_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_subset_sets_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_subset_sets_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_subset_flags_t(hb_subset_flags_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_subset_flags_t neg_one = (hb_subset_flags_t) -1, const_zero = (hb_subset_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_subset_flags_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_subset_flags_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_subset_flags_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_subset_flags_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_subset_flags_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_subset_flags_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_subset_flags_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE hb_codepoint_t __Pyx_PyLong_As_hb_codepoint_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_codepoint_t neg_one = (hb_codepoint_t) -1, const_zero = (hb_codepoint_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_codepoint_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_codepoint_t) -1;
        val = __Pyx_PyLong_As_hb_codepoint_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_codepoint_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((((hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_codepoint_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((((((hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_codepoint_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((((((((hb_codepoint_t)digits[3]) << PyLong_SHIFT) | (hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_codepoint_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_codepoint_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_codepoint_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_codepoint_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_codepoint_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_codepoint_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((hb_codepoint_t)-1)*(((((hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_codepoint_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) ((((((hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_codepoint_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((hb_codepoint_t)-1)*(((((((hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_codepoint_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) ((((((((hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_codepoint_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) (((hb_codepoint_t)-1)*(((((((((hb_codepoint_t)digits[3]) << PyLong_SHIFT) | (hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_codepoint_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_codepoint_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_codepoint_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_codepoint_t) ((((((((((hb_codepoint_t)digits[3]) << PyLong_SHIFT) | (hb_codepoint_t)digits[2]) << PyLong_SHIFT) | (hb_codepoint_t)digits[1]) << PyLong_SHIFT) | (hb_codepoint_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_codepoint_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_codepoint_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_codepoint_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_codepoint_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_codepoint_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (hb_codepoint_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (hb_codepoint_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (hb_codepoint_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (hb_codepoint_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(hb_codepoint_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((hb_codepoint_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(hb_codepoint_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((hb_codepoint_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((hb_codepoint_t) 1) << (sizeof(hb_codepoint_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (hb_codepoint_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_codepoint_t");
    return (hb_codepoint_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_codepoint_t");
    return (hb_codepoint_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_bool_t(hb_bool_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_bool_t neg_one = (hb_bool_t) -1, const_zero = (hb_bool_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_bool_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_bool_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_bool_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_bool_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_bool_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_bool_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_bool_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_long(unsigned long value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(unsigned long) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned long) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(unsigned long),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned long));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_mask_t(hb_mask_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_mask_t neg_one = (hb_mask_t) -1, const_zero = (hb_mask_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_mask_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_mask_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_mask_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_mask_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_mask_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_mask_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_mask_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_position_t(hb_position_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_position_t neg_one = (hb_position_t) -1, const_zero = (hb_position_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_position_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_position_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_position_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_position_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_position_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_position_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_position_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_int(unsigned int value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(unsigned int) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned int) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(unsigned int),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(unsigned int));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE unsigned int __Pyx_PyLong_As_unsigned_int(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned int neg_one = (unsigned int) -1, const_zero = (unsigned int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        unsigned int val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (unsigned int) -1;
        val = __Pyx_PyLong_As_unsigned_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT)) {
                            return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT)) {
                            return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT)) {
                            return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (unsigned int) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(unsigned int) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(unsigned int, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(unsigned int) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned int) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned int) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(unsigned int) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x))
        } else if ((sizeof(unsigned int) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        unsigned int val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (unsigned int) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (unsigned int) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (unsigned int) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (unsigned int) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(unsigned int) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((unsigned int) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(unsigned int) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((unsigned int) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((unsigned int) 1) << (sizeof(unsigned int) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (unsigned int) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to unsigned int");
    return (unsigned int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to unsigned int");
    return (unsigned int) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_buffer_flags_t __Pyx_PyLong_As_hb_buffer_flags_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_flags_t neg_one = (hb_buffer_flags_t) -1, const_zero = (hb_buffer_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_buffer_flags_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_buffer_flags_t) -1;
        val = __Pyx_PyLong_As_hb_buffer_flags_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_buffer_flags_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((((hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_flags_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((((((hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_flags_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((((((((hb_buffer_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_buffer_flags_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_buffer_flags_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_flags_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_buffer_flags_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_flags_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_buffer_flags_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((hb_buffer_flags_t)-1)*(((((hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_buffer_flags_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) ((((((hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_buffer_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((hb_buffer_flags_t)-1)*(((((((hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_flags_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) ((((((((hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_buffer_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) (((hb_buffer_flags_t)-1)*(((((((((hb_buffer_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_flags_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_flags_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_flags_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_flags_t) ((((((((((hb_buffer_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_flags_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_buffer_flags_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_flags_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_buffer_flags_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_flags_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_buffer_flags_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_buffer_flags_t) -1;
#endif
        if (unlikely(ret))
            return (hb_buffer_flags_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_buffer_flags_t");
    return (hb_buffer_flags_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_buffer_flags_t");
    return (hb_buffer_flags_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_buffer_cluster_level_t __Pyx_PyLong_As_hb_buffer_cluster_level_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_cluster_level_t neg_one = (hb_buffer_cluster_level_t) -1, const_zero = (hb_buffer_cluster_level_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_buffer_cluster_level_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_buffer_cluster_level_t) -1;
        val = __Pyx_PyLong_As_hb_buffer_cluster_level_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((((hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((((((hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((((((((hb_buffer_cluster_level_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_buffer_cluster_level_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_buffer_cluster_level_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_cluster_level_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_buffer_cluster_level_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_cluster_level_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((hb_buffer_cluster_level_t)-1)*(((((hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) ((((((hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((hb_buffer_cluster_level_t)-1)*(((((((hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) ((((((((hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) (((hb_buffer_cluster_level_t)-1)*(((((((((hb_buffer_cluster_level_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_cluster_level_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_cluster_level_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_cluster_level_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_cluster_level_t) ((((((((((hb_buffer_cluster_level_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_cluster_level_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_buffer_cluster_level_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_cluster_level_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_buffer_cluster_level_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_cluster_level_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_buffer_cluster_level_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_buffer_cluster_level_t) -1;
#endif
        if (unlikely(ret))
            return (hb_buffer_cluster_level_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_buffer_cluster_level_t");
    return (hb_buffer_cluster_level_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_buffer_cluster_level_t");
    return (hb_buffer_cluster_level_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_buffer_content_type_t __Pyx_PyLong_As_hb_buffer_content_type_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_content_type_t neg_one = (hb_buffer_content_type_t) -1, const_zero = (hb_buffer_content_type_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_buffer_content_type_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_buffer_content_type_t) -1;
        val = __Pyx_PyLong_As_hb_buffer_content_type_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((((hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((((((hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((((((((hb_buffer_content_type_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_buffer_content_type_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_buffer_content_type_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_content_type_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_buffer_content_type_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_content_type_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((hb_buffer_content_type_t)-1)*(((((hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) ((((((hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((hb_buffer_content_type_t)-1)*(((((((hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) ((((((((hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) (((hb_buffer_content_type_t)-1)*(((((((((hb_buffer_content_type_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_content_type_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_content_type_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_content_type_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_content_type_t) ((((((((((hb_buffer_content_type_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_content_type_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_buffer_content_type_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_content_type_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_buffer_content_type_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_content_type_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_buffer_content_type_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_buffer_content_type_t) -1;
#endif
        if (unlikely(ret))
            return (hb_buffer_content_type_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_buffer_content_type_t");
    return (hb_buffer_content_type_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_buffer_content_type_t");
    return (hb_buffer_content_type_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_buffer_serialize_format_t __Pyx_PyLong_As_hb_buffer_serialize_format_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_serialize_format_t neg_one = (hb_buffer_serialize_format_t) -1, const_zero = (hb_buffer_serialize_format_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_buffer_serialize_format_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_buffer_serialize_format_t) -1;
        val = __Pyx_PyLong_As_hb_buffer_serialize_format_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((((hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((((((hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((((((((hb_buffer_serialize_format_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_buffer_serialize_format_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_buffer_serialize_format_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_format_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_buffer_serialize_format_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_format_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((hb_buffer_serialize_format_t)-1)*(((((hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) ((((((hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((hb_buffer_serialize_format_t)-1)*(((((((hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) ((((((((hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) (((hb_buffer_serialize_format_t)-1)*(((((((((hb_buffer_serialize_format_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_serialize_format_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_format_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_format_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_format_t) ((((((((((hb_buffer_serialize_format_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_format_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_buffer_serialize_format_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_format_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_buffer_serialize_format_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_format_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_buffer_serialize_format_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_buffer_serialize_format_t) -1;
#endif
        if (unlikely(ret))
            return (hb_buffer_serialize_format_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_buffer_serialize_format_t");
    return (hb_buffer_serialize_format_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_buffer_serialize_format_t");
    return (hb_buffer_serialize_format_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_buffer_serialize_flags_t __Pyx_PyLong_As_hb_buffer_serialize_flags_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_buffer_serialize_flags_t neg_one = (hb_buffer_serialize_flags_t) -1, const_zero = (hb_buffer_serialize_flags_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_buffer_serialize_flags_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_buffer_serialize_flags_t) -1;
        val = __Pyx_PyLong_As_hb_buffer_serialize_flags_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((((hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((((((hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((((((((hb_buffer_serialize_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_buffer_serialize_flags_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_buffer_serialize_flags_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_flags_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_buffer_serialize_flags_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_flags_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((hb_buffer_serialize_flags_t)-1)*(((((hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) ((((((hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((hb_buffer_serialize_flags_t)-1)*(((((((hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) ((((((((hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) (((hb_buffer_serialize_flags_t)-1)*(((((((((hb_buffer_serialize_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_buffer_serialize_flags_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_buffer_serialize_flags_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_buffer_serialize_flags_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_buffer_serialize_flags_t) ((((((((((hb_buffer_serialize_flags_t)digits[3]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[2]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[1]) << PyLong_SHIFT) | (hb_buffer_serialize_flags_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_buffer_serialize_flags_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_flags_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_buffer_serialize_flags_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_buffer_serialize_flags_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_buffer_serialize_flags_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_buffer_serialize_flags_t) -1;
#endif
        if (unlikely(ret))
            return (hb_buffer_serialize_flags_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_buffer_serialize_flags_t");
    return (hb_buffer_serialize_flags_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_buffer_serialize_flags_t");
    return (hb_buffer_serialize_flags_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE uint8_t __Pyx_PyLong_As_uint8_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint8_t neg_one = (uint8_t) -1, const_zero = (uint8_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        uint8_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (uint8_t) -1;
        val = __Pyx_PyLong_As_uint8_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(uint8_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(uint8_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) >= 2 * PyLong_SHIFT)) {
                            return (uint8_t) (((((uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint8_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) >= 3 * PyLong_SHIFT)) {
                            return (uint8_t) (((((((uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint8_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) >= 4 * PyLong_SHIFT)) {
                            return (uint8_t) (((((((((uint8_t)digits[3]) << PyLong_SHIFT) | (uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (uint8_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(uint8_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint8_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(uint8_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint8_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(uint8_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(uint8_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint8_t) (((uint8_t)-1)*(((((uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(uint8_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint8_t) ((((((uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(uint8_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint8_t) (((uint8_t)-1)*(((((((uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint8_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint8_t) ((((((((uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(uint8_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint8_t) (((uint8_t)-1)*(((((((((uint8_t)digits[3]) << PyLong_SHIFT) | (uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint8_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint8_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint8_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint8_t) ((((((((((uint8_t)digits[3]) << PyLong_SHIFT) | (uint8_t)digits[2]) << PyLong_SHIFT) | (uint8_t)digits[1]) << PyLong_SHIFT) | (uint8_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(uint8_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint8_t, long, PyLong_AsLong(x))
        } else if ((sizeof(uint8_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint8_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        uint8_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (uint8_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (uint8_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (uint8_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (uint8_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(uint8_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((uint8_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(uint8_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((uint8_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((uint8_t) 1) << (sizeof(uint8_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (uint8_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to uint8_t");
    return (uint8_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to uint8_t");
    return (uint8_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_uint32_t(uint32_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(uint32_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(uint32_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(uint32_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(uint32_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(uint32_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint32_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE uint32_t __Pyx_PyLong_As_uint32_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint32_t neg_one = (uint32_t) -1, const_zero = (uint32_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        uint32_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (uint32_t) -1;
        val = __Pyx_PyLong_As_uint32_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(uint32_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(uint32_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) >= 2 * PyLong_SHIFT)) {
                            return (uint32_t) (((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint32_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) >= 3 * PyLong_SHIFT)) {
                            return (uint32_t) (((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint32_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) >= 4 * PyLong_SHIFT)) {
                            return (uint32_t) (((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (uint32_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(uint32_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint32_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(uint32_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint32_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(uint32_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(uint32_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(uint32_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(uint32_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(uint32_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((((uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(uint32_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint32_t) (((uint32_t)-1)*(((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(uint32_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(uint32_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(uint32_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (uint32_t) ((((((((((uint32_t)digits[3]) << PyLong_SHIFT) | (uint32_t)digits[2]) << PyLong_SHIFT) | (uint32_t)digits[1]) << PyLong_SHIFT) | (uint32_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(uint32_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint32_t, long, PyLong_AsLong(x))
        } else if ((sizeof(uint32_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(uint32_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        uint32_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (uint32_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (uint32_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (uint32_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (uint32_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(uint32_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((uint32_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(uint32_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((uint32_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((uint32_t) 1) << (sizeof(uint32_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (uint32_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to uint32_t");
    return (uint32_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to uint32_t");
    return (uint32_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_uint8_t(uint8_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const uint8_t neg_one = (uint8_t) -1, const_zero = (uint8_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(uint8_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(uint8_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(uint8_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(uint8_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(uint8_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(uint8_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(uint8_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_hb_ot_name_id_t(hb_ot_name_id_t value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_name_id_t neg_one = (hb_ot_name_id_t) -1, const_zero = (hb_ot_name_id_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(hb_ot_name_id_t) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_name_id_t) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(hb_ot_name_id_t) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(hb_ot_name_id_t) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(hb_ot_name_id_t) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(hb_ot_name_id_t),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(hb_ot_name_id_t));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE hb_ot_name_id_t __Pyx_PyLong_As_hb_ot_name_id_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_name_id_t neg_one = (hb_ot_name_id_t) -1, const_zero = (hb_ot_name_id_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_ot_name_id_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_ot_name_id_t) -1;
        val = __Pyx_PyLong_As_hb_ot_name_id_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_ot_name_id_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((((hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_name_id_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((((((hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_name_id_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((((((((hb_ot_name_id_t)digits[3]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_ot_name_id_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_ot_name_id_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_name_id_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_ot_name_id_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_name_id_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_ot_name_id_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((hb_ot_name_id_t)-1)*(((((hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_ot_name_id_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) ((((((hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_ot_name_id_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((hb_ot_name_id_t)-1)*(((((((hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_name_id_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) ((((((((hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_ot_name_id_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) (((hb_ot_name_id_t)-1)*(((((((((hb_ot_name_id_t)digits[3]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_name_id_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_name_id_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_name_id_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_name_id_t) ((((((((((hb_ot_name_id_t)digits[3]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[2]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[1]) << PyLong_SHIFT) | (hb_ot_name_id_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_ot_name_id_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_name_id_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_ot_name_id_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_name_id_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_ot_name_id_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (hb_ot_name_id_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (hb_ot_name_id_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (hb_ot_name_id_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (hb_ot_name_id_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(hb_ot_name_id_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((hb_ot_name_id_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(hb_ot_name_id_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((hb_ot_name_id_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((hb_ot_name_id_t) 1) << (sizeof(hb_ot_name_id_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (hb_ot_name_id_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_ot_name_id_t");
    return (hb_ot_name_id_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_ot_name_id_t");
    return (hb_ot_name_id_t) -1;
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_int(int value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const int neg_one = (int) -1, const_zero = (int) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(int));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_long(long value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const long neg_one = (long) -1, const_zero = (long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
        }
    }
    {
        unsigned char *bytes = (unsigned char *)&value;
#if !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d00A4
        if (is_unsigned) {
            return PyLong_FromUnsignedNativeBytes(bytes, sizeof(value), -1);
        } else {
            return PyLong_FromNativeBytes(bytes, sizeof(value), -1);
        }
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX < 0x030d0000
        int one = 1; int little = (int)*(unsigned char *)&one;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
#else
        int one = 1; int little = (int)*(unsigned char *)&one;
        PyObject *from_bytes, *result = NULL, *kwds = NULL;
        PyObject *py_bytes = NULL, *order_str = NULL;
        from_bytes = PyObject_GetAttrString((PyObject*)&PyLong_Type, "from_bytes");
        if (!from_bytes) return NULL;
        py_bytes = PyBytes_FromStringAndSize((char*)bytes, sizeof(long));
        if (!py_bytes) goto limited_bad;
        order_str = PyUnicode_FromString(little ? "little" : "big");
        if (!order_str) goto limited_bad;
        {
            PyObject *args[3+(CYTHON_VECTORCALL ? 1 : 0)] = { NULL, py_bytes, order_str };
            if (!is_unsigned) {
                kwds = __Pyx_MakeVectorcallBuilderKwds(1);
                if (!kwds) goto limited_bad;
                if (__Pyx_VectorcallBuilder_AddArgStr("signed", __Pyx_NewRef(Py_True), kwds, args+3, 0) < 0) goto limited_bad;
            }
            result = __Pyx_Object_Vectorcall_CallFromBuilder(from_bytes, args+1, 2 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET, kwds);
        }
        limited_bad:
        Py_XDECREF(kwds);
        Py_XDECREF(order_str);
        Py_XDECREF(py_bytes);
        Py_XDECREF(from_bytes);
        return result;
#endif
    }
}

/* CIntFromPy */
static CYTHON_INLINE hb_bool_t __Pyx_PyLong_As_hb_bool_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_bool_t neg_one = (hb_bool_t) -1, const_zero = (hb_bool_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_bool_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_bool_t) -1;
        val = __Pyx_PyLong_As_hb_bool_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_bool_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_bool_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((((hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_bool_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((((((hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_bool_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((((((((hb_bool_t)digits[3]) << PyLong_SHIFT) | (hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_bool_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_bool_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_bool_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_bool_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_bool_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_bool_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_bool_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((hb_bool_t)-1)*(((((hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_bool_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_bool_t) ((((((hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_bool_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((hb_bool_t)-1)*(((((((hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_bool_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_bool_t) ((((((((hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_bool_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_bool_t) (((hb_bool_t)-1)*(((((((((hb_bool_t)digits[3]) << PyLong_SHIFT) | (hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_bool_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_bool_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_bool_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_bool_t) ((((((((((hb_bool_t)digits[3]) << PyLong_SHIFT) | (hb_bool_t)digits[2]) << PyLong_SHIFT) | (hb_bool_t)digits[1]) << PyLong_SHIFT) | (hb_bool_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_bool_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_bool_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_bool_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_bool_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_bool_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (hb_bool_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (hb_bool_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (hb_bool_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (hb_bool_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(hb_bool_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((hb_bool_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(hb_bool_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((hb_bool_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((hb_bool_t) 1) << (sizeof(hb_bool_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (hb_bool_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_bool_t");
    return (hb_bool_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_bool_t");
    return (hb_bool_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_ot_math_constant_t __Pyx_PyLong_As_hb_ot_math_constant_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_math_constant_t neg_one = (hb_ot_math_constant_t) -1, const_zero = (hb_ot_math_constant_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_ot_math_constant_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_ot_math_constant_t) -1;
        val = __Pyx_PyLong_As_hb_ot_math_constant_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((((hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((((((hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((((((((hb_ot_math_constant_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_ot_math_constant_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_ot_math_constant_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_constant_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_ot_math_constant_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_constant_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((hb_ot_math_constant_t)-1)*(((((hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) ((((((hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((hb_ot_math_constant_t)-1)*(((((((hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) ((((((((hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) (((hb_ot_math_constant_t)-1)*(((((((((hb_ot_math_constant_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_math_constant_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_constant_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_constant_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_constant_t) ((((((((((hb_ot_math_constant_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_constant_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_ot_math_constant_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_constant_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_ot_math_constant_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_constant_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_ot_math_constant_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_ot_math_constant_t) -1;
#endif
        if (unlikely(ret))
            return (hb_ot_math_constant_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_ot_math_constant_t");
    return (hb_ot_math_constant_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_ot_math_constant_t");
    return (hb_ot_math_constant_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_ot_math_kern_t __Pyx_PyLong_As_hb_ot_math_kern_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_math_kern_t neg_one = (hb_ot_math_kern_t) -1, const_zero = (hb_ot_math_kern_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_ot_math_kern_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_ot_math_kern_t) -1;
        val = __Pyx_PyLong_As_hb_ot_math_kern_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((((hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((((((hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((((((((hb_ot_math_kern_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_ot_math_kern_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_ot_math_kern_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_kern_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_ot_math_kern_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_kern_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((hb_ot_math_kern_t)-1)*(((((hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) ((((((hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((hb_ot_math_kern_t)-1)*(((((((hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) ((((((((hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) (((hb_ot_math_kern_t)-1)*(((((((((hb_ot_math_kern_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_math_kern_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_math_kern_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_math_kern_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_math_kern_t) ((((((((((hb_ot_math_kern_t)digits[3]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[2]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[1]) << PyLong_SHIFT) | (hb_ot_math_kern_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_ot_math_kern_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_kern_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_ot_math_kern_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_math_kern_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_ot_math_kern_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_ot_math_kern_t) -1;
#endif
        if (unlikely(ret))
            return (hb_ot_math_kern_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_ot_math_kern_t");
    return (hb_ot_math_kern_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_ot_math_kern_t");
    return (hb_ot_math_kern_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_position_t __Pyx_PyLong_As_hb_position_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_position_t neg_one = (hb_position_t) -1, const_zero = (hb_position_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_position_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_position_t) -1;
        val = __Pyx_PyLong_As_hb_position_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_position_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_position_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_position_t) (((((hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_position_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_position_t) (((((((hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_position_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_position_t) (((((((((hb_position_t)digits[3]) << PyLong_SHIFT) | (hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_position_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_position_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_position_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_position_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_position_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_position_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_position_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_position_t) (((hb_position_t)-1)*(((((hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_position_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_position_t) ((((((hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_position_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_position_t) (((hb_position_t)-1)*(((((((hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_position_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_position_t) ((((((((hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_position_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_position_t) (((hb_position_t)-1)*(((((((((hb_position_t)digits[3]) << PyLong_SHIFT) | (hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_position_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_position_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_position_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_position_t) ((((((((((hb_position_t)digits[3]) << PyLong_SHIFT) | (hb_position_t)digits[2]) << PyLong_SHIFT) | (hb_position_t)digits[1]) << PyLong_SHIFT) | (hb_position_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_position_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_position_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_position_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_position_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_position_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (hb_position_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (hb_position_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (hb_position_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (hb_position_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(hb_position_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((hb_position_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(hb_position_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((hb_position_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((hb_position_t) 1) << (sizeof(hb_position_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (hb_position_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_position_t");
    return (hb_position_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_position_t");
    return (hb_position_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_ot_metrics_tag_t __Pyx_PyLong_As_hb_ot_metrics_tag_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_ot_metrics_tag_t neg_one = (hb_ot_metrics_tag_t) -1, const_zero = (hb_ot_metrics_tag_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_ot_metrics_tag_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_ot_metrics_tag_t) -1;
        val = __Pyx_PyLong_As_hb_ot_metrics_tag_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((((hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((((((hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((((((((hb_ot_metrics_tag_t)digits[3]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_ot_metrics_tag_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_ot_metrics_tag_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_metrics_tag_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_ot_metrics_tag_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_metrics_tag_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((hb_ot_metrics_tag_t)-1)*(((((hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) ((((((hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((hb_ot_metrics_tag_t)-1)*(((((((hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) ((((((((hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) (((hb_ot_metrics_tag_t)-1)*(((((((((hb_ot_metrics_tag_t)digits[3]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_ot_metrics_tag_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_ot_metrics_tag_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_ot_metrics_tag_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_ot_metrics_tag_t) ((((((((((hb_ot_metrics_tag_t)digits[3]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[2]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[1]) << PyLong_SHIFT) | (hb_ot_metrics_tag_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_ot_metrics_tag_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_metrics_tag_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_ot_metrics_tag_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_ot_metrics_tag_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_ot_metrics_tag_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_ot_metrics_tag_t) -1;
#endif
        if (unlikely(ret))
            return (hb_ot_metrics_tag_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_ot_metrics_tag_t");
    return (hb_ot_metrics_tag_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_ot_metrics_tag_t");
    return (hb_ot_metrics_tag_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_style_tag_t __Pyx_PyLong_As_hb_style_tag_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_style_tag_t neg_one = (hb_style_tag_t) -1, const_zero = (hb_style_tag_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_style_tag_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_style_tag_t) -1;
        val = __Pyx_PyLong_As_hb_style_tag_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_style_tag_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((((hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_style_tag_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((((((hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_style_tag_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((((((((hb_style_tag_t)digits[3]) << PyLong_SHIFT) | (hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_style_tag_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_style_tag_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_style_tag_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_style_tag_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_style_tag_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_style_tag_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((hb_style_tag_t)-1)*(((((hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_style_tag_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) ((((((hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_style_tag_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((hb_style_tag_t)-1)*(((((((hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_style_tag_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) ((((((((hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_style_tag_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) (((hb_style_tag_t)-1)*(((((((((hb_style_tag_t)digits[3]) << PyLong_SHIFT) | (hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_style_tag_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_style_tag_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_style_tag_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_style_tag_t) ((((((((((hb_style_tag_t)digits[3]) << PyLong_SHIFT) | (hb_style_tag_t)digits[2]) << PyLong_SHIFT) | (hb_style_tag_t)digits[1]) << PyLong_SHIFT) | (hb_style_tag_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_style_tag_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_style_tag_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_style_tag_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_style_tag_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_style_tag_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_style_tag_t) -1;
#endif
        if (unlikely(ret))
            return (hb_style_tag_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_style_tag_t");
    return (hb_style_tag_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_style_tag_t");
    return (hb_style_tag_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE char __Pyx_PyLong_As_char(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const char neg_one = (char) -1, const_zero = (char) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        char val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (char) -1;
        val = __Pyx_PyLong_As_char(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) >= 2 * PyLong_SHIFT)) {
                            return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) >= 3 * PyLong_SHIFT)) {
                            return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) >= 4 * PyLong_SHIFT)) {
                            return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (char) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(char) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(char) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(char, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(char) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
                            return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(char) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
                            return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(char) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
                            return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(char) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
                            return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(char) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
                            return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(char) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(char) - 1 > 4 * PyLong_SHIFT)) {
                            return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(char) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
        } else if ((sizeof(char) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        char val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (char) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (char) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (char) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (char) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(char) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((char) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(char) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((char) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((char) 1) << (sizeof(char) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (char) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to char");
    return (char) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to char");
    return (char) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_raster_format_t __Pyx_PyLong_As_hb_raster_format_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_raster_format_t neg_one = (hb_raster_format_t) -1, const_zero = (hb_raster_format_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_raster_format_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_raster_format_t) -1;
        val = __Pyx_PyLong_As_hb_raster_format_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_raster_format_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((((hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_raster_format_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((((((hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_raster_format_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((((((((hb_raster_format_t)digits[3]) << PyLong_SHIFT) | (hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_raster_format_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_raster_format_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_raster_format_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_raster_format_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_raster_format_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_raster_format_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((hb_raster_format_t)-1)*(((((hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_raster_format_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) ((((((hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_raster_format_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((hb_raster_format_t)-1)*(((((((hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_raster_format_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) ((((((((hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_raster_format_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) (((hb_raster_format_t)-1)*(((((((((hb_raster_format_t)digits[3]) << PyLong_SHIFT) | (hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_raster_format_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_raster_format_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_raster_format_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_raster_format_t) ((((((((((hb_raster_format_t)digits[3]) << PyLong_SHIFT) | (hb_raster_format_t)digits[2]) << PyLong_SHIFT) | (hb_raster_format_t)digits[1]) << PyLong_SHIFT) | (hb_raster_format_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_raster_format_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_raster_format_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_raster_format_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_raster_format_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_raster_format_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_raster_format_t) -1;
#endif
        if (unlikely(ret))
            return (hb_raster_format_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_raster_format_t");
    return (hb_raster_format_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_raster_format_t");
    return (hb_raster_format_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE size_t __Pyx_PyLong_As_size_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const size_t neg_one = (size_t) -1, const_zero = (size_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        size_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (size_t) -1;
        val = __Pyx_PyLong_As_size_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(size_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 2 * PyLong_SHIFT)) {
                            return (size_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 3 * PyLong_SHIFT)) {
                            return (size_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) >= 4 * PyLong_SHIFT)) {
                            return (size_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (size_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(size_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(size_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(size_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(size_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (size_t) ((((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(size_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(size_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (size_t) ((((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(size_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) (((size_t)-1)*(((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(size_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(size_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(size_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (size_t) ((((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(size_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
        } else if ((sizeof(size_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        size_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (size_t) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (size_t) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (size_t) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (size_t) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(size_t) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((size_t) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(size_t) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((size_t) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((size_t) 1) << (sizeof(size_t) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (size_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to size_t");
    return (size_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to size_t");
    return (size_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE hb_subset_sets_t __Pyx_PyLong_As_hb_subset_sets_t(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const hb_subset_sets_t neg_one = (hb_subset_sets_t) -1, const_zero = (hb_subset_sets_t) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        hb_subset_sets_t val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (hb_subset_sets_t) -1;
        val = __Pyx_PyLong_As_hb_subset_sets_t(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(hb_subset_sets_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) >= 2 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((((hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_subset_sets_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) >= 3 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((((((hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_subset_sets_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) >= 4 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((((((((hb_subset_sets_t)digits[3]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (hb_subset_sets_t) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(hb_subset_sets_t) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_subset_sets_t, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(hb_subset_sets_t) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_subset_sets_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(hb_subset_sets_t) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((hb_subset_sets_t)-1)*(((((hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(hb_subset_sets_t) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 2 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) ((((((hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(hb_subset_sets_t) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((hb_subset_sets_t)-1)*(((((((hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(hb_subset_sets_t) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 3 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) ((((((((hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(hb_subset_sets_t) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) (((hb_subset_sets_t)-1)*(((((((((hb_subset_sets_t)digits[3]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(hb_subset_sets_t) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(hb_subset_sets_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(hb_subset_sets_t) - 1 > 4 * PyLong_SHIFT)) {
                            return (hb_subset_sets_t) ((((((((((hb_subset_sets_t)digits[3]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[2]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[1]) << PyLong_SHIFT) | (hb_subset_sets_t)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(hb_subset_sets_t) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_subset_sets_t, long, PyLong_AsLong(x))
        } else if ((sizeof(hb_subset_sets_t) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(hb_subset_sets_t, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        hb_subset_sets_t val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyErr_SetString(PyExc_RuntimeError,
                        "_PyLong_AsByteArray() or PyLong_AsNativeBytes() not available, cannot convert large enums");
        val = (hb_subset_sets_t) -1;
#endif
        if (unlikely(ret))
            return (hb_subset_sets_t) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to hb_subset_sets_t");
    return (hb_subset_sets_t) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to hb_subset_sets_t");
    return (hb_subset_sets_t) -1;
}

/* CIntFromPy */
static CYTHON_INLINE unsigned long __Pyx_PyLong_As_unsigned_long(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned long neg_one = (unsigned long) -1, const_zero = (unsigned long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        unsigned long val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (unsigned long) -1;
        val = __Pyx_PyLong_As_unsigned_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) >= 2 * PyLong_SHIFT)) {
                            return (unsigned long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) >= 3 * PyLong_SHIFT)) {
                            return (unsigned long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) >= 4 * PyLong_SHIFT)) {
                            return (unsigned long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (unsigned long) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(unsigned long) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(unsigned long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(unsigned long) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned long) (((unsigned long)-1)*(((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(unsigned long) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) {
                            return (unsigned long) ((((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(unsigned long) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned long) (((unsigned long)-1)*(((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) {
                            return (unsigned long) ((((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(unsigned long) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned long) (((unsigned long)-1)*(((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(unsigned long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(unsigned long) - 1 > 4 * PyLong_SHIFT)) {
                            return (unsigned long) ((((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(unsigned long) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x))
        } else if ((sizeof(unsigned long) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        unsigned long val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (unsigned long) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (unsigned long) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (unsigned long) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (unsigned long) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(unsigned long) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((unsigned long) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(unsigned long) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((unsigned long) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((unsigned long) 1) << (sizeof(unsigned long) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (unsigned long) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to unsigned long");
    return (unsigned long) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to unsigned long");
    return (unsigned long) -1;
}

/* FormatTypeName */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030d0000
static __Pyx_TypeName
__Pyx_PyType_GetFullyQualifiedName(PyTypeObject* tp)
{
    PyObject *module = NULL, *name = NULL, *result = NULL;
    #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
    name = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_mstate_global->__pyx_n_u_qualname);
    #else
    name = PyType_GetQualName(tp);
    #endif
    if (unlikely(name == NULL) || unlikely(!PyUnicode_Check(name))) goto bad;
    module = __Pyx_PyObject_GetAttrStr((PyObject *)tp,
                                               __pyx_mstate_global->__pyx_n_u_module);
    if (unlikely(module == NULL) || unlikely(!PyUnicode_Check(module))) goto bad;
    if (PyUnicode_CompareWithASCIIString(module, "builtins") == 0) {
        result = name;
        name = NULL;
        goto done;
    }
    result = PyUnicode_FromFormat("%U.%U", module, name);
    if (unlikely(result == NULL)) goto bad;
  done:
    Py_XDECREF(name);
    Py_XDECREF(module);
    return result;
  bad:
    PyErr_Clear();
    if (name) {
        result = name;
        name = NULL;
    } else {
        result = __Pyx_NewRef(__pyx_mstate_global->__pyx_kp_u__11);
    }
    goto done;
}
#endif

/* CIntFromPy */
static CYTHON_INLINE long __Pyx_PyLong_As_long(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const long neg_one = (long) -1, const_zero = (long) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        long val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyLong_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
    if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
        if (unlikely(__Pyx_PyLong_IsNeg(x))) {
            goto raise_neg_overflow;
        } else if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_upylong, __Pyx_PyLong_CompactValueUnsigned(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_DigitCount(x)) {
                case 2:
                    if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) >= 2 * PyLong_SHIFT)) {
                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) >= 3 * PyLong_SHIFT)) {
                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) >= 4 * PyLong_SHIFT)) {
                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
            }
        }
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A7
        if (unlikely(Py_SIZE(x) < 0)) {
            goto raise_neg_overflow;
        }
#else
        {
            int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
            if (unlikely(result < 0))
                return (long) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(long) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(long) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(long, __Pyx_compact_pylong, __Pyx_PyLong_CompactValue(x))
        } else {
            const digit* digits = __Pyx_PyLong_Digits(x);
            assert(__Pyx_PyLong_DigitCount(x) > 1);
            switch (__Pyx_PyLong_SignedDigitCount(x)) {
                case -2:
                    if ((8 * sizeof(long) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(long) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(long) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(long) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(long) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(long) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(long) - 1 > 4 * PyLong_SHIFT)) {
                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(long) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
        } else if ((sizeof(long) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        long val;
        int ret = -1;
#if PY_VERSION_HEX >= 0x030d00A6 && !CYTHON_COMPILING_IN_LIMITED_API
        Py_ssize_t bytes_copied = PyLong_AsNativeBytes(
            x, &val, sizeof(val), Py_ASNATIVEBYTES_NATIVE_ENDIAN | (is_unsigned ? Py_ASNATIVEBYTES_UNSIGNED_BUFFER | Py_ASNATIVEBYTES_REJECT_NEGATIVE : 0));
        if (unlikely(bytes_copied == -1)) {
        } else if (unlikely(bytes_copied > (Py_ssize_t) sizeof(val))) {
            goto raise_overflow;
        } else {
            ret = 0;
        }
#elif PY_VERSION_HEX < 0x030d0000 && !(CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API) || defined(_PyLong_AsByteArray)
        int one = 1; int is_little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&val;
        ret = _PyLong_AsByteArray((PyLongObject *)x,
                                    bytes, sizeof(val),
                                    is_little, !is_unsigned);
#else
        PyObject *v;
        PyObject *stepval = NULL, *mask = NULL, *shift = NULL;
        int bits, remaining_bits, is_negative = 0;
        int chunk_size = (sizeof(long) < 8) ? 30 : 62;
        if (likely(PyLong_CheckExact(x))) {
            v = __Pyx_NewRef(x);
        } else {
            v = PyNumber_Long(x);
            if (unlikely(!v)) return (long) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (long) -1;
            }
            is_negative = result == 1;
        }
        if (is_unsigned && unlikely(is_negative)) {
            Py_DECREF(v);
            goto raise_neg_overflow;
        } else if (is_negative) {
            stepval = PyNumber_Invert(v);
            Py_DECREF(v);
            if (unlikely(!stepval))
                return (long) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (long) 0;
        mask = PyLong_FromLong((1L << chunk_size) - 1); if (unlikely(!mask)) goto done;
        shift = PyLong_FromLong(chunk_size); if (unlikely(!shift)) goto done;
        for (bits = 0; bits < (int) sizeof(long) * 8 - chunk_size; bits += chunk_size) {
            PyObject *tmp, *digit;
            long idigit;
            digit = PyNumber_And(stepval, mask);
            if (unlikely(!digit)) goto done;
            idigit = PyLong_AsLong(digit);
            Py_DECREF(digit);
            if (unlikely(idigit < 0)) goto done;
            val |= ((long) idigit) << bits;
            tmp = PyNumber_Rshift(stepval, shift);
            if (unlikely(!tmp)) goto done;
            Py_DECREF(stepval); stepval = tmp;
        }
        Py_DECREF(shift); shift = NULL;
        Py_DECREF(mask); mask = NULL;
        {
            long idigit = PyLong_AsLong(stepval);
            if (unlikely(idigit < 0)) goto done;
            remaining_bits = ((int) sizeof(long) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((long) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((long) 1) << (sizeof(long) * 8 - 1))))
                goto raise_overflow;
            if (is_negative)
                val = ~val;
        }
        ret = 0;
    done:
        Py_XDECREF(shift);
        Py_XDECREF(mask);
        Py_XDECREF(stepval);
#endif
        if (unlikely(ret))
            return (long) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to long");
    return (long) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to long");
    return (long) -1;
}

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = __Pyx_PyType_GetSlot(a, tp_base, PyTypeObject*);
        if (a == b)
            return 1;
    }
    return b == &PyBaseObject_Type;
}
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (a == b) return 1;
    mro = a->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(a, b);
}
static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (cls == a || cls == b) return 1;
    mro = cls->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            PyObject *base = PyTuple_GET_ITEM(mro, i);
            if (base == (PyObject *)a || base == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(cls, a) || __Pyx_InBases(cls, b);
}
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
    if (exc_type1) {
        return __Pyx_IsAnySubtype2((PyTypeObject*)err, (PyTypeObject*)exc_type1, (PyTypeObject*)exc_type2);
    } else {
        return __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
}
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    assert(PyExceptionClass_Check(exc_type));
    n = PyTuple_GET_SIZE(tuple);
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        if (likely(PyExceptionClass_Check(t))) {
            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
        } else {
        }
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
    if (likely(err == exc_type)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        if (likely(PyExceptionClass_Check(exc_type))) {
            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
        } else if (likely(PyTuple_Check(exc_type))) {
            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
        } else {
        }
    }
    return PyErr_GivenExceptionMatches(err, exc_type);
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
    assert(PyExceptionClass_Check(exc_type1));
    assert(PyExceptionClass_Check(exc_type2));
    if (likely(err == exc_type1 || err == exc_type2)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
    }
    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
}
#endif

/* GetRuntimeVersion */
#if __PYX_LIMITED_VERSION_HEX < 0x030b0000
void __Pyx_init_runtime_version(void) {
    if (__Pyx_cached_runtime_version == 0) {
        const char* rt_version = Py_GetVersion();
        unsigned long version = 0;
        unsigned long factor = 0x01000000UL;
        unsigned int digit = 0;
        int i = 0;
        while (factor) {
            while ('0' <= rt_version[i] && rt_version[i] <= '9') {
                digit = digit * 10 + (unsigned int) (rt_version[i] - '0');
                ++i;
            }
            version += factor * digit;
            if (rt_version[i] != '.')
                break;
            digit = 0;
            factor >>= 8;
            ++i;
        }
        __Pyx_cached_runtime_version = version;
    }
}
#endif
static unsigned long __Pyx_get_runtime_version(void) {
#if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
    return Py_Version & ~0xFFUL;
#else
    return __Pyx_cached_runtime_version;
#endif
}

/* IterNextPlain (used by CoroutineBase) */
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
static PyObject *__Pyx_GetBuiltinNext_LimitedAPI(void) {
    if (unlikely(!__pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache))
        __pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache = __Pyx_GetBuiltinName(__pyx_mstate_global->__pyx_n_u_next);
    return __pyx_mstate_global->__Pyx_GetBuiltinNext_LimitedAPI_cache;
}
#endif
static CYTHON_INLINE PyObject *__Pyx_PyIter_Next_Plain(PyObject *iterator) {
#if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
    PyObject *result;
    PyObject *next = __Pyx_GetBuiltinNext_LimitedAPI();
    if (unlikely(!next)) return NULL;
    result = PyObject_CallFunctionObjArgs(next, iterator, NULL);
    return result;
#else
    (void)__Pyx_GetBuiltinName; // only for early limited API
    iternextfunc iternext = __Pyx_PyObject_GetIterNextFunc(iterator);
    assert(iternext);
    return iternext(iterator);
#endif
}

/* ReturnWithStopIteration (used by CoroutineBase) */
static void __Pyx__ReturnWithStopIteration(PyObject* value, int async);
static CYTHON_INLINE void __Pyx_ReturnWithStopIteration(PyObject* value, int async, int iternext) {
    if (value == Py_None) {
        if (async || !iternext)
            PyErr_SetNone(async ? PyExc_StopAsyncIteration : PyExc_StopIteration);
        return;
    }
    __Pyx__ReturnWithStopIteration(value, async);
}
static void __Pyx__ReturnWithStopIteration(PyObject* value, int async) {
#if CYTHON_COMPILING_IN_CPYTHON
    __Pyx_PyThreadState_declare
#endif
    PyObject *exc;
    PyObject *exc_type = async ? PyExc_StopAsyncIteration : PyExc_StopIteration;
#if CYTHON_COMPILING_IN_CPYTHON
    if ((PY_VERSION_HEX >= (0x030C00A6)) || unlikely(PyTuple_Check(value) || PyExceptionInstance_Check(value))) {
        if (PY_VERSION_HEX >= (0x030e00A1)) {
            exc = __Pyx_PyObject_CallOneArg(exc_type, value);
        } else {
            PyObject *args_tuple = PyTuple_New(1);
            if (unlikely(!args_tuple)) return;
            Py_INCREF(value);
            PyTuple_SET_ITEM(args_tuple, 0, value);
            exc = PyObject_Call(exc_type, args_tuple, NULL);
            Py_DECREF(args_tuple);
        }
        if (unlikely(!exc)) return;
    } else {
        Py_INCREF(value);
        exc = value;
    }
    #if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    #if CYTHON_USE_EXC_INFO_STACK
    if (!__pyx_tstate->exc_info->exc_value)
    #else
    if (!__pyx_tstate->exc_type)
    #endif
    {
        Py_INCREF(exc_type);
        __Pyx_ErrRestore(exc_type, exc, NULL);
        return;
    }
    #endif
#else
    exc = __Pyx_PyObject_CallOneArg(exc_type, value);
    if (unlikely(!exc)) return;
#endif
    PyErr_SetObject(exc_type, exc);
    Py_DECREF(exc);
}

/* CoroutineBase (used by Generator) */
#if !CYTHON_COMPILING_IN_LIMITED_API
#include <frameobject.h>
#if PY_VERSION_HEX >= 0x030b00a6 && !defined(PYPY_VERSION)
  #ifndef Py_BUILD_CORE
    #define Py_BUILD_CORE 1
  #endif
  #include "internal/pycore_frame.h"
#endif
#endif // CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE void
__Pyx_Coroutine_Undelegate(__pyx_CoroutineObject *gen) {
#if CYTHON_USE_AM_SEND
    gen->yieldfrom_am_send = NULL;
#endif
    Py_CLEAR(gen->yieldfrom);
}
static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *__pyx_tstate, PyObject **pvalue) {
    PyObject *et, *ev, *tb;
    PyObject *value = NULL;
    CYTHON_UNUSED_VAR(__pyx_tstate);
    __Pyx_ErrFetch(&et, &ev, &tb);
    if (!et) {
        Py_XDECREF(tb);
        Py_XDECREF(ev);
        Py_INCREF(Py_None);
        *pvalue = Py_None;
        return 0;
    }
    if (likely(et == PyExc_StopIteration)) {
        if (!ev) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
        else if (likely(__Pyx_IS_TYPE(ev, (PyTypeObject*)PyExc_StopIteration))) {
            #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL
            value = PyObject_GetAttr(ev, __pyx_mstate_global->__pyx_n_u_value);
            if (unlikely(!value)) goto limited_api_failure;
            #else
            value = ((PyStopIterationObject *)ev)->value;
            Py_INCREF(value);
            #endif
            Py_DECREF(ev);
        }
        else if (unlikely(PyTuple_Check(ev))) {
            Py_ssize_t tuple_size = __Pyx_PyTuple_GET_SIZE(ev);
            #if !CYTHON_ASSUME_SAFE_SIZE
            if (unlikely(tuple_size < 0)) {
                Py_XDECREF(tb);
                Py_DECREF(ev);
                Py_DECREF(et);
                return -1;
            }
            #endif
            if (tuple_size >= 1) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                value = PyTuple_GET_ITEM(ev, 0);
                Py_INCREF(value);
#elif CYTHON_ASSUME_SAFE_MACROS
                value = PySequence_ITEM(ev, 0);
#else
                value = PySequence_GetItem(ev, 0);
                if (!value) goto limited_api_failure;
#endif
            } else {
                Py_INCREF(Py_None);
                value = Py_None;
            }
            Py_DECREF(ev);
        }
        else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
            value = ev;
        }
        if (likely(value)) {
            Py_XDECREF(tb);
            Py_DECREF(et);
            *pvalue = value;
            return 0;
        }
    } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    PyErr_NormalizeException(&et, &ev, &tb);
    if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    Py_XDECREF(tb);
    Py_DECREF(et);
#if CYTHON_COMPILING_IN_LIMITED_API
    value = PyObject_GetAttr(ev, __pyx_mstate_global->__pyx_n_u_value);
#else
    value = ((PyStopIterationObject *)ev)->value;
    Py_INCREF(value);
#endif
    Py_DECREF(ev);
#if CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(!value)) return -1;
#endif
    *pvalue = value;
    return 0;
#if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_GRAAL || !CYTHON_ASSUME_SAFE_MACROS
  limited_api_failure:
    Py_XDECREF(et);
    Py_XDECREF(tb);
    Py_XDECREF(ev);
    return -1;
#endif
}
static CYTHON_INLINE
__Pyx_PySendResult __Pyx_Coroutine_status_from_result(PyObject **retval) {
    if (*retval) {
        return PYGEN_NEXT;
    } else if (likely(__Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, retval) == 0)) {
        return PYGEN_RETURN;
    } else {
        return PYGEN_ERROR;
    }
}
static CYTHON_INLINE
void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
#if PY_VERSION_HEX >= 0x030B00a4
    Py_CLEAR(exc_state->exc_value);
#else
    PyObject *t, *v, *tb;
    t = exc_state->exc_type;
    v = exc_state->exc_value;
    tb = exc_state->exc_traceback;
    exc_state->exc_type = NULL;
    exc_state->exc_value = NULL;
    exc_state->exc_traceback = NULL;
    Py_XDECREF(t);
    Py_XDECREF(v);
    Py_XDECREF(tb);
#endif
}
#define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyRunningError(__pyx_CoroutineObject *gen) {
    const char *msg;
    CYTHON_MAYBE_UNUSED_VAR(gen);
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
        msg = "coroutine already executing";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
        msg = "async generator already executing";
    #endif
    } else {
        msg = "generator already executing";
    }
    PyErr_SetString(PyExc_ValueError, msg);
}
static void __Pyx_Coroutine_AlreadyTerminatedError(PyObject *gen, PyObject *value, int closing) {
    CYTHON_MAYBE_UNUSED_VAR(gen);
    CYTHON_MAYBE_UNUSED_VAR(closing);
    #ifdef __Pyx_Coroutine_USED
    if (!closing && __Pyx_Coroutine_Check(gen)) {
        PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
    } else
    #endif
    if (value) {
        #ifdef __Pyx_AsyncGen_USED
        if (__Pyx_AsyncGen_CheckExact(gen))
            PyErr_SetNone(PyExc_StopAsyncIteration);
        else
        #endif
        PyErr_SetNone(PyExc_StopIteration);
    }
}
static
__Pyx_PySendResult __Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, PyObject **result, int closing) {
    __Pyx_PyThreadState_declare
    PyThreadState *tstate;
    __Pyx_ExcInfoStruct *exc_state;
    PyObject *retval;
    assert(__Pyx_Coroutine_get_is_running(self));  // Callers should ensure is_running
    if (unlikely(self->resume_label == -1)) {
        __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
        return PYGEN_ERROR;
    }
#if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    tstate = __pyx_tstate;
#else
    tstate = __Pyx_PyThreadState_Current;
#endif
    exc_state = &self->gi_exc_state;
    if (exc_state->exc_value) {
        #if CYTHON_COMPILING_IN_LIMITED_API || CYTHON_COMPILING_IN_PYPY
        #else
        PyObject *exc_tb;
        #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON
        exc_tb = PyException_GetTraceback(exc_state->exc_value);
        #elif PY_VERSION_HEX >= 0x030B00a4
        exc_tb = ((PyBaseExceptionObject*) exc_state->exc_value)->traceback;
        #else
        exc_tb = exc_state->exc_traceback;
        #endif
        if (exc_tb) {
            PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
            PyFrameObject *f = tb->tb_frame;
            assert(f->f_back == NULL);
            #if PY_VERSION_HEX >= 0x030B00A1
            f->f_back = PyThreadState_GetFrame(tstate);
            #else
            Py_XINCREF(tstate->frame);
            f->f_back = tstate->frame;
            #endif
            #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_CPYTHON
            Py_DECREF(exc_tb);
            #endif
        }
        #endif
    }
#if CYTHON_USE_EXC_INFO_STACK
    exc_state->previous_item = tstate->exc_info;
    tstate->exc_info = exc_state;
#else
    if (exc_state->exc_type) {
        __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    } else {
        __Pyx_Coroutine_ExceptionClear(exc_state);
        __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    }
#endif
    retval = self->body(self, tstate, value);
#if CYTHON_USE_EXC_INFO_STACK
    exc_state = &self->gi_exc_state;
    tstate->exc_info = exc_state->previous_item;
    exc_state->previous_item = NULL;
    __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
#endif
    *result = retval;
    if (self->resume_label == -1) {
        return likely(retval) ? PYGEN_RETURN : PYGEN_ERROR;
    }
    return PYGEN_NEXT;
}
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_LIMITED_API
    CYTHON_UNUSED_VAR(exc_state);
#else
    PyObject *exc_tb;
    #if PY_VERSION_HEX >= 0x030B00a4
    if (!exc_state->exc_value) return;
    exc_tb = PyException_GetTraceback(exc_state->exc_value);
    #else
    exc_tb = exc_state->exc_traceback;
    #endif
    if (likely(exc_tb)) {
        PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
        PyFrameObject *f = tb->tb_frame;
        Py_CLEAR(f->f_back);
        #if PY_VERSION_HEX >= 0x030B00a4
        Py_DECREF(exc_tb);
        #endif
    }
#endif
}
#define __Pyx_Coroutine_MethodReturnFromResult(gen, result, retval, iternext)\
    ((result) == PYGEN_NEXT ? (retval) : __Pyx__Coroutine_MethodReturnFromResult(gen, result, retval, iternext))
static PyObject *
__Pyx__Coroutine_MethodReturnFromResult(PyObject* gen, __Pyx_PySendResult result, PyObject *retval, int iternext) {
    CYTHON_MAYBE_UNUSED_VAR(gen);
    if (likely(result == PYGEN_RETURN)) {
        int is_async = 0;
        #ifdef __Pyx_AsyncGen_USED
        is_async = __Pyx_AsyncGen_CheckExact(gen);
        #endif
        __Pyx_ReturnWithStopIteration(retval, is_async, iternext);
        Py_XDECREF(retval);
    }
    return NULL;
}
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE
PyObject *__Pyx_PyGen_Send(PyGenObject *gen, PyObject *arg) {
#if PY_VERSION_HEX <= 0x030A00A1
    return _PyGen_Send(gen, arg);
#else
    PyObject *result;
    if (PyIter_Send((PyObject*)gen, arg ? arg : Py_None, &result) == PYGEN_RETURN) {
        if (PyAsyncGen_CheckExact(gen)) {
            assert(result == Py_None);
            PyErr_SetNone(PyExc_StopAsyncIteration);
        }
        else if (result == Py_None) {
            PyErr_SetNone(PyExc_StopIteration);
        }
        else {
#if PY_VERSION_HEX < 0x030d00A1
            _PyGen_SetStopIterationValue(result);
#else
            if (!PyTuple_Check(result) && !PyExceptionInstance_Check(result)) {
                PyErr_SetObject(PyExc_StopIteration, result);
            } else {
                PyObject *exc = __Pyx_PyObject_CallOneArg(PyExc_StopIteration, result);
                if (likely(exc != NULL)) {
                    PyErr_SetObject(PyExc_StopIteration, exc);
                    Py_DECREF(exc);
                }
            }
#endif
        }
        Py_DECREF(result);
        result = NULL;
    }
    return result;
#endif
}
#endif
static CYTHON_INLINE __Pyx_PySendResult
__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen, PyObject** retval) {
    __Pyx_PySendResult result;
    PyObject *val = NULL;
    assert(__Pyx_Coroutine_get_is_running(gen));
    __Pyx_Coroutine_Undelegate(gen);
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val);
    result = __Pyx_Coroutine_SendEx(gen, val, retval, 0);
    Py_XDECREF(val);
    return result;
}
#if CYTHON_USE_AM_SEND
static __Pyx_PySendResult
__Pyx_Coroutine_SendToDelegate(__pyx_CoroutineObject *gen, __Pyx_pyiter_sendfunc gen_am_send, PyObject *value, PyObject **retval) {
    PyObject *ret = NULL;
    __Pyx_PySendResult delegate_result, result;
    assert(__Pyx_Coroutine_get_is_running(gen));
    delegate_result = gen_am_send(gen->yieldfrom, value, &ret);
    if (delegate_result == PYGEN_NEXT) {
        assert (ret != NULL);
        *retval = ret;
        return PYGEN_NEXT;
    }
    assert (delegate_result != PYGEN_ERROR || ret == NULL);
    __Pyx_Coroutine_Undelegate(gen);
    result = __Pyx_Coroutine_SendEx(gen, ret, retval, 0);
    Py_XDECREF(ret);
    return result;
}
#endif
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) {
    PyObject *retval = NULL;
    __Pyx_PySendResult result = __Pyx_Coroutine_AmSend(self, value, &retval);
    return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 0);
}
static __Pyx_PySendResult
__Pyx_Coroutine_AmSend(PyObject *self, PyObject *value, PyObject **retval) {
    __Pyx_PySendResult result;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
        *retval = __Pyx_Coroutine_AlreadyRunningError(gen);
        return PYGEN_ERROR;
    }
    #if CYTHON_USE_AM_SEND
    if (gen->yieldfrom_am_send) {
        result = __Pyx_Coroutine_SendToDelegate(gen, gen->yieldfrom_am_send, value, retval);
    } else
    #endif
    if (gen->yieldfrom) {
        PyObject *yf = gen->yieldfrom;
        PyObject *ret;
      #if !CYTHON_USE_AM_SEND
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_Check(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_AsyncGen_USED
        if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
            ret = __Pyx_async_gen_asend_send(yf, value);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON
        if (PyGen_CheckExact(yf)) {
            ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        if (PyCoro_CheckExact(yf)) {
            ret = __Pyx_PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
      #endif
        {
            #if !CYTHON_COMPILING_IN_LIMITED_API || __PYX_LIMITED_VERSION_HEX >= 0x03080000
            if (value == Py_None && PyIter_Check(yf))
                ret = __Pyx_PyIter_Next_Plain(yf);
            else
            #endif
                ret = __Pyx_PyObject_CallMethod1(yf, __pyx_mstate_global->__pyx_n_u_send, value);
        }
        if (likely(ret)) {
            __Pyx_Coroutine_unset_is_running(gen);
            *retval = ret;
            return PYGEN_NEXT;
        }
        result = __Pyx_Coroutine_FinishDelegation(gen, retval);
    } else {
        result = __Pyx_Coroutine_SendEx(gen, value, retval, 0);
    }
    __Pyx_Coroutine_unset_is_running(gen);
    return result;
}
static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
    __Pyx_PySendResult result;
    PyObject *retval = NULL;
    CYTHON_UNUSED_VAR(gen);
    assert(__Pyx_Coroutine_get_is_running(gen));
    #ifdef __Pyx_Generator_USED
    if (__Pyx_Generator_CheckExact(yf)) {
        result = __Pyx_Coroutine_Close(yf, &retval);
    } else
    #endif
    #ifdef __Pyx_Coroutine_USED
    if (__Pyx_Coroutine_Check(yf)) {
        result = __Pyx_Coroutine_Close(yf, &retval);
    } else
    if (__Pyx_CoroutineAwait_CheckExact(yf)) {
        result = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf);
    } else
    #endif
    #ifdef __Pyx_AsyncGen_USED
    if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
        retval = __Pyx_async_gen_asend_close(yf, NULL);
        result = PYGEN_RETURN;
    } else
    if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
        retval = __Pyx_async_gen_athrow_close(yf, NULL);
        result = PYGEN_RETURN;
    } else
    #endif
    {
        PyObject *meth;
        result = PYGEN_RETURN;
        meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_mstate_global->__pyx_n_u_close);
        if (unlikely(!meth)) {
            if (unlikely(PyErr_Occurred())) {
                PyErr_WriteUnraisable(yf);
            }
        } else {
            retval = __Pyx_PyObject_CallNoArg(meth);
            Py_DECREF(meth);
            if (unlikely(!retval)) {
                result = PYGEN_ERROR;
            }
        }
    }
    Py_XDECREF(retval);
    return result == PYGEN_ERROR ? -1 : 0;
}
static PyObject *__Pyx_Generator_Next(PyObject *self) {
    __Pyx_PySendResult result;
    PyObject *retval = NULL;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    }
    #if CYTHON_USE_AM_SEND
    if (gen->yieldfrom_am_send) {
        result = __Pyx_Coroutine_SendToDelegate(gen, gen->yieldfrom_am_send, Py_None, &retval);
    } else
    #endif
    if (gen->yieldfrom) {
        PyObject *yf = gen->yieldfrom;
        PyObject *ret;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Generator_Next(yf);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_CheckExact(yf)) {
            ret = __Pyx_Coroutine_Send(yf, Py_None);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX < 0x030A00A3 || !CYTHON_USE_AM_SEND)
        if (PyGen_CheckExact(yf)) {
            ret = __Pyx_PyGen_Send((PyGenObject*)yf, NULL);
        } else
        #endif
            ret = __Pyx_PyIter_Next_Plain(yf);
        if (likely(ret)) {
            __Pyx_Coroutine_unset_is_running(gen);
            return ret;
        }
        result = __Pyx_Coroutine_FinishDelegation(gen, &retval);
    } else {
        result = __Pyx_Coroutine_SendEx(gen, Py_None, &retval, 0);
    }
    __Pyx_Coroutine_unset_is_running(gen);
    return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 1);
}
static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, PyObject *arg) {
    PyObject *retval = NULL;
    __Pyx_PySendResult result;
    CYTHON_UNUSED_VAR(arg);
    result = __Pyx_Coroutine_Close(self, &retval);
    if (unlikely(result == PYGEN_ERROR))
        return NULL;
    Py_XDECREF(retval);
    Py_RETURN_NONE;
}
static __Pyx_PySendResult
__Pyx_Coroutine_Close(PyObject *self, PyObject **retval) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    __Pyx_PySendResult result;
    PyObject *yf;
    int err = 0;
    if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
        *retval = __Pyx_Coroutine_AlreadyRunningError(gen);
        return PYGEN_ERROR;
    }
    yf = gen->yieldfrom;
    if (yf) {
        Py_INCREF(yf);
        err = __Pyx_Coroutine_CloseIter(gen, yf);
        __Pyx_Coroutine_Undelegate(gen);
        Py_DECREF(yf);
    }
    if (err == 0)
        PyErr_SetNone(PyExc_GeneratorExit);
    result = __Pyx_Coroutine_SendEx(gen, NULL, retval, 1);
    if (result == PYGEN_ERROR) {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __Pyx_Coroutine_unset_is_running(gen);
        if (!__Pyx_PyErr_Occurred()) {
            return PYGEN_RETURN;
        } else if (likely(__Pyx_PyErr_ExceptionMatches2(PyExc_GeneratorExit, PyExc_StopIteration))) {
            __Pyx_PyErr_Clear();
            return PYGEN_RETURN;
        }
        return PYGEN_ERROR;
    } else if (likely(result == PYGEN_RETURN && *retval == Py_None)) {
        __Pyx_Coroutine_unset_is_running(gen);
        return PYGEN_RETURN;
    } else {
        const char *msg;
        Py_DECREF(*retval);
        *retval = NULL;
        if ((0)) {
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_Coroutine_Check(self)) {
            msg = "coroutine ignored GeneratorExit";
        #endif
        #ifdef __Pyx_AsyncGen_USED
        } else if (__Pyx_AsyncGen_CheckExact(self)) {
            msg = "async generator ignored GeneratorExit";
        #endif
        } else {
            msg = "generator ignored GeneratorExit";
        }
        PyErr_SetString(PyExc_RuntimeError, msg);
        __Pyx_Coroutine_unset_is_running(gen);
        return PYGEN_ERROR;
    }
}
static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
                                        PyObject *args, int close_on_genexit) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *yf;
    if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen)))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    yf = gen->yieldfrom;
    if (yf) {
        __Pyx_PySendResult result;
        PyObject *ret;
        Py_INCREF(yf);
        if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
            int err = __Pyx_Coroutine_CloseIter(gen, yf);
            Py_DECREF(yf);
            __Pyx_Coroutine_Undelegate(gen);
            if (err < 0)
                goto propagate_exception;
            goto throw_here;
        }
        if (0
        #ifdef __Pyx_Generator_USED
            || __Pyx_Generator_CheckExact(yf)
        #endif
        #ifdef __Pyx_Coroutine_USED
            || __Pyx_Coroutine_Check(yf)
        #endif
            ) {
            ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
            ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
        #endif
        } else {
            PyObject *meth = __Pyx_PyObject_GetAttrStrNoError(yf, __pyx_mstate_global->__pyx_n_u_throw);
            if (unlikely(!meth)) {
                Py_DECREF(yf);
                if (unlikely(PyErr_Occurred())) {
                    __Pyx_Coroutine_unset_is_running(gen);
                    return NULL;
                }
                __Pyx_Coroutine_Undelegate(gen);
                goto throw_here;
            }
            if (likely(args)) {
                ret = __Pyx_PyObject_Call(meth, args, NULL);
            } else {
                PyObject *cargs[4] = {NULL, typ, val, tb};
                ret = __Pyx_PyObject_FastCall(meth, cargs+1, 3 | __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET);
            }
            Py_DECREF(meth);
        }
        Py_DECREF(yf);
        if (ret) {
            __Pyx_Coroutine_unset_is_running(gen);
            return ret;
        }
        result = __Pyx_Coroutine_FinishDelegation(gen, &ret);
        __Pyx_Coroutine_unset_is_running(gen);
        return __Pyx_Coroutine_MethodReturnFromResult(self, result, ret, 0);
    }
throw_here:
    __Pyx_Raise(typ, val, tb, NULL);
propagate_exception:
    {
        PyObject *retval = NULL;
        __Pyx_PySendResult result = __Pyx_Coroutine_SendEx(gen, NULL, &retval, 0);
        __Pyx_Coroutine_unset_is_running(gen);
        return __Pyx_Coroutine_MethodReturnFromResult(self, result, retval, 0);
    }
}
static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
    PyObject *typ;
    PyObject *val = NULL;
    PyObject *tb = NULL;
    if (unlikely(!PyArg_UnpackTuple(args, "throw", 1, 3, &typ, &val, &tb)))
        return NULL;
    return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
}
static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
#if PY_VERSION_HEX >= 0x030B00a4
    Py_VISIT(exc_state->exc_value);
#else
    Py_VISIT(exc_state->exc_type);
    Py_VISIT(exc_state->exc_value);
    Py_VISIT(exc_state->exc_traceback);
#endif
    return 0;
}
static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
    {
        int e = __Pyx_call_type_traverse((PyObject*)gen, 1, visit, arg);
        if (e) return e;
    }
    Py_VISIT(gen->closure);
    Py_VISIT(gen->classobj);
    Py_VISIT(gen->yieldfrom);
    return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
}
static int __Pyx_Coroutine_clear(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    Py_CLEAR(gen->closure);
    Py_CLEAR(gen->classobj);
    __Pyx_Coroutine_Undelegate(gen);
    __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
    }
#endif
    Py_CLEAR(gen->gi_code);
    Py_CLEAR(gen->gi_frame);
    Py_CLEAR(gen->gi_name);
    Py_CLEAR(gen->gi_qualname);
    Py_CLEAR(gen->gi_modulename);
    return 0;
}
static void __Pyx_Coroutine_dealloc(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject_GC_UnTrack(gen);
    #if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    if (gen->gi_weakreflist != NULL)
    #endif
        PyObject_ClearWeakRefs(self);
    if (gen->resume_label >= 0) {
        PyObject_GC_Track(self);
#if CYTHON_USE_TP_FINALIZE
        if (unlikely(PyObject_CallFinalizerFromDealloc(self)))
#else
        {
            destructor del = __Pyx_PyObject_GetSlot(gen, tp_del, destructor);
            if (del) del(self);
        }
        if (unlikely(Py_REFCNT(self) > 0))
#endif
        {
            return;
        }
        PyObject_GC_UnTrack(self);
    }
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        /* We have to handle this case for asynchronous generators
           right here, because this code has to be between UNTRACK
           and GC_Del. */
        Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer);
    }
#endif
    __Pyx_Coroutine_clear(self);
    __Pyx_PyHeapTypeObject_GC_Del(gen);
}
#if CYTHON_USE_TP_FINALIZE
static void __Pyx_Coroutine_del(PyObject *self) {
    PyObject *error_type, *error_value, *error_traceback;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    __Pyx_PyThreadState_declare
    if (gen->resume_label < 0) {
        return;
    }
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self;
        PyObject *finalizer = agen->ag_finalizer;
        if (finalizer && !agen->ag_closed) {
            PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self);
            if (unlikely(!res)) {
                PyErr_WriteUnraisable(self);
            } else {
                Py_DECREF(res);
            }
            __Pyx_ErrRestore(error_type, error_value, error_traceback);
            return;
        }
    }
#endif
    if (unlikely(gen->resume_label == 0 && !error_value)) {
#ifdef __Pyx_Coroutine_USED
#ifdef __Pyx_Generator_USED
    if (!__Pyx_Generator_CheckExact(self))
#endif
        {
        PyObject_GC_UnTrack(self);
        if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0))
            PyErr_WriteUnraisable(self);
        PyObject_GC_Track(self);
        }
#endif
    } else {
        PyObject *retval = NULL;
        __Pyx_PySendResult result = __Pyx_Coroutine_Close(self, &retval);
        if (result == PYGEN_ERROR) {
            PyErr_WriteUnraisable(self);
        } else {
            Py_XDECREF(retval);
        }
    }
    __Pyx_ErrRestore(error_type, error_value, error_traceback);
}
#endif
static PyObject *
__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, void *context)
{
    PyObject *name = self->gi_name;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(self->gi_name, value);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, void *context)
{
    PyObject *name = self->gi_qualname;
    CYTHON_UNUSED_VAR(context);
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, void *context)
{
    CYTHON_UNUSED_VAR(context);
    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    Py_INCREF(value);
    __Pyx_Py_XDECREF_SET(self->gi_qualname, value);
    return 0;
}
static PyObject *
__Pyx__Coroutine_get_frame(__pyx_CoroutineObject *self)
{
#if !CYTHON_COMPILING_IN_LIMITED_API
    PyObject *frame;
    #if PY_VERSION_HEX >= 0x030d0000
    Py_BEGIN_CRITICAL_SECTION(self);
    #endif
    frame = self->gi_frame;
    if (!frame) {
        if (unlikely(!self->gi_code)) {
            Py_RETURN_NONE;
        }
        PyObject *globals = PyDict_New();
        if (unlikely(!globals)) return NULL;
        frame = (PyObject *) PyFrame_New(
            PyThreadState_Get(),            /*PyThreadState *tstate,*/
            (PyCodeObject*) self->gi_code,  /*PyCodeObject *code,*/
            globals,                        /*PyObject *globals,*/
            0                               /*PyObject *locals*/
        );
        Py_DECREF(globals);
        if (unlikely(!frame))
            return NULL;
        if (unlikely(self->gi_frame)) {
            Py_DECREF(frame);
            frame = self->gi_frame;
        } else {
            self->gi_frame = frame;
        }
    }
    Py_INCREF(frame);
    #if PY_VERSION_HEX >= 0x030d0000
    Py_END_CRITICAL_SECTION();
    #endif
    return frame;
#else
    CYTHON_UNUSED_VAR(self);
    Py_RETURN_NONE;
#endif
}
static PyObject *
__Pyx_Coroutine_get_frame(__pyx_CoroutineObject *self, void *context) {
    CYTHON_UNUSED_VAR(context);
    PyObject *frame = self->gi_frame;
    if (frame)
        return __Pyx_NewRef(frame);
    return __Pyx__Coroutine_get_frame(self);
}
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
            PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type);
    if (unlikely(!gen))
        return NULL;
    return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name);
}
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    gen->body = body;
    gen->closure = closure;
    Py_XINCREF(closure);
    gen->is_running = 0;
    gen->resume_label = 0;
    gen->classobj = NULL;
    gen->yieldfrom = NULL;
    gen->yieldfrom_am_send = NULL;
    #if PY_VERSION_HEX >= 0x030B00a4 && !CYTHON_COMPILING_IN_LIMITED_API
    gen->gi_exc_state.exc_value = NULL;
    #else
    gen->gi_exc_state.exc_type = NULL;
    gen->gi_exc_state.exc_value = NULL;
    gen->gi_exc_state.exc_traceback = NULL;
    #endif
#if CYTHON_USE_EXC_INFO_STACK
    gen->gi_exc_state.previous_item = NULL;
#endif
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    gen->gi_weakreflist = NULL;
#endif
    Py_XINCREF(qualname);
    gen->gi_qualname = qualname;
    Py_XINCREF(name);
    gen->gi_name = name;
    Py_XINCREF(module_name);
    gen->gi_modulename = module_name;
    Py_XINCREF(code);
    gen->gi_code = code;
    gen->gi_frame = NULL;
    PyObject_GC_Track(gen);
    return gen;
}
static char __Pyx_Coroutine_test_and_set_is_running(__pyx_CoroutineObject *gen) {
    char result;
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_BEGIN_CRITICAL_SECTION(gen);
    #endif
    result = gen->is_running;
    gen->is_running = 1;
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_END_CRITICAL_SECTION();
    #endif
    return result;
}
static void __Pyx_Coroutine_unset_is_running(__pyx_CoroutineObject *gen) {
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_BEGIN_CRITICAL_SECTION(gen);
    #endif
    assert(gen->is_running);
    gen->is_running = 0;
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_END_CRITICAL_SECTION();
    #endif
}
static char __Pyx_Coroutine_get_is_running(__pyx_CoroutineObject *gen) {
    char result;
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_BEGIN_CRITICAL_SECTION(gen);
    #endif
    result = gen->is_running;
    #if PY_VERSION_HEX >= 0x030d0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_END_CRITICAL_SECTION();
    #endif
    return result;
}
static PyObject *__Pyx_Coroutine_get_is_running_getter(PyObject *gen, void *closure) {
    CYTHON_UNUSED_VAR(closure);
    char result = __Pyx_Coroutine_get_is_running((__pyx_CoroutineObject*)gen);
    if (result) Py_RETURN_TRUE;
    else Py_RETURN_FALSE;
}
#if __PYX_HAS_PY_AM_SEND == 2
static void __Pyx_SetBackportTypeAmSend(PyTypeObject *type, __Pyx_PyAsyncMethodsStruct *static_amsend_methods, __Pyx_pyiter_sendfunc am_send) {
    Py_ssize_t ptr_offset = (char*)(type->tp_as_async) - (char*)type;
    if (ptr_offset < 0 || ptr_offset > type->tp_basicsize) {
        return;
    }
    memcpy((void*)static_amsend_methods, (void*)(type->tp_as_async), sizeof(*type->tp_as_async));
    static_amsend_methods->am_send = am_send;
    type->tp_as_async = __Pyx_SlotTpAsAsync(static_amsend_methods);
}
#endif
static PyObject *__Pyx_Coroutine_fail_reduce_ex(PyObject *self, PyObject *arg) {
    CYTHON_UNUSED_VAR(arg);
    __Pyx_TypeName self_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE((PyObject*)self));
    PyErr_Format(PyExc_TypeError, "cannot pickle '" __Pyx_FMT_TYPENAME "' object",
                         self_type_name);
    __Pyx_DECREF_TypeName(self_type_name);
    return NULL;
}

/* Generator */
static PyMethodDef __pyx_Generator_methods[] = {
    {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
     PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
    {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
     PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
    {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
     PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
    {"__reduce_ex__", (PyCFunction) __Pyx_Coroutine_fail_reduce_ex, METH_O, 0},
    {"__reduce__", (PyCFunction) __Pyx_Coroutine_fail_reduce_ex, METH_NOARGS, 0},
    {0, 0, 0, 0}
};
static PyMemberDef __pyx_Generator_memberlist[] = {
    {"gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
     PyDoc_STR("object being iterated by 'yield from', or None")},
    {"gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
    {"__module__", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_modulename), 0, 0},
#if PY_VERSION_HEX < 0x030C0000 || CYTHON_COMPILING_IN_LIMITED_API
    {"__weaklistoffset__", T_PYSSIZET, offsetof(__pyx_CoroutineObject, gi_weakreflist), READONLY, 0},
#endif
    {0, 0, 0, 0, 0}
};
static PyGetSetDef __pyx_Generator_getsets[] = {
    {"__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
     PyDoc_STR("name of the generator"), 0},
    {"__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
     PyDoc_STR("qualified name of the generator"), 0},
    {"gi_frame", (getter)__Pyx_Coroutine_get_frame, NULL,
     PyDoc_STR("Frame of the generator"), 0},
    {"gi_running", __Pyx_Coroutine_get_is_running_getter, NULL, NULL, NULL},
    {0, 0, 0, 0, 0}
};
static PyType_Slot __pyx_GeneratorType_slots[] = {
    {Py_tp_dealloc, (void *)__Pyx_Coroutine_dealloc},
    {Py_tp_traverse, (void *)__Pyx_Coroutine_traverse},
    {Py_tp_iter, (void *)PyObject_SelfIter},
    {Py_tp_iternext, (void *)__Pyx_Generator_Next},
    {Py_tp_methods, (void *)__pyx_Generator_methods},
    {Py_tp_members, (void *)__pyx_Generator_memberlist},
    {Py_tp_getset, (void *)__pyx_Generator_getsets},
    {Py_tp_getattro, (void *) PyObject_GenericGetAttr},
#if CYTHON_USE_TP_FINALIZE
    {Py_tp_finalize, (void *)__Pyx_Coroutine_del},
#endif
#if __PYX_HAS_PY_AM_SEND == 1
    {Py_am_send, (void *)__Pyx_Coroutine_AmSend},
#endif
    {0, 0},
};
static PyType_Spec __pyx_GeneratorType_spec = {
    __PYX_TYPE_MODULE_PREFIX "generator",
    sizeof(__pyx_CoroutineObject),
    0,
#if PY_VERSION_HEX >= 0x030C0000 && !CYTHON_COMPILING_IN_LIMITED_API
    Py_TPFLAGS_MANAGED_WEAKREF |
#endif
    Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION |
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | __Pyx_TPFLAGS_HAVE_AM_SEND,
    __pyx_GeneratorType_slots
};
#if __PYX_HAS_PY_AM_SEND == 2
static __Pyx_PyAsyncMethodsStruct __pyx_Generator_as_async;
#endif
static int __pyx_Generator_init(PyObject *module) {
    __pyx_mstatetype *mstate = __Pyx_PyModule_GetState(module);
    mstate->__pyx_GeneratorType = __Pyx_FetchCommonTypeFromSpec(
        mstate->__pyx_CommonTypesMetaclassType, module, &__pyx_GeneratorType_spec, NULL);
    if (unlikely(!mstate->__pyx_GeneratorType)) {
        return -1;
    }
#if __PYX_HAS_PY_AM_SEND == 2
    __Pyx_SetBackportTypeAmSend(mstate->__pyx_GeneratorType, &__pyx_Generator_as_async, &__Pyx_Coroutine_AmSend);
#endif
    return 0;
}
static PyObject *__Pyx_Generator_GetInlinedResult(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *retval = NULL;
    if (unlikely(__Pyx_Coroutine_test_and_set_is_running(gen))) {
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    }
    __Pyx_PySendResult result = __Pyx_Coroutine_SendEx(gen, Py_None, &retval, 0);
    __Pyx_Coroutine_unset_is_running(gen);
    (void) result;
    assert (result == PYGEN_RETURN || result == PYGEN_ERROR);
    assert ((result == PYGEN_RETURN && retval != NULL) || (result == PYGEN_ERROR && retval == NULL));
    return retval;
}

/* CheckBinaryVersion */
static int __Pyx_check_binary_version(unsigned long ct_version, unsigned long rt_version, int allow_newer) {
    const unsigned long MAJOR_MINOR = 0xFFFF0000UL;
    if ((rt_version & MAJOR_MINOR) == (ct_version & MAJOR_MINOR))
        return 0;
    if (likely(allow_newer && (rt_version & MAJOR_MINOR) > (ct_version & MAJOR_MINOR)))
        return 1;
    {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compile time Python version %d.%d "
                      "of module '%.100s' "
                      "%s "
                      "runtime version %d.%d",
                       (int) (ct_version >> 24), (int) ((ct_version >> 16) & 0xFF),
                       __Pyx_MODULE_NAME,
                       (allow_newer) ? "was newer than" : "does not match",
                       (int) (rt_version >> 24), (int) ((rt_version >> 16) & 0xFF)
       );
        return PyErr_WarnEx(NULL, message, 1);
    }
}

/* NewCodeObj */
#if CYTHON_COMPILING_IN_LIMITED_API
    static PyObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
                                       PyObject *code, PyObject *c, PyObject* n, PyObject *v,
                                       PyObject *fv, PyObject *cell, PyObject* fn,
                                       PyObject *name, int fline, PyObject *lnos) {
        PyObject *exception_table = NULL;
        PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
        #if __PYX_LIMITED_VERSION_HEX < 0x030b0000
        PyObject *version_info;
        PyObject *py_minor_version = NULL;
        #endif
        long minor_version = 0;
        PyObject *type, *value, *traceback;
        PyErr_Fetch(&type, &value, &traceback);
        #if __PYX_LIMITED_VERSION_HEX >= 0x030b0000
        minor_version = 11;
        #else
        if (!(version_info = PySys_GetObject("version_info"))) goto end;
        if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
        minor_version = PyLong_AsLong(py_minor_version);
        Py_DECREF(py_minor_version);
        if (minor_version == -1 && PyErr_Occurred()) goto end;
        #endif
        if (!(types_module = PyImport_ImportModule("types"))) goto end;
        if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
        if (minor_version <= 7) {
            (void)p;
            result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOOO", a, k, l, s, f, code,
                          c, n, v, fn, name, fline, lnos, fv, cell);
        } else if (minor_version <= 10) {
            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOOO", a,p, k, l, s, f, code,
                          c, n, v, fn, name, fline, lnos, fv, cell);
        } else {
            if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
            result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOOOO", a,p, k, l, s, f, code,
                          c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
        }
    end:
        Py_XDECREF(code_type);
        Py_XDECREF(exception_table);
        Py_XDECREF(types_module);
        if (type) {
            PyErr_Restore(type, value, traceback);
        }
        return result;
    }
#elif PY_VERSION_HEX >= 0x030B0000
  static PyCodeObject* __Pyx__PyCode_New(int a, int p, int k, int l, int s, int f,
                                         PyObject *code, PyObject *c, PyObject* n, PyObject *v,
                                         PyObject *fv, PyObject *cell, PyObject* fn,
                                         PyObject *name, int fline, PyObject *lnos) {
    PyCodeObject *result;
    result =
      #if PY_VERSION_HEX >= 0x030C0000
        PyUnstable_Code_NewWithPosOnlyArgs
      #else
        PyCode_NewWithPosOnlyArgs
      #endif
        (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, __pyx_mstate_global->__pyx_empty_bytes);
    #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030c00A1
    if (likely(result))
        result->_co_firsttraceable = 0;
    #endif
    return result;
  }
#elif !CYTHON_COMPILING_IN_PYPY
  #define __Pyx__PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx__PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
static PyObject* __Pyx_PyCode_New(
        const __Pyx_PyCode_New_function_description descr,
        PyObject * const *varnames,
        PyObject *filename,
        PyObject *funcname,
        PyObject *line_table,
        PyObject *tuple_dedup_map
) {
    PyObject *code_obj = NULL, *varnames_tuple_dedup = NULL, *code_bytes = NULL;
    Py_ssize_t var_count = (Py_ssize_t) descr.nlocals;
    PyObject *varnames_tuple = PyTuple_New(var_count);
    if (unlikely(!varnames_tuple)) return NULL;
    for (Py_ssize_t i=0; i < var_count; i++) {
        Py_INCREF(varnames[i]);
        if (__Pyx_PyTuple_SET_ITEM(varnames_tuple, i, varnames[i]) != (0)) goto done;
    }
    #if CYTHON_COMPILING_IN_LIMITED_API
    varnames_tuple_dedup = PyDict_GetItem(tuple_dedup_map, varnames_tuple);
    if (!varnames_tuple_dedup) {
        if (unlikely(PyDict_SetItem(tuple_dedup_map, varnames_tuple, varnames_tuple) < 0)) goto done;
        varnames_tuple_dedup = varnames_tuple;
    }
    #else
    varnames_tuple_dedup = PyDict_SetDefault(tuple_dedup_map, varnames_tuple, varnames_tuple);
    if (unlikely(!varnames_tuple_dedup)) goto done;
    #endif
    #if CYTHON_AVOID_BORROWED_REFS
    Py_INCREF(varnames_tuple_dedup);
    #endif
    if (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table != NULL && !CYTHON_COMPILING_IN_GRAAL) {
        Py_ssize_t line_table_length = __Pyx_PyBytes_GET_SIZE(line_table);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely(line_table_length == -1)) goto done;
        #endif
        Py_ssize_t code_len = (line_table_length * 2 + 4) & ~3LL;
        code_bytes = PyBytes_FromStringAndSize(NULL, code_len);
        if (unlikely(!code_bytes)) goto done;
        char* c_code_bytes = PyBytes_AsString(code_bytes);
        if (unlikely(!c_code_bytes)) goto done;
        memset(c_code_bytes, 0, (size_t) code_len);
    }
    code_obj = (PyObject*) __Pyx__PyCode_New(
        (int) descr.argcount,
        (int) descr.num_posonly_args,
        (int) descr.num_kwonly_args,
        (int) descr.nlocals,
        0,
        (int) descr.flags,
        code_bytes ? code_bytes : __pyx_mstate_global->__pyx_empty_bytes,
        __pyx_mstate_global->__pyx_empty_tuple,
        __pyx_mstate_global->__pyx_empty_tuple,
        varnames_tuple_dedup,
        __pyx_mstate_global->__pyx_empty_tuple,
        __pyx_mstate_global->__pyx_empty_tuple,
        filename,
        funcname,
        (int) descr.first_line,
        (__PYX_LIMITED_VERSION_HEX >= (0x030b0000) && line_table) ? line_table : __pyx_mstate_global->__pyx_empty_bytes
    );
done:
    Py_XDECREF(code_bytes);
    #if CYTHON_AVOID_BORROWED_REFS
    Py_XDECREF(varnames_tuple_dedup);
    #endif
    Py_DECREF(varnames_tuple);
    return code_obj;
}

/* DecompressString */
static PyObject *__Pyx_DecompressString(const char *s, Py_ssize_t length, int algo) {
    PyObject *module = NULL, *decompress, *compressed_bytes, *decompressed;
    const char* module_name = algo == 3 ? "compression.zstd" : algo == 2 ? "bz2" : "zlib";
    PyObject *methodname = PyUnicode_FromString("decompress");
    if (unlikely(!methodname)) return NULL;
    #if __PYX_LIMITED_VERSION_HEX >= 0x030e0000
    if (algo == 3) {
        PyObject *fromlist = Py_BuildValue("[O]", methodname);
        if (unlikely(!fromlist)) goto bad;
        module = PyImport_ImportModuleLevel("compression.zstd", NULL, NULL, fromlist, 0);
        Py_DECREF(fromlist);
    } else
    #endif
        module = PyImport_ImportModule(module_name);
    if (unlikely(!module)) goto import_failed;
    decompress = PyObject_GetAttr(module, methodname);
    if (unlikely(!decompress)) goto import_failed;
    {
        #ifdef __cplusplus
            char *memview_bytes = const_cast<char*>(s);
        #else
            #if defined(__clang__)
              #pragma clang diagnostic push
              #pragma clang diagnostic ignored "-Wcast-qual"
            #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
              #pragma GCC diagnostic push
              #pragma GCC diagnostic ignored "-Wcast-qual"
            #endif
            char *memview_bytes = (char*) s;
            #if defined(__clang__)
              #pragma clang diagnostic pop
            #elif !defined(__INTEL_COMPILER) && defined(__GNUC__)
              #pragma GCC diagnostic pop
            #endif
        #endif
        #if CYTHON_COMPILING_IN_LIMITED_API && !defined(PyBUF_READ)
        int memview_flags = 0x100;
        #else
        int memview_flags = PyBUF_READ;
        #endif
        compressed_bytes = PyMemoryView_FromMemory(memview_bytes, length, memview_flags);
    }
    if (unlikely(!compressed_bytes)) {
        Py_DECREF(decompress);
        goto bad;
    }
    decompressed = PyObject_CallFunctionObjArgs(decompress, compressed_bytes, NULL);
    Py_DECREF(compressed_bytes);
    Py_DECREF(decompress);
    Py_DECREF(module);
    Py_DECREF(methodname);
    return decompressed;
import_failed:
    PyErr_Format(PyExc_ImportError,
        "Failed to import '%.20s.decompress' - cannot initialise module strings. "
        "String compression was configured with the C macro 'CYTHON_COMPRESS_STRINGS=%d'.",
        module_name, algo);
bad:
    Py_XDECREF(module);
    Py_DECREF(methodname);
    return NULL;
}

#include <string.h>
static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s) {
    size_t len = strlen(s);
    if (unlikely(len > (size_t) PY_SSIZE_T_MAX)) {
        PyErr_SetString(PyExc_OverflowError, "byte string is too long");
        return -1;
    }
    return (Py_ssize_t) len;
}
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return __Pyx_PyUnicode_FromStringAndSize(c_str, len);
}
static CYTHON_INLINE PyObject* __Pyx_PyByteArray_FromString(const char* c_str) {
    Py_ssize_t len = __Pyx_ssize_strlen(c_str);
    if (unlikely(len < 0)) return NULL;
    return PyByteArray_FromStringAndSize(c_str, len);
}
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if CYTHON_COMPILING_IN_LIMITED_API
    {
        const char* result;
        Py_ssize_t unicode_length;
        CYTHON_MAYBE_UNUSED_VAR(unicode_length); // only for __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        #if __PYX_LIMITED_VERSION_HEX < 0x030A0000
        if (unlikely(PyArg_Parse(o, "s#", &result, length) < 0)) return NULL;
        #else
        result = PyUnicode_AsUTF8AndSize(o, length);
        #endif
        #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
        unicode_length = PyUnicode_GetLength(o);
        if (unlikely(unicode_length < 0)) return NULL;
        if (unlikely(unicode_length != *length)) {
            PyUnicode_AsASCIIString(o);
            return NULL;
        }
        #endif
        return result;
    }
#else
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    if (likely(PyUnicode_IS_ASCII(o))) {
        *length = PyUnicode_GET_LENGTH(o);
        return PyUnicode_AsUTF8(o);
    } else {
        PyUnicode_AsASCIIString(o);
        return NULL;
    }
#else
    return PyUnicode_AsUTF8AndSize(o, length);
#endif
#endif
}
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_UTF8
    if (PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
    if (PyByteArray_Check(o)) {
#if (CYTHON_ASSUME_SAFE_SIZE && CYTHON_ASSUME_SAFE_MACROS) || (CYTHON_COMPILING_IN_PYPY && (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)))
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
#else
        *length = PyByteArray_Size(o);
        if (*length == -1) return NULL;
        return PyByteArray_AsString(o);
#endif
    } else
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
    int retval;
    if (unlikely(!x)) return -1;
    retval = __Pyx_PyObject_IsTrue(x);
    Py_DECREF(x);
    return retval;
}
static PyObject* __Pyx_PyNumber_LongWrongResultType(PyObject* result) {
    __Pyx_TypeName result_type_name = __Pyx_PyType_GetFullyQualifiedName(Py_TYPE(result));
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ").  "
                "The ability to return an instance of a strict subclass of int is deprecated, "
                "and may be removed in a future version of Python.",
                result_type_name)) {
            __Pyx_DECREF_TypeName(result_type_name);
            Py_DECREF(result);
            return NULL;
        }
        __Pyx_DECREF_TypeName(result_type_name);
        return result;
    }
    PyErr_Format(PyExc_TypeError,
                 "__int__ returned non-int (type " __Pyx_FMT_TYPENAME ")",
                 result_type_name);
    __Pyx_DECREF_TypeName(result_type_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_Long(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  PyObject *res = NULL;
  if (likely(PyLong_Check(x)))
      return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  if (likely(m && m->nb_int)) {
      res = m->nb_int(x);
  }
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
      res = PyNumber_Long(x);
  }
#endif
  if (likely(res)) {
      if (unlikely(!PyLong_CheckExact(res))) {
          return __Pyx_PyNumber_LongWrongResultType(res);
      }
  }
  else if (!PyErr_Occurred()) {
      PyErr_SetString(PyExc_TypeError,
                      "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(__Pyx_PyLong_IsCompact(b))) {
        return __Pyx_PyLong_CompactValue(b);
    } else {
      const digit* digits = __Pyx_PyLong_Digits(b);
      const Py_ssize_t size = __Pyx_PyLong_SignedDigitCount(b);
      switch (size) {
         case 2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
      }
    }
    #endif
    return PyLong_AsSsize_t(b);
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyLong_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
  if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
    return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
  } else {
    Py_ssize_t ival;
    PyObject *x;
    x = PyNumber_Index(o);
    if (!x) return -1;
    ival = PyLong_AsLong(x);
    Py_DECREF(x);
    return ival;
  }
}
static CYTHON_INLINE PyObject *__Pyx_Owned_Py_None(int b) {
    CYTHON_UNUSED_VAR(b);
    return __Pyx_NewRef(Py_None);
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return __Pyx_NewRef(b ? Py_True: Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyLong_FromSize_t(size_t ival) {
    return PyLong_FromSize_t(ival);
}


/* MultiPhaseInitModuleState */
#if CYTHON_PEP489_MULTI_PHASE_INIT && CYTHON_USE_MODULE_STATE
#ifndef CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
#if (CYTHON_COMPILING_IN_LIMITED_API || PY_VERSION_HEX >= 0x030C0000)
  #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 1
#else
  #define CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE 0
#endif
#endif
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE && !CYTHON_ATOMICS
#error "Module state with PEP489 requires atomics. Currently that's one of\
 C11, C++11, gcc atomic intrinsics or MSVC atomic intrinsics"
#endif
#if !CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
#define __Pyx_ModuleStateLookup_Lock()
#define __Pyx_ModuleStateLookup_Unlock()
#elif !CYTHON_COMPILING_IN_LIMITED_API && PY_VERSION_HEX >= 0x030d0000
static PyMutex __Pyx_ModuleStateLookup_mutex = {0};
#define __Pyx_ModuleStateLookup_Lock() PyMutex_Lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() PyMutex_Unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(__cplusplus) && __cplusplus >= 201103L
#include <mutex>
static std::mutex __Pyx_ModuleStateLookup_mutex;
#define __Pyx_ModuleStateLookup_Lock() __Pyx_ModuleStateLookup_mutex.lock()
#define __Pyx_ModuleStateLookup_Unlock() __Pyx_ModuleStateLookup_mutex.unlock()
#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ > 201112L) && !defined(__STDC_NO_THREADS__)
#include <threads.h>
static mtx_t __Pyx_ModuleStateLookup_mutex;
static once_flag __Pyx_ModuleStateLookup_mutex_once_flag = ONCE_FLAG_INIT;
static void __Pyx_ModuleStateLookup_initialize_mutex(void) {
    mtx_init(&__Pyx_ModuleStateLookup_mutex, mtx_plain);
}
#define __Pyx_ModuleStateLookup_Lock()\
  call_once(&__Pyx_ModuleStateLookup_mutex_once_flag, __Pyx_ModuleStateLookup_initialize_mutex);\
  mtx_lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() mtx_unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(HAVE_PTHREAD_H)
#include <pthread.h>
static pthread_mutex_t __Pyx_ModuleStateLookup_mutex = PTHREAD_MUTEX_INITIALIZER;
#define __Pyx_ModuleStateLookup_Lock() pthread_mutex_lock(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() pthread_mutex_unlock(&__Pyx_ModuleStateLookup_mutex)
#elif defined(_WIN32)
#include <Windows.h>  // synchapi.h on its own doesn't work
static SRWLOCK __Pyx_ModuleStateLookup_mutex = SRWLOCK_INIT;
#define __Pyx_ModuleStateLookup_Lock() AcquireSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
#define __Pyx_ModuleStateLookup_Unlock() ReleaseSRWLockExclusive(&__Pyx_ModuleStateLookup_mutex)
#else
#error "No suitable lock available for CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE.\
 Requires C standard >= C11, or C++ standard >= C++11,\
 or pthreads, or the Windows 32 API, or Python >= 3.13."
#endif
typedef struct {
    int64_t id;
    PyObject *module;
} __Pyx_InterpreterIdAndModule;
typedef struct {
    char interpreter_id_as_index;
    Py_ssize_t count;
    Py_ssize_t allocated;
    __Pyx_InterpreterIdAndModule table[1];
} __Pyx_ModuleStateLookupData;
#define __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE 32
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static __pyx_atomic_int_type __Pyx_ModuleStateLookup_read_counter = 0;
#endif
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static __pyx_atomic_ptr_type __Pyx_ModuleStateLookup_data = 0;
#else
static __Pyx_ModuleStateLookupData* __Pyx_ModuleStateLookup_data = NULL;
#endif
static __Pyx_InterpreterIdAndModule* __Pyx_State_FindModuleStateLookupTableLowerBound(
        __Pyx_InterpreterIdAndModule* table,
        Py_ssize_t count,
        int64_t interpreterId) {
    __Pyx_InterpreterIdAndModule* begin = table;
    __Pyx_InterpreterIdAndModule* end = begin + count;
    if (begin->id == interpreterId) {
        return begin;
    }
    while ((end - begin) > __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
        __Pyx_InterpreterIdAndModule* halfway = begin + (end - begin)/2;
        if (halfway->id == interpreterId) {
            return halfway;
        }
        if (halfway->id < interpreterId) {
            begin = halfway;
        } else {
            end = halfway;
        }
    }
    for (; begin < end; ++begin) {
        if (begin->id >= interpreterId) return begin;
    }
    return begin;
}
static PyObject *__Pyx_State_FindModule(CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return NULL;
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData* data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
    {
        __pyx_atomic_incr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
        if (likely(data)) {
            __Pyx_ModuleStateLookupData* new_data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_acquire(&__Pyx_ModuleStateLookup_data);
            if (likely(data == new_data)) {
                goto read_finished;
            }
        }
        __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
        __Pyx_ModuleStateLookup_Lock();
        __pyx_atomic_incr_relaxed(&__Pyx_ModuleStateLookup_read_counter);
        data = (__Pyx_ModuleStateLookupData*)__pyx_atomic_pointer_load_relaxed(&__Pyx_ModuleStateLookup_data);
        __Pyx_ModuleStateLookup_Unlock();
    }
  read_finished:;
#else
    __Pyx_ModuleStateLookupData* data = __Pyx_ModuleStateLookup_data;
#endif
    __Pyx_InterpreterIdAndModule* found = NULL;
    if (unlikely(!data)) goto end;
    if (data->interpreter_id_as_index) {
        if (interpreter_id < data->count) {
            found = data->table+interpreter_id;
        }
    } else {
        found = __Pyx_State_FindModuleStateLookupTableLowerBound(
            data->table, data->count, interpreter_id);
    }
  end:
    {
        PyObject *result=NULL;
        if (found && found->id == interpreter_id) {
            result = found->module;
        }
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
        __pyx_atomic_decr_acq_rel(&__Pyx_ModuleStateLookup_read_counter);
#endif
        return result;
    }
}
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
static void __Pyx_ModuleStateLookup_wait_until_no_readers(void) {
    while (__pyx_atomic_load(&__Pyx_ModuleStateLookup_read_counter) != 0);
}
#else
#define __Pyx_ModuleStateLookup_wait_until_no_readers()
#endif
static int __Pyx_State_AddModuleInterpIdAsIndex(__Pyx_ModuleStateLookupData **old_data, PyObject* module, int64_t interpreter_id) {
    Py_ssize_t to_allocate = (*old_data)->allocated;
    while (to_allocate <= interpreter_id) {
        if (to_allocate == 0) to_allocate = 1;
        else to_allocate *= 2;
    }
    __Pyx_ModuleStateLookupData *new_data = *old_data;
    if (to_allocate != (*old_data)->allocated) {
         new_data = (__Pyx_ModuleStateLookupData *)realloc(
            *old_data,
            sizeof(__Pyx_ModuleStateLookupData)+(to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
        if (!new_data) {
            PyErr_NoMemory();
            return -1;
        }
        for (Py_ssize_t i = new_data->allocated; i < to_allocate; ++i) {
            new_data->table[i].id = i;
            new_data->table[i].module = NULL;
        }
        new_data->allocated = to_allocate;
    }
    new_data->table[interpreter_id].module = module;
    if (new_data->count < interpreter_id+1) {
        new_data->count = interpreter_id+1;
    }
    *old_data = new_data;
    return 0;
}
static void __Pyx_State_ConvertFromInterpIdAsIndex(__Pyx_ModuleStateLookupData *data) {
    __Pyx_InterpreterIdAndModule *read = data->table;
    __Pyx_InterpreterIdAndModule *write = data->table;
    __Pyx_InterpreterIdAndModule *end = read + data->count;
    for (; read<end; ++read) {
        if (read->module) {
            write->id = read->id;
            write->module = read->module;
            ++write;
        }
    }
    data->count = write - data->table;
    for (; write<end; ++write) {
        write->id = 0;
        write->module = NULL;
    }
    data->interpreter_id_as_index = 0;
}
static int __Pyx_State_AddModule(PyObject* module, CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return -1;
    int result = 0;
    __Pyx_ModuleStateLookup_Lock();
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData *old_data = (__Pyx_ModuleStateLookupData *)
            __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
#else
    __Pyx_ModuleStateLookupData *old_data = __Pyx_ModuleStateLookup_data;
#endif
    __Pyx_ModuleStateLookupData *new_data = old_data;
    if (!new_data) {
        new_data = (__Pyx_ModuleStateLookupData *)calloc(1, sizeof(__Pyx_ModuleStateLookupData));
        if (!new_data) {
            result = -1;
            PyErr_NoMemory();
            goto end;
        }
        new_data->allocated = 1;
        new_data->interpreter_id_as_index = 1;
    }
    __Pyx_ModuleStateLookup_wait_until_no_readers();
    if (new_data->interpreter_id_as_index) {
        if (interpreter_id < __PYX_MODULE_STATE_LOOKUP_SMALL_SIZE) {
            result = __Pyx_State_AddModuleInterpIdAsIndex(&new_data, module, interpreter_id);
            goto end;
        }
        __Pyx_State_ConvertFromInterpIdAsIndex(new_data);
    }
    {
        Py_ssize_t insert_at = 0;
        {
            __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
                new_data->table, new_data->count, interpreter_id);
            assert(lower_bound);
            insert_at = lower_bound - new_data->table;
            if (unlikely(insert_at < new_data->count && lower_bound->id == interpreter_id)) {
                lower_bound->module = module;
                goto end;  // already in table, nothing more to do
            }
        }
        if (new_data->count+1 >= new_data->allocated) {
            Py_ssize_t to_allocate = (new_data->count+1)*2;
            new_data =
                (__Pyx_ModuleStateLookupData*)realloc(
                    new_data,
                    sizeof(__Pyx_ModuleStateLookupData) +
                    (to_allocate-1)*sizeof(__Pyx_InterpreterIdAndModule));
            if (!new_data) {
                result = -1;
                new_data = old_data;
                PyErr_NoMemory();
                goto end;
            }
            new_data->allocated = to_allocate;
        }
        ++new_data->count;
        int64_t last_id = interpreter_id;
        PyObject *last_module = module;
        for (Py_ssize_t i=insert_at; i<new_data->count; ++i) {
            int64_t current_id = new_data->table[i].id;
            new_data->table[i].id = last_id;
            last_id = current_id;
            PyObject *current_module = new_data->table[i].module;
            new_data->table[i].module = last_module;
            last_module = current_module;
        }
    }
  end:
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, new_data);
#else
    __Pyx_ModuleStateLookup_data = new_data;
#endif
    __Pyx_ModuleStateLookup_Unlock();
    return result;
}
static int __Pyx_State_RemoveModule(CYTHON_UNUSED void* dummy) {
    int64_t interpreter_id = PyInterpreterState_GetID(__Pyx_PyInterpreterState_Get());
    if (interpreter_id == -1) return -1;
    __Pyx_ModuleStateLookup_Lock();
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __Pyx_ModuleStateLookupData *data = (__Pyx_ModuleStateLookupData *)
            __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, 0);
#else
    __Pyx_ModuleStateLookupData *data = __Pyx_ModuleStateLookup_data;
#endif
    if (data->interpreter_id_as_index) {
        if (interpreter_id < data->count) {
            data->table[interpreter_id].module = NULL;
        }
        goto done;
    }
    {
        __Pyx_ModuleStateLookup_wait_until_no_readers();
        __Pyx_InterpreterIdAndModule* lower_bound = __Pyx_State_FindModuleStateLookupTableLowerBound(
            data->table, data->count, interpreter_id);
        if (!lower_bound) goto done;
        if (lower_bound->id != interpreter_id) goto done;
        __Pyx_InterpreterIdAndModule *end = data->table+data->count;
        for (;lower_bound<end-1; ++lower_bound) {
            lower_bound->id = (lower_bound+1)->id;
            lower_bound->module = (lower_bound+1)->module;
        }
    }
    --data->count;
    if (data->count == 0) {
        free(data);
        data = NULL;
    }
  done:
#if CYTHON_MODULE_STATE_LOOKUP_THREAD_SAFE
    __pyx_atomic_pointer_exchange(&__Pyx_ModuleStateLookup_data, data);
#else
    __Pyx_ModuleStateLookup_data = data;
#endif
    __Pyx_ModuleStateLookup_Unlock();
    return 0;
}
#endif

/* #### Code section: utility_code_pragmas_end ### */
#ifdef _MSC_VER
#pragma warning( pop )
#endif



/* #### Code section: end ### */
#endif /* Py_PYTHON_H */
