/* Generated by Cython 3.2.1 */

/* BEGIN: Cython Metadata
{
    "distutils": {
        "define_macros": [
            [
                "NPY_NO_DEPRECATED_API",
                "NPY_1_7_API_VERSION"
            ]
        ],
        "depends": [],
        "extra_compile_args": [
            "-Wno-unreachable-code"
        ],
        "include_dirs": [
            "/tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/_core/include"
        ],
        "name": "cytimes.parser",
        "sources": [
            "src/cytimes/parser.py"
        ]
    },
    "module_name": "cytimes.parser"
}
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_1"
#define CYTHON_HEX_VERSION 0x030201F0
#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))

/* CInitCode */
#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #elif defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE
  #endif
#endif

/* 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
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#define __PYX_HAVE__cytimes__parser
#define __PYX_HAVE_API__cytimes__parser
/* Early includes */
#include <string.h>
#include <stdio.h>

    #if PY_MAJOR_VERSION >= 3
      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj)
    #else
      #define __Pyx_PyFloat_FromString(obj)  PyFloat_FromString(obj, NULL)
    #endif
    
#include <stddef.h>

    #if PY_MAJOR_VERSION <= 2
    #define PyDict_GetItemWithError _PyDict_GetItemWithError
    #endif
    

    #if PY_VERSION_HEX < 0x030d0000
    static CYTHON_INLINE int __Pyx_PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
    {
        PyObject *obj = PyWeakref_GetObject(ref);
        if (obj == NULL) {
            // SystemError if ref is NULL
            *pobj = NULL;
            return -1;
        }
        if (obj == Py_None) {
            *pobj = NULL;
            return 0;
        }
        Py_INCREF(obj);
        *pobj = obj;
        return 1;
    }
    #else
    #define __Pyx_PyWeakref_GetRef PyWeakref_GetRef
    #endif
    
#include "pythread.h"

    #if (CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM < 0x07030600) && !defined(PyContextVar_Get)
    #define PyContextVar_Get(var, d, v)         ((d) ?             ((void)(var), Py_INCREF(d), (v)[0] = (d), 0) :             ((v)[0] = NULL, 0)         )
    #endif
    

    #if CYTHON_COMPILING_IN_LIMITED_API
    #ifdef _MSC_VER
    #pragma message ("This module uses CPython specific internals of 'datetime.datetime', which are not available in the limited API.")
    #else
    #warning This module uses CPython specific internals of 'datetime.datetime', which are not available in the limited API.
    #endif
    #endif
    
#include "datetime.h"

    #define __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)         PyDateTimeAPI->DateTime_FromDateAndTimeAndFold(year, month, day, hour, minute, second,             microsecond, tz, fold, PyDateTimeAPI->DateTimeType)
    #define __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)         PyDateTimeAPI->Time_FromTimeAndFold(hour, minute, second, microsecond, tz, fold, PyDateTimeAPI->TimeType)

    #define __Pyx_TimeZone_UTC PyDateTime_TimeZone_UTC
    #define __Pyx_TimeZone_FromOffsetAndName(offset, name) PyTimeZone_FromOffsetAndName(offset, name)

    /* Backport for Python < 3.10 */
    #if PY_VERSION_HEX < 0x030a00a1
        #ifndef PyDateTime_TIME_GET_TZINFO
            #define PyDateTime_TIME_GET_TZINFO(o)                 ((((PyDateTime_Time*)o)->hastzinfo) ? ((PyDateTime_Time*)o)->tzinfo : Py_None)
        #endif
        #ifndef PyDateTime_DATE_GET_TZINFO
            #define PyDateTime_DATE_GET_TZINFO(o)                 ((((PyDateTime_DateTime*)o)->hastzinfo) ? ((PyDateTime_DateTime*)o)->tzinfo : Py_None)
        #endif
    #endif
    

    /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */
    
#include "numpy/arrayobject.h"
#include "numpy/ndarrayobject.h"
#include "numpy/ndarraytypes.h"
#include "numpy/arrayscalars.h"
#include "numpy/ufuncobject.h"
#include <limits.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <stdint.h>

    #if PY_VERSION_HEX >= 0x030d00b1 || defined(PyTime_t)
        #define __Pyx_PyTime_t PyTime_t
    #else
        #define __Pyx_PyTime_t _PyTime_t
    #endif

    #if PY_VERSION_HEX >= 0x030d00b1 || defined(PyTime_TimeRaw)
        static CYTHON_INLINE __Pyx_PyTime_t __Pyx_PyTime_TimeRaw(void) {
            __Pyx_PyTime_t tic;
            (void) PyTime_TimeRaw(&tic);
            return tic;
        }
    #else
        #define __Pyx_PyTime_TimeRaw()  _PyTime_GetSystemClock()
    #endif

    #if PY_VERSION_HEX >= 0x030d00b1 || defined(PyTime_MonotonicRaw)
        static CYTHON_INLINE __Pyx_PyTime_t __Pyx_PyTime_MonotonicRaw(void) {
            __Pyx_PyTime_t tic;
            (void) PyTime_MonotonicRaw(&tic);
            return tic;
        }
    #elif CYTHON_COMPILING_IN_PYPY && !defined(_PyTime_GetMonotonicClock)
        #define __Pyx_PyTime_MonotonicRaw()  _PyTime_GetSystemClock()
    #else
        #define __Pyx_PyTime_MonotonicRaw()  _PyTime_GetMonotonicClock()
    #endif

    #if PY_VERSION_HEX >= 0x030d00b1 || defined(PyTime_PerfCounterRaw)
        static CYTHON_INLINE __Pyx_PyTime_t __Pyx_PyTime_PerfCounterRaw(void) {
            __Pyx_PyTime_t tic;
            (void) PyTime_PerfCounterRaw(&tic);
            return tic;
        }
    #elif CYTHON_COMPILING_IN_PYPY && !defined(_PyTime_GetPerfCounter)
        #define __Pyx_PyTime_PerfCounterRaw()  __Pyx_PyTime_MonotonicRaw()
    #else
        #define __Pyx_PyTime_PerfCounterRaw()  _PyTime_GetPerfCounter()
    #endif

    #if PY_VERSION_HEX >= 0x030d00b1 || defined(PyTime_AsSecondsDouble)
        #define __Pyx_PyTime_AsSecondsDouble(t)  PyTime_AsSecondsDouble(t)
    #else
        #define __Pyx_PyTime_AsSecondsDouble(t)  _PyTime_AsSecondsDouble(t)
    #endif
    
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#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;

/* Header.proto */
#if !defined(CYTHON_CCOMPLEX)
  #if defined(__cplusplus)
    #define CYTHON_CCOMPLEX 1
  #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__) && !defined(_MSC_VER))
    #define CYTHON_CCOMPLEX 1
  #else
    #define CYTHON_CCOMPLEX 0
  #endif
#endif
#if CYTHON_CCOMPLEX
  #ifdef __cplusplus
    #include <complex>
  #else
    #include <complex.h>
  #endif
#endif
#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
  #undef _Complex_I
  #define _Complex_I 1.0fj
#endif

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

static const char* const __pyx_f[] = {
  "src/cytimes/parser.py",
  "cpython/contextvars.pxd",
  "datetime.pxd",
  "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd",
  "cpython/time.pxd",
  "src/cytimes/utils.pxd",
  "src/cytimes/parser.pxd",
  "<stringsource>",
  "cpython/type.pxd",
  "cpython/bool.pxd",
  "cpython/complex.pxd",
};
/* #### Code section: utility_code_proto_before_types ### */
/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
  #define __PYX_FORCE_INIT_THREADS 0
#endif

/* NoFastGil.proto */
#define __Pyx_PyGILState_Ensure PyGILState_Ensure
#define __Pyx_PyGILState_Release PyGILState_Release
#define __Pyx_FastGIL_Remember()
#define __Pyx_FastGIL_Forget()
#define __Pyx_FastGilFuncInit()

/* 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 ### */

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":743
 * # in Cython to enable them only on the right systems.
 * 
 * ctypedef npy_int8       int8_t             # <<<<<<<<<<<<<<
 * ctypedef npy_int16      int16_t
 * ctypedef npy_int32      int32_t
*/
typedef npy_int8 __pyx_t_5numpy_int8_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":744
 * 
 * ctypedef npy_int8       int8_t
 * ctypedef npy_int16      int16_t             # <<<<<<<<<<<<<<
 * ctypedef npy_int32      int32_t
 * ctypedef npy_int64      int64_t
*/
typedef npy_int16 __pyx_t_5numpy_int16_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":745
 * ctypedef npy_int8       int8_t
 * ctypedef npy_int16      int16_t
 * ctypedef npy_int32      int32_t             # <<<<<<<<<<<<<<
 * ctypedef npy_int64      int64_t
 * 
*/
typedef npy_int32 __pyx_t_5numpy_int32_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":746
 * ctypedef npy_int16      int16_t
 * ctypedef npy_int32      int32_t
 * ctypedef npy_int64      int64_t             # <<<<<<<<<<<<<<
 * 
 * ctypedef npy_uint8      uint8_t
*/
typedef npy_int64 __pyx_t_5numpy_int64_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":748
 * ctypedef npy_int64      int64_t
 * 
 * ctypedef npy_uint8      uint8_t             # <<<<<<<<<<<<<<
 * ctypedef npy_uint16     uint16_t
 * ctypedef npy_uint32     uint32_t
*/
typedef npy_uint8 __pyx_t_5numpy_uint8_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":749
 * 
 * ctypedef npy_uint8      uint8_t
 * ctypedef npy_uint16     uint16_t             # <<<<<<<<<<<<<<
 * ctypedef npy_uint32     uint32_t
 * ctypedef npy_uint64     uint64_t
*/
typedef npy_uint16 __pyx_t_5numpy_uint16_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":750
 * ctypedef npy_uint8      uint8_t
 * ctypedef npy_uint16     uint16_t
 * ctypedef npy_uint32     uint32_t             # <<<<<<<<<<<<<<
 * ctypedef npy_uint64     uint64_t
 * 
*/
typedef npy_uint32 __pyx_t_5numpy_uint32_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":751
 * ctypedef npy_uint16     uint16_t
 * ctypedef npy_uint32     uint32_t
 * ctypedef npy_uint64     uint64_t             # <<<<<<<<<<<<<<
 * 
 * ctypedef npy_float32    float32_t
*/
typedef npy_uint64 __pyx_t_5numpy_uint64_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":753
 * ctypedef npy_uint64     uint64_t
 * 
 * ctypedef npy_float32    float32_t             # <<<<<<<<<<<<<<
 * ctypedef npy_float64    float64_t
 * #ctypedef npy_float80    float80_t
*/
typedef npy_float32 __pyx_t_5numpy_float32_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":754
 * 
 * ctypedef npy_float32    float32_t
 * ctypedef npy_float64    float64_t             # <<<<<<<<<<<<<<
 * #ctypedef npy_float80    float80_t
 * #ctypedef npy_float128   float128_t
*/
typedef npy_float64 __pyx_t_5numpy_float64_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":761
 * ctypedef double complex complex128_t
 * 
 * ctypedef npy_longlong   longlong_t             # <<<<<<<<<<<<<<
 * ctypedef npy_ulonglong  ulonglong_t
 * 
*/
typedef npy_longlong __pyx_t_5numpy_longlong_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":762
 * 
 * ctypedef npy_longlong   longlong_t
 * ctypedef npy_ulonglong  ulonglong_t             # <<<<<<<<<<<<<<
 * 
 * ctypedef npy_intp       intp_t
*/
typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":764
 * ctypedef npy_ulonglong  ulonglong_t
 * 
 * ctypedef npy_intp       intp_t             # <<<<<<<<<<<<<<
 * ctypedef npy_uintp      uintp_t
 * 
*/
typedef npy_intp __pyx_t_5numpy_intp_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":765
 * 
 * ctypedef npy_intp       intp_t
 * ctypedef npy_uintp      uintp_t             # <<<<<<<<<<<<<<
 * 
 * ctypedef npy_double     float_t
*/
typedef npy_uintp __pyx_t_5numpy_uintp_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":767
 * ctypedef npy_uintp      uintp_t
 * 
 * ctypedef npy_double     float_t             # <<<<<<<<<<<<<<
 * ctypedef npy_double     double_t
 * ctypedef npy_longdouble longdouble_t
*/
typedef npy_double __pyx_t_5numpy_float_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":768
 * 
 * ctypedef npy_double     float_t
 * ctypedef npy_double     double_t             # <<<<<<<<<<<<<<
 * ctypedef npy_longdouble longdouble_t
 * 
*/
typedef npy_double __pyx_t_5numpy_double_t;

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":769
 * ctypedef npy_double     float_t
 * ctypedef npy_double     double_t
 * ctypedef npy_longdouble longdouble_t             # <<<<<<<<<<<<<<
 * 
 * ctypedef float complex       cfloat_t
*/
typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
/* #### Code section: complex_type_declarations ### */
/* Declarations.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    typedef ::std::complex< float > __pyx_t_float_complex;
  #else
    typedef float _Complex __pyx_t_float_complex;
  #endif
#else
    typedef struct { float real, imag; } __pyx_t_float_complex;
#endif
static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);

/* Declarations.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    typedef ::std::complex< double > __pyx_t_double_complex;
  #else
    typedef double _Complex __pyx_t_double_complex;
  #endif
#else
    typedef struct { double real, imag; } __pyx_t_double_complex;
#endif
static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);

/* Declarations.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    typedef ::std::complex< long double > __pyx_t_long_double_complex;
  #else
    typedef long double _Complex __pyx_t_long_double_complex;
  #endif
#else
    typedef struct { long double real, imag; } __pyx_t_long_double_complex;
#endif
static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double, long double);

/* #### Code section: type_declarations ### */

/*--- Type declarations ---*/
struct __pyx_obj_7cytimes_6parser_Configs;
struct __pyx_obj_7cytimes_6parser_Result;
struct __pyx_obj_7cytimes_6parser_Parser;
struct __pyx_opt_args_7cpython_11contextvars_get_value;
struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default;

/* "cpython/contextvars.pxd":116
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the default value of the context variable,
*/
struct __pyx_opt_args_7cpython_11contextvars_get_value {
  int __pyx_n;
  PyObject *default_value;
};

/* "cpython/contextvars.pxd":134
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the provided default value if no such value was found.
*/
struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default {
  int __pyx_n;
  PyObject *default_value;
};
struct __pyx_opt_args_7cpython_8datetime_time_new;
struct __pyx_opt_args_7cpython_8datetime_datetime_new;
struct __pyx_opt_args_7cpython_8datetime_timezone_new;
struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp;

/* "datetime.pxd":265
 * # Create time object using DateTime CAPI factory function
 * # Note, there are no range checks for any of the arguments.
 * cdef inline time time_new(int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)
 * 
*/
struct __pyx_opt_args_7cpython_8datetime_time_new {
  int __pyx_n;
  int fold;
};

/* "datetime.pxd":270
 * # Create datetime object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline datetime datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)
 * 
*/
struct __pyx_opt_args_7cpython_8datetime_datetime_new {
  int __pyx_n;
  int fold;
};

/* "datetime.pxd":279
 * 
 * # Create timedelta object using DateTime CAPI factory function.
 * cdef inline object timezone_new(object offset, object name=None):             # <<<<<<<<<<<<<<
 *     return __Pyx_TimeZone_FromOffsetAndName(offset, <PyObject*>name if name is not None else NULL)
 * 
*/
struct __pyx_opt_args_7cpython_8datetime_timezone_new {
  int __pyx_n;
  PyObject *name;
};

/* "datetime.pxd":283
 * 
 * # Create datetime object using DB API constructor.
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.DateTime_FromTimestamp(
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
*/
struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp {
  int __pyx_n;
  PyObject *tz;
};
struct __pyx_t_7cytimes_5utils_ymd;
typedef struct __pyx_t_7cytimes_5utils_ymd __pyx_t_7cytimes_5utils_ymd;
struct __pyx_t_7cytimes_5utils_hmsf;
typedef struct __pyx_t_7cytimes_5utils_hmsf __pyx_t_7cytimes_5utils_hmsf;
struct __pyx_t_7cytimes_5utils_sf;
typedef struct __pyx_t_7cytimes_5utils_sf __pyx_t_7cytimes_5utils_sf;
struct __pyx_t_7cytimes_5utils_dtm;
typedef struct __pyx_t_7cytimes_5utils_dtm __pyx_t_7cytimes_5utils_dtm;
struct __pyx_t_7cytimes_5utils_iso;
typedef struct __pyx_t_7cytimes_5utils_iso __pyx_t_7cytimes_5utils_iso;
struct __pyx_opt_args_7cytimes_5utils_math_mod;
struct __pyx_opt_args_7cytimes_5utils_math_div_even;
struct __pyx_opt_args_7cytimes_5utils_math_div_up;
struct __pyx_opt_args_7cytimes_5utils_math_div_down;
struct __pyx_opt_args_7cytimes_5utils_math_div_ceil;
struct __pyx_opt_args_7cytimes_5utils_math_div_floor;
struct __pyx_opt_args_7cytimes_5utils_math_div_trunc;
struct __pyx_opt_args_7cytimes_5utils_is_str_dot;
struct __pyx_opt_args_7cytimes_5utils_is_str_comma;
struct __pyx_opt_args_7cytimes_5utils_is_str_iso_sep;
struct __pyx_opt_args_7cytimes_5utils_is_str_date_sep;
struct __pyx_opt_args_7cytimes_5utils_is_str_time_sep;
struct __pyx_opt_args_7cytimes_5utils_is_str_isoweek_sep;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl_or_space;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_upper;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_lower;
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters;
struct __pyx_opt_args_7cytimes_5utils_is_str_alphas;
struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind;
struct __pyx_opt_args_7cytimes_5utils_parse_isoyear;
struct __pyx_opt_args_7cytimes_5utils_parse_isomonth;
struct __pyx_opt_args_7cytimes_5utils_parse_isoday;
struct __pyx_opt_args_7cytimes_5utils_parse_isoweek;
struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday;
struct __pyx_opt_args_7cytimes_5utils_parse_isodoy;
struct __pyx_opt_args_7cytimes_5utils_parse_isohour;
struct __pyx_opt_args_7cytimes_5utils_parse_isominute;
struct __pyx_opt_args_7cytimes_5utils_parse_isosecond;
struct __pyx_opt_args_7cytimes_5utils_parse_isofraction;
struct __pyx_opt_args_7cytimes_5utils_parse_second_and_fraction;
struct __pyx_opt_args_7cytimes_5utils_slice_to_uint;
struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat;
struct __pyx_opt_args_7cytimes_5utils_date_new;
struct __pyx_opt_args_7cytimes_5utils_date_now;
struct __pyx_opt_args_7cytimes_5utils_date_fr_us;
struct __pyx_opt_args_7cytimes_5utils_date_fr_sec;
struct __pyx_opt_args_7cytimes_5utils_date_fr_ord;
struct __pyx_opt_args_7cytimes_5utils_date_fr_iso;
struct __pyx_opt_args_7cytimes_5utils_date_fr_doy;
struct __pyx_opt_args_7cytimes_5utils_date_fr_ts;
struct __pyx_opt_args_7cytimes_5utils_date_fr_date;
struct __pyx_opt_args_7cytimes_5utils_date_fr_dt;
struct __pyx_opt_args_7cytimes_5utils_date_replace;
struct __pyx_opt_args_7cytimes_5utils_date_add_delta;
struct __pyx_opt_args_7cytimes_5utils_dt_new;
struct __pyx_opt_args_7cytimes_5utils_dt_now;
struct __pyx_opt_args_7cytimes_5utils_dt_isoformat;
struct __pyx_opt_args_7cytimes_5utils_dt_to_tm;
struct __pyx_opt_args_7cytimes_5utils_dt_to_us;
struct __pyx_opt_args_7cytimes_5utils_dt_to_sec;
struct __pyx_opt_args_7cytimes_5utils_dt_to_ord;
struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch;
struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch_W_iso;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_us;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_sec;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_ord;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_iso;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_doy;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_ts;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_date;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt;
struct __pyx_opt_args_7cytimes_5utils_dt_fr_time;
struct __pyx_opt_args_7cytimes_5utils_dt_combine;
struct __pyx_opt_args_7cytimes_5utils_dt_add;
struct __pyx_opt_args_7cytimes_5utils_dt_add_delta;
struct __pyx_opt_args_7cytimes_5utils_dt_replace;
struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz_fold;
struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz;
struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold;
struct __pyx_opt_args_7cytimes_5utils_dt_compare;
struct __pyx_opt_args_7cytimes_5utils_dt_astimezone;
struct __pyx_opt_args_7cytimes_5utils_dt_normalize_tz;
struct __pyx_opt_args_7cytimes_5utils_time_new;
struct __pyx_opt_args_7cytimes_5utils_time_now;
struct __pyx_opt_args_7cytimes_5utils_time_isoformat;
struct __pyx_opt_args_7cytimes_5utils_time_fr_us;
struct __pyx_opt_args_7cytimes_5utils_time_fr_sec;
struct __pyx_opt_args_7cytimes_5utils_time_fr_time;
struct __pyx_opt_args_7cytimes_5utils_time_fr_dt;
struct __pyx_opt_args_7cytimes_5utils_td_new;
struct __pyx_opt_args_7cytimes_5utils_td_fr_us;
struct __pyx_opt_args_7cytimes_5utils_td_fr_sec;
struct __pyx_opt_args_7cytimes_5utils_td_fr_td;
struct __pyx_opt_args_7cytimes_5utils_tz_new;
struct __pyx_opt_args_7cytimes_5utils_tz_local;
struct __pyx_opt_args_7cytimes_5utils_tz_local_sec;
struct __pyx_opt_args_7cytimes_5utils_tz_name;
struct __pyx_opt_args_7cytimes_5utils_tz_dst;
struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset;
struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset_sec;
struct __pyx_opt_args_7cytimes_5utils_tz_utcformat;
struct __pyx_opt_args_7cytimes_5utils_dt64_as_int64_us;
struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils_dt64_to_dt;
struct __pyx_opt_args_7cytimes_5utils_td64_as_int64_us;
struct __pyx_opt_args_7cytimes_5utils__td64_Y_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils__td64_M_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils_td64_to_td;
struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64;
struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like;
struct __pyx_opt_args_7cytimes_5utils_arr_assure_float64;
struct __pyx_opt_args_7cytimes_5utils_arr_clamp;
struct __pyx_opt_args_7cytimes_5utils_arr_min;
struct __pyx_opt_args_7cytimes_5utils_arr_max;
struct __pyx_opt_args_7cytimes_5utils_arr_min_arr;
struct __pyx_opt_args_7cytimes_5utils_arr_max_arr;
struct __pyx_opt_args_7cytimes_5utils_arr_abs;
struct __pyx_opt_args_7cytimes_5utils_arr_neg;
struct __pyx_opt_args_7cytimes_5utils_arr_add;
struct __pyx_opt_args_7cytimes_5utils_arr_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_mod;
struct __pyx_opt_args_7cytimes_5utils_arr_div_even;
struct __pyx_opt_args_7cytimes_5utils_arr_div_even_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_div_up;
struct __pyx_opt_args_7cytimes_5utils_arr_div_up_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_div_down;
struct __pyx_opt_args_7cytimes_5utils_arr_div_down_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil;
struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_div_floor;
struct __pyx_opt_args_7cytimes_5utils_arr_div_floor_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc;
struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc_mul;
struct __pyx_opt_args_7cytimes_5utils_arr_add_arr;
struct __pyx_opt_args_7cytimes_5utils_arr_sub_arr;
struct __pyx_opt_args_7cytimes_5utils_arr_mul_arr;
struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_quarter;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_month;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_weekday;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_hour;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_minute;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_second;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_millisecond;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_microsecond;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_nanosecond;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_times;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isocalendar;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoyear;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweek;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweekday;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_leap_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_long_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_leap_bt_years;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_year;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_quarter;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_quarter;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_quarter;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_month;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Q;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns;
struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_W_iso;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ord;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ts;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_unit;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_add_delta;
struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_dates;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_times;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_round;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_ceil;
struct __pyx_opt_args_7cytimes_5utils_dt64arr_floor;
struct __pyx_opt_args_7cytimes_5utils_td64arr_as_int64_us;
struct __pyx_opt_args_7cytimes_5utils__td64arr_Y_as_int64_D;
struct __pyx_opt_args_7cytimes_5utils__td64arr_M_as_int64_D;

/* "utils.pxd":151
 *         int  tm_isdst
 * 
 * ctypedef struct ymd:             # <<<<<<<<<<<<<<
 *     int year
 *     int month
*/
struct __pyx_t_7cytimes_5utils_ymd {
  int year;
  int month;
  int day;
};

/* "utils.pxd":156
 *     int day
 * 
 * ctypedef struct hmsf:             # <<<<<<<<<<<<<<
 *     int hour
 *     int minute
*/
struct __pyx_t_7cytimes_5utils_hmsf {
  int hour;
  int minute;
  int second;
  int microsecond;
};

/* "utils.pxd":162
 *     int microsecond
 * 
 * ctypedef struct sf:             # <<<<<<<<<<<<<<
 *     int second
 *     int microsecond
*/
struct __pyx_t_7cytimes_5utils_sf {
  int second;
  int microsecond;
};

/* "utils.pxd":166
 *     int microsecond
 * 
 * ctypedef struct dtm:             # <<<<<<<<<<<<<<
 *     int year
 *     int month
*/
struct __pyx_t_7cytimes_5utils_dtm {
  int year;
  int month;
  int day;
  int hour;
  int minute;
  int second;
  int microsecond;
};

/* "utils.pxd":175
 *     int microsecond
 * 
 * ctypedef struct iso:             # <<<<<<<<<<<<<<
 *     int year
 *     int week
*/
struct __pyx_t_7cytimes_5utils_iso {
  int year;
  int week;
  int weekday;
};

/* "utils.pxd":181
 * 
 * # Math -------------------------------------------------------------------------------------------------
 * cdef inline long long math_mod(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Compute module with Python semantics `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_mod {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":207
 *     return r + offset
 * 
 * cdef inline long long math_div_even(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round to nearest, ties-to-even (bankers' rounding) `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_even {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":242
 *     return q + offset
 * 
 * cdef inline long long math_div_up(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half away from zero (round-half-up) `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_up {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":277
 *     return q + offset
 * 
 * cdef inline long long math_div_down(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half toward zero (round-half-down) `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_down {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":312
 *     return q + offset
 * 
 * cdef inline long long math_div_ceil(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical ceiling `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_ceil {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":340
 *     return q + offset
 * 
 * cdef inline long long math_div_floor(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical floor `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_floor {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":368
 *     return q + offset
 * 
 * cdef inline long long math_div_trunc(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide and truncate toward zero (C/CPython style) `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_math_div_trunc {
  int __pyx_n;
  PY_LONG_LONG offset;
};

/* "utils.pxd":515
 * 
 * # . check: string
 * cdef inline bint is_str_dot(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character dot `'.'` `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_dot {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":532
 *     return is_dot(str_read(token, 0))
 * 
 * cdef inline bint is_str_comma(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character comma `','` `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_comma {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":549
 *     return is_comma(str_read(token, 0))
 * 
 * cdef inline bint is_str_iso_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO 8601 date-time separator `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_iso_sep {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":568
 *     return is_iso_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_date_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character date-field seperator `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_date_sep {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":587
 *     return is_date_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_time_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character time-field seperator `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_time_sep {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":606
 *     return is_time_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_isoweek_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO week designator `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_isoweek_sep {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":625
 *     return is_isoweek_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control charactor `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":644
 *     return is_ascii_ctl(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl_or_space(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control or space charactor `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl_or_space {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":664
 *     return is_ascii_ctl_or_space(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_digits(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains ASCII digits `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":687
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_upper(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains uppercase ASCII letters `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_upper {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":710
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_lower(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains lowercase ASCII letters `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_lower {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":733
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains letters (case-insensitive) `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":756
 *     return True
 * 
 * cdef inline bint is_str_alphas(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains alphabetic characters `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_str_alphas {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":780
 * 
 * # . parse
 * cdef inline int parse_numeric_kind(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Classify `token` string as certain numeric kind `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":822
 *     return 2 if has_dot else 1
 * 
 * cdef inline int parse_isoyear(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format year component (YYYY) from a string,
 *     returns `-1` for invalid ISO years `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isoyear {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":869
 *     return out if out > 0 else -1
 * 
 * cdef inline int parse_isomonth(str token, Py_ssize_t pos, Py_ssize_t token_len=-1)  except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format month component (MM) from a string,
 *     returns `-1` for invalid ISO months `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isomonth {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":908
 *     return out if 1 <= out <= 12 else -1
 * 
 * cdef inline int parse_isoday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format day component (DD) from a string,
 *     returns `-1` for invalid ISO days `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isoday {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":947
 *     return out if 1 <= out <= 31 else -1
 * 
 * cdef inline int parse_isoweek(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format week number component (WW) from a string,
 *     returns `-1` for invalid ISO week number `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isoweek {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":986
 *     return out if 1 <= out <= 53 else -1
 * 
 * cdef inline int parse_isoweekday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format weekday component (D) from a string,
 *     returns `-1` for invalid ISO weekdays `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1016
 *     return out if 1 <= out <= 7 else -1
 * 
 * cdef inline int parse_isodoy(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format day-of-year component (DDD) from a string,
 *     returns `-1` for invalid ISO day of the year `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isodoy {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1059
 *     return out if 1 <= out <= 366 else -1
 * 
 * cdef inline int parse_isohour(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format hour (HH) component from a string,
 *     returns `-1` for invalid ISO hours `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isohour {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1098
 *     return out if 0 <= out <= 23 else -1
 * 
 * cdef inline int parse_isominute(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format minute (MM) component from a string,
 *     returns `-1` for invalid ISO minutes `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isominute {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1137
 *     return out if 0 <= out <= 59 else -1
 * 
 * cdef inline int parse_isosecond(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format second (SS) component from a string,
 *     returns `-1` for invalid ISO seconds `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isosecond {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1155
 *     return parse_isominute(token, pos, token_len)
 * 
 * cdef inline int parse_isofraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO fractional time component (fractions of a second) from a string,
 *     returns `-1` for invalid ISO fraction `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_parse_isofraction {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1194
 *     return scale_fraction_to_us(out, f_size)
 * 
 * cdef inline sf parse_second_and_fraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Parse a `seconds` token with an optional fractional part into (second, microsecond) `<'struct:sf'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_parse_second_and_fraction {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1307
 * 
 * # . slice and convert
 * cdef inline unsigned long long slice_to_uint(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to an unsigned integer `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_slice_to_uint {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":1359
 *     return out
 * 
 * cdef inline double slice_to_ufloat(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to a non-negative double-precision float `<'float'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "utils.pxd":2679
 * # datetime.date ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.date date_new(int year=1, int month=1, int day=1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new date `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_new {
  int __pyx_n;
  int year;
  int month;
  int day;
  PyObject *dclass;
};

/* "utils.pxd":2697
 *     return datetime.date_new(year, month, day)
 * 
 * cdef inline datetime.date date_now(object tzinfo=None, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Get today's date `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_now {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dclass;
};

/* "utils.pxd":2821
 * 
 * # . conversion: from
 * cdef inline datetime.date date_fr_us(long long value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from microseconds since the Unix epoch `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_us {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2832
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_sec(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from seconds since the Unix epoch `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_sec {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2843
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ord(int value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_ord {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2854
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_iso(int year, int week, int weekday, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from ISO calendar values (year, week, weekday) `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_iso {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2869
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_doy(int year, int doy, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from Gregorian year and day-of-year `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_doy {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2882
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ts(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a POSIX timestamp in **local** time `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_ts {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2894
 *     return date if dclass is None else date_fr_date(date, dclass)
 * 
 * cdef inline datetime.date date_fr_date(datetime.date date, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from another date (or subclass) `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_date {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2910
 *     return date_new(date.year, date.month, date.day, dclass)
 * 
 * cdef inline datetime.date date_fr_dt(datetime.datetime dt, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a datetime (include subclass) `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_fr_dt {
  int __pyx_n;
  PyObject *dclass;
};

/* "utils.pxd":2922
 * 
 * # . manipulation
 * cdef inline datetime.date date_replace(datetime.date date, int year=-1, int month=-1, int day=-1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Replace specified fields in date `<'datetime.date'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_date_replace {
  int __pyx_n;
  int year;
  int month;
  int day;
  PyObject *dclass;
};

/* "utils.pxd":2956
 *     return date_new(year, month, day, dclass)
 * 
 * cdef inline datetime.date date_add_delta(datetime.date date,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/
struct __pyx_opt_args_7cytimes_5utils_date_add_delta {
  int __pyx_n;
  int years;
  int quarters;
  int months;
  int weeks;
  PY_LONG_LONG days;
  PY_LONG_LONG hours;
  PY_LONG_LONG minutes;
  PY_LONG_LONG seconds;
  PY_LONG_LONG milliseconds;
  PY_LONG_LONG microseconds;
  int year;
  int month;
  int day;
  int weekday;
  int hour;
  int minute;
  int second;
  int millisecond;
  int microsecond;
  PyObject *dclass;
};

/* "utils.pxd":3067
 * # datetime.datetime ------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.datetime dt_new(             # <<<<<<<<<<<<<<
 *     int year=1, int month=1, int day=1, int hour=0, int minute=0, int second=0,
 *     int microsecond=0, object tzinfo=None, int fold=0, object dtclass=None,
*/
struct __pyx_opt_args_7cytimes_5utils_dt_new {
  int __pyx_n;
  int year;
  int month;
  int day;
  int hour;
  int minute;
  int second;
  int microsecond;
  PyObject *tzinfo;
  int fold;
  PyObject *dtclass;
};

/* "utils.pxd":3106
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.datetime dt_now(object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current datetime `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_now {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3263
 *     return tm_strformat(dt_to_tm(dt, False), "".join(parts))
 * 
 * cdef inline str dt_isoformat(datetime.datetime dt, str sep="T", bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to ISO string `<'str'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_isoformat {
  int __pyx_n;
  PyObject *sep;
  int utc;
};

/* "utils.pxd":3302
 *         )
 * 
 * cdef inline tm dt_to_tm(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to 'struct:tm' `<'struct:tm'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_to_tm {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3433
 *     return "%s %s %2d %02d:%02d:%02d %04d" % (s_wkd, s_mm, dd, hh, mi, ss, yy)
 * 
 * cdef inline long long dt_to_us(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to microseconds since the Unix epoch `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_to_us {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3463
 *     return us if off is None else us - td_to_us(off)
 * 
 * cdef inline double dt_to_sec(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to seconds since the Unix epoch `<'float'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_to_sec {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3479
 *     return <double> us * 1e-6
 * 
 * cdef inline long long dt_to_ord(datetime.datetime dt, bint utc=False) except -1:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to its Gregorian ordinal day `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_to_ord {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3548
 *     return t + (<double> dt.microsecond) * 1e-6
 * 
 * cdef inline long long dt_as_epoch(datetime.datetime dt, str as_unit, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count since the Unix epoch `<'int'>`,
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3656
 *     _raise_invalid_nptime_str_unit_error(as_unit)
 * 
 * cdef inline long long dt_as_epoch_W_iso(datetime.datetime dt, int weekday, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count of whole
 *     weeks since the Unix epoch, where weeks are aligned to a chosen
*/
struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch_W_iso {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":3688
 * 
 * # . conversion: from
 * cdef inline datetime.datetime dt_fr_us(long long value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from microseconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_us {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3703
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_sec(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from seconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_sec {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3714
 *     return dt_fr_us(sec_to_us(value), tzinfo, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ord(int value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_ord {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3726
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_iso(int year, int week, int weekday, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from ISO calendar values (year, week, weekday) `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_iso {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3742
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_doy(int year, int doy, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from Gregorian year and day-of-year `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_doy {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3756
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ts(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a POSIX timestamp with optional timezone `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_ts {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3775
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_date(datetime.date date, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from date (include subclass) `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_date {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3787
 *     return dt_new(date.year, date.month, date.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_dt(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from another datetime (include subclass) `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":3806
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_time(datetime.time time, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from time (include subclass) `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_fr_time {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":3820
 *     )
 * 
 * cdef inline datetime.datetime dt_combine(datetime.date date=None, datetime.time time=None, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a `datetime.datetime` by combining a date and a time `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_combine {
  int __pyx_n;
  PyDateTime_Date *date;
  PyDateTime_Time *time;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":3852
 * 
 * # . manipulation
 * cdef inline datetime.datetime dt_add(datetime.datetime dt, int days=0, int seconds=0, int microseconds=0, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Add a day/second/microsecond delta to a `datetime.datetime` `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_add {
  int __pyx_n;
  int days;
  int seconds;
  int microseconds;
  PyObject *dtclass;
};

/* "utils.pxd":3904
 *     )
 * 
 * cdef inline datetime.datetime dt_add_delta(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/
struct __pyx_opt_args_7cytimes_5utils_dt_add_delta {
  int __pyx_n;
  int years;
  int quarters;
  int months;
  int weeks;
  PY_LONG_LONG days;
  PY_LONG_LONG hours;
  PY_LONG_LONG minutes;
  PY_LONG_LONG seconds;
  PY_LONG_LONG milliseconds;
  PY_LONG_LONG microseconds;
  int year;
  int month;
  int day;
  int weekday;
  int hour;
  int minute;
  int second;
  int millisecond;
  int microsecond;
  PyObject *dtclass;
};

/* "utils.pxd":4038
 *     return dt_new(yy, mm, dd, hh, mi, ss, us, dt.tzinfo, dt.fold, dtclass)
 * 
 * cdef inline datetime.datetime dt_replace(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int year=-1, int month=-1, int day=-1, int hour=-1, int minute=-1,
 *     int second=-1, int microsecond=-1, object tzinfo=-1, int fold=-1,
*/
struct __pyx_opt_args_7cytimes_5utils_dt_replace {
  int __pyx_n;
  int year;
  int month;
  int day;
  int hour;
  int minute;
  int second;
  int microsecond;
  PyObject *tzinfo;
  int fold;
  PyObject *dtclass;
};

/* "utils.pxd":4103
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz_fold(datetime.datetime dt, object tzinfo, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` and `fold` replaced `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz_fold {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":4131
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz(datetime.datetime dt, object tzinfo, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` replaced `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":4154
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_fold(datetime.datetime dt, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `fold` set to 0 or 1 `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":4182
 * 
 * # . check
 * cdef inline int dt_compare(datetime.datetime dt1, datetime.datetime dt2, bint allow_mixed = False) except -2:             # <<<<<<<<<<<<<<
 *     """Three-way comparison between two datetimes on a common microsecond timeline `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_compare {
  int __pyx_n;
  int allow_mixed;
};

/* "utils.pxd":4354
 *     return tz_utcoffset(dt.tzinfo, dt)
 * 
 * cdef inline datetime.datetime dt_astimezone(datetime.datetime dt, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to another timezone `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_astimezone {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":4431
 *     return to_tz.fromutc(dt_fr_us(us, to_tz, dtclass))
 * 
 * cdef inline datetime.datetime dt_normalize_tz(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Normalize an aware datetime against its own tzinfo `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt_normalize_tz {
  int __pyx_n;
  PyObject *dtclass;
};

/* "utils.pxd":4484
 * # datetime.time ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.time time_new(             # <<<<<<<<<<<<<<
 *     int hour=0, int minute=0, int second=0, int microsecond=0,
 *     object tzinfo=None, int fold=0, object tclass=None,
*/
struct __pyx_opt_args_7cytimes_5utils_time_new {
  int __pyx_n;
  int hour;
  int minute;
  int second;
  int microsecond;
  PyObject *tzinfo;
  int fold;
  PyObject *tclass;
};

/* "utils.pxd":4517
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.time time_now(object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current time `<'datetime.time'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_now {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *tclass;
};

/* "utils.pxd":4559
 * 
 * # . conversion: to
 * cdef inline str time_isoformat(datetime.time time, bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to ISO string `<'str'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_isoformat {
  int __pyx_n;
  int utc;
};

/* "utils.pxd":4606
 * 
 * # . conversion: from
 * cdef inline datetime.time time_fr_us(long long value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from microseconds since the Unix epoch `<'datetime.time'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_fr_us {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *tclass;
};

/* "utils.pxd":4621
 *     )
 * 
 * cdef inline datetime.time time_fr_sec(double value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from seconds since the Unix epoch `<'datetime.time'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_fr_sec {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *tclass;
};

/* "utils.pxd":4632
 *     return time_fr_us(sec_to_us(value), tzinfo, tclass)
 * 
 * cdef inline datetime.time time_fr_time(datetime.time time, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from another time (include subclass) `<'datetime.time'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_fr_time {
  int __pyx_n;
  PyObject *tclass;
};

/* "utils.pxd":4651
 *     )
 * 
 * cdef inline datetime.time time_fr_dt(datetime.datetime dt, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from datetime (include subclass) `<'datetime.time'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_time_fr_dt {
  int __pyx_n;
  PyObject *tclass;
};

/* "utils.pxd":4667
 * # datetime.timedelta -----------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.timedelta td_new(int days=0, int seconds=0, int microseconds=0, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new timedelta `<'datetime.timedelta'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td_new {
  int __pyx_n;
  int days;
  int seconds;
  int microseconds;
  PyObject *tdclass;
};

/* "utils.pxd":4803
 * 
 * # . conversion: from
 * cdef inline datetime.timedelta td_fr_us(long long value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from microseconds `<'datetime.timedelta'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td_fr_us {
  int __pyx_n;
  PyObject *tdclass;
};

/* "utils.pxd":4822
 *     return td_new(dd, ss, us, tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_sec(double value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from seconds `<'datetime.timedelta'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td_fr_sec {
  int __pyx_n;
  PyObject *tdclass;
};

/* "utils.pxd":4832
 *     return td_fr_us(sec_to_us(value), tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_td(datetime.timedelta td, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from another timedelta (or subclass) `<'datetime.timedelta'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td_fr_td {
  int __pyx_n;
  PyObject *tdclass;
};

/* "utils.pxd":4850
 * # datetime.tzinfo --------------------------------------------------------------------------------------
 * # . generate
 * cdef inline object tz_new(int hours=0, int minites=0, int seconds=0):             # <<<<<<<<<<<<<<
 *     """Create a new fixed-offset timezone `<'datetime.timezone'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_new {
  int __pyx_n;
  int hours;
  int minites;
  int seconds;
};

/* "utils.pxd":4872
 *     return datetime.timezone_new(datetime.timedelta_new(0, sec, 0), None)
 * 
 * cdef inline object tz_local(datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Get the process-local timezone `<'zoneinfo.ZoneInfo/datetime.timezone'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_local {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":4890
 *     return _LOCAL_TIMEZONE
 * 
 * cdef inline int tz_local_sec(datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the local UTC offset (in whole seconds) at the given instant `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_local_sec {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":4964
 * 
 * # . access
 * cdef inline str tz_name(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the display name from a tzinfo `<'str/None'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_name {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":4987
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_dst(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the DST offset of a tzinfo `<'timedelta/None'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_dst {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":5010
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_utcoffset(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset from a tzinfo `<'timedelta/None'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":5033
 *         raise err
 * 
 * cdef inline int tz_utcoffset_sec(object tz, datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in total seconds from a tzinfo `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset_sec {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":5054
 *     return sec
 * 
 * cdef inline str tz_utcformat(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in ISO format string (HHMM) from a tzinfo `<'str/None'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_tz_utcformat {
  int __pyx_n;
  PyDateTime_DateTime *dt;
};

/* "utils.pxd":5351
 * 
 * # . conversion
 * cdef inline np.npy_int64 dt64_as_int64_us(object dt64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.datetime64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64_as_int64_us {
  int __pyx_n;
  npy_int64 offset;
};

/* "utils.pxd":5397
 *     _raise_dt64_to_reso_error(dt64, "us")
 * 
 * cdef inline np.npy_int64 _dt64_Y_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[Y] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D {
  int __pyx_n;
  npy_int64 factor;
  npy_int64 offset;
};

/* "utils.pxd":5413
 *     return (value * 365 + leaps) * factor + offset
 * 
 * cdef inline np.npy_int64 _dt64_M_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[M] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/
struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D {
  int __pyx_n;
  npy_int64 factor;
  npy_int64 offset;
};

/* "utils.pxd":5435
 *     return (yy_ep * 365 + leaps + days_bf_month(yy, mm)) * factor + offset
 * 
 * cdef inline datetime.datetime dt64_to_dt(object dt64, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.datetime64 to datetime `<'datetime.datetime'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64_to_dt {
  int __pyx_n;
  PyObject *tzinfo;
  PyObject *dtclass;
};

/* "utils.pxd":5509
 * 
 * # . conversion
 * cdef inline np.npy_int64 td64_as_int64_us(object td64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.timedelta64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td64_as_int64_us {
  int __pyx_n;
  npy_int64 offset;
};

/* "utils.pxd":5555
 *     _raise_dt64_to_reso_error(td64, "us")
 * 
 * cdef inline np.npy_int64 _td64_Y_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[Y] to int64 day ticks using an average
 *     year (365.2425 D), then further adjust the resolution by `to_reso` and
*/
struct __pyx_opt_args_7cytimes_5utils__td64_Y_as_int64_D {
  int __pyx_n;
  npy_int64 offset;
};

/* "utils.pxd":5604
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline np.npy_int64 _td64_M_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[M] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust
*/
struct __pyx_opt_args_7cytimes_5utils__td64_M_as_int64_D {
  int __pyx_n;
  npy_int64 offset;
};

/* "utils.pxd":5653
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline datetime.timedelta td64_to_td(object td64, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.timedelta64 to timedelta `<'datetime.timedelta'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td64_to_td {
  int __pyx_n;
  PyObject *tdclass;
};

/* "utils.pxd":5731
 * 
 * # . dtype
 * cdef inline np.ndarray arr_assure_int64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype int64 `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 {
  int __pyx_n;
  int copy;
};

/* "utils.pxd":5756
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_int64_like(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype
 *     int64 / datetime64[*] / timedelta64[*] `<'ndarray[int64*]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like {
  int __pyx_n;
  int copy;
};

/* "utils.pxd":5786
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_float64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype float64 `<'ndarray[float64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_assure_float64 {
  int __pyx_n;
  int copy;
};

/* "utils.pxd":5852
 * 
 * # . range
 * cdef inline np.ndarray arr_clamp(np.ndarray arr, np.npy_int64 minimum, np.npy_int64 maximum, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Clamp the values of a 1-D ndarray between 'minimum' and 'maximum' value `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_clamp {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":5913
 *     return out
 * 
 * cdef inline np.ndarray arr_min(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_min {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":5965
 *     return out
 * 
 * cdef inline np.ndarray arr_max(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_max {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6017
 *     return out
 * 
 * cdef inline np.ndarray arr_min_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_min_arr {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6089
 *     return out
 * 
 * cdef inline np.ndarray arr_max_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_max_arr {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6161
 * 
 * # . arithmetic
 * cdef inline np.ndarray arr_abs(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise absolute of a 1-D array `<'ndarray[int64]'`>
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_abs {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6212
 *     return out
 * 
 * cdef inline np.ndarray arr_neg(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Negate the values of a 1-D array `<'ndarray[int64]'>`
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_neg {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6249
 *     return out
 * 
 * cdef inline np.ndarray arr_add(np.ndarray arr, np.npy_int64 value, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Add a 'value' to the 1-D array `<'np.ndarray'>`
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_add {
  int __pyx_n;
  int copy;
};

/* "utils.pxd":6290
 *     return out
 * 
 * cdef inline np.ndarray arr_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Multiply the values of a 1-D array by the 'factor' `<'np.ndarray'>`
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6342
 *     return out
 * 
 * cdef inline np.ndarray arr_mod(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise modulo of a 1-D array by `factor` with Python semantics
 *     (remainder has the same sign as the divisor) `<'np.ndarray'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_mod {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6401
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even) <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_even {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6455
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_even_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6515
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-up / away-from-zero) <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_up {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6566
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to nearest away from
 *     zero (half-up), then scale by 'multiple' <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_up_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6623
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest
 *     integers (half-down / toward-zero) <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_down {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6675
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-down),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_down_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6732
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6782
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6838
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_floor {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6888
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_floor_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6944
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and and truncate toward zero `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":6989
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and truncate toward zero,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/
struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc_mul {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7040
 *     return out
 * 
 * cdef inline np.ndarray arr_add_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise addition of two 1-D arrays <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_add_arr {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7093
 *     return out
 * 
 * cdef inline np.ndarray arr_sub_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise subtraction of two 1-D arrays <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_sub_arr {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7146
 *     return out
 * 
 * cdef inline np.ndarray arr_mul_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise multiplication of two 1-D arrays <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_arr_mul_arr {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7601
 * 
 * # . range check
 * cdef inline bint is_dt64arr_ns_safe(np.ndarray arr, int arr_reso=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a 1-D array can be safely represented as datetime64[ns] `<'bool'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe {
  int __pyx_n;
  int arr_reso;
};

/* "utils.pxd":7670
 * 
 * # . access
 * cdef inline np.ndarray dt64arr_year(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract civil year numbers from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_year {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7693
 *     return arr_add(out, EPOCH_YEAR + offset, False)
 * 
 * cdef inline np.ndarray dt64arr_quarter(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract quarter numbers (1..4) from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_quarter {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7735
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_month(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract month numbers (1..12) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_month {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7758
 *     return arr_mod(out, 12, offset + 1, False)
 * 
 * cdef inline np.ndarray dt64arr_weekday(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract weekday numbers (0=Mon .. 6=Sun) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_weekday {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7804
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract day-of-month (1..31) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7865
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_hour(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract hour-of-day (0..23) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_hour {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7888
 *     return arr_mod(out, 24, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_minute(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract minute-of-hour (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_minute {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7911
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_second(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract second-of-minute (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_second {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7934
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_millisecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract millisecond-of-second (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_millisecond {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7957
 *     return arr_mod(out, 1_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_microsecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract microsecond-of-second (0..999,999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_microsecond {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":7980
 *     return arr_mod(out, 1_000_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_nanosecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract nanosecond-of-microsecond (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_nanosecond {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8025
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_times(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract time-of-day (elapsed since midnight) in the same unit as `arr` <'ndarray[int64]'>.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_times {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8074
 * 
 * # . calendar
 * cdef inline np.ndarray dt64arr_isocalendar(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Return ISO-8601 calendar components for each element of a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isocalendar {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8136
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoyear(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 year numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoyear {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8173
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweek(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 week numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweek {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8210
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweekday(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 weekday numbers (1=Mon .. 7=Sun) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweekday {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8247
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_leap_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for leap years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_leap_year {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8286
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_long_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for long years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_long_year {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8325
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_leap_bt_years(np.ndarray arr, np.npy_int64 year, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Compute the number of leap years between the target `year` and elements
 *     of a 1-D datetime64 array `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_leap_bt_years {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8363
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days in the year (365/366) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_year {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8398
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days strictly before January 1 of year under the
 *     proleptic Gregorian rules from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_year {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8434
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-year from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_year {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8471
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar quarter under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_quarter {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8509
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar quarter under the proleptic Gregorian rules from a 1-D
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_quarter {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8548
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-quarter from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_quarter {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8586
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar month under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8624
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar month under the proleptic Gregorian rules from a 1-D
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_month {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":8677
 *     return arr_fill_int64(value, size).astype(nptime_unit_str2dt64(unit))
 * 
 * cdef inline np.ndarray dt64arr_as_int64(np.ndarray arr, str as_unit, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 ticks in the requested unit `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64 {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8746
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, as_unit)
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Y(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 year ticks (Y) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8823
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Q(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 quarter ticks (Q) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Q {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8867
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_M(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 month ticks (M) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8950
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_W(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":8994
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_D(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 day ticks (D) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9048
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "D")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_h(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 hour ticks (h) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9102
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "h")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_m(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 minute ticks (m) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9156
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "m")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_s(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 second ticks (s) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9210
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "s")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ms(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 millisecond ticks (ms) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9264
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ms")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9318
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ns(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 nanosecond ticks (ns) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9372
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ns")
 * 
 * cdef inline np.ndarray _dt64arr_Y_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[Y]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D {
  int __pyx_n;
  npy_int64 factor;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9405
 *     return out
 * 
 * cdef inline np.ndarray _dt64arr_M_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[M]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D {
  int __pyx_n;
  npy_int64 factor;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9438
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_W_iso(np.ndarray arr, int weekday, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) aligned to an ISO weekday `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_W_iso {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9496
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_to_ord(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 proleptic
 *     Gregorian ordinals `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ord {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":9523
 * 
 * # . conversion: float64
 * cdef inline np.ndarray dt64arr_to_ts(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to float64 Unix timestamps `<'ndarray[float64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ts {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":9579
 * 
 * # . conversion: unit
 * cdef inline np.ndarray dt64arr_as_unit(np.ndarray arr, str as_unit, int arr_reso=-1, bint limit=False, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D datetime64 array to a specifc NumPy datetime64 unit `<'ndarray[datetime64]'>`
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_unit {
  int __pyx_n;
  int arr_reso;
  int limit;
  int copy;
};

/* "utils.pxd":9798
 * 
 * # . manipulation
 * cdef inline np.ndarray dt64arr_add_delta(np.ndarray arr,             # <<<<<<<<<<<<<<
 *     np.npy_int64 years=0, np.npy_int64 quarters=0, np.npy_int64 months=0, np.npy_int64 weeks=0, np.npy_int64 days=0,
 *     np.npy_int64 hours=0, np.npy_int64 minutes=0, np.npy_int64 seconds=0, np.npy_int64 milliseconds=0,
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_add_delta {
  int __pyx_n;
  npy_int64 years;
  npy_int64 quarters;
  npy_int64 months;
  npy_int64 weeks;
  npy_int64 days;
  npy_int64 hours;
  npy_int64 minutes;
  npy_int64 seconds;
  npy_int64 milliseconds;
  npy_int64 microseconds;
  npy_int64 nanoseconds;
  int arr_reso;
};

/* "utils.pxd":9925
 *     )
 * 
 * cdef inline np.ndarray _dt64arr_add_delta_date(np.ndarray arr, np.npy_int64 years, np.npy_int64 quarters, np.npy_int64 months, np.npy_int64 weeks, np.npy_int64 days, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """(internal) Apply only the calendar delta (Y/Q/M/W/D) to an ndarray[datetime64]
 *     and return `int64` day ticks `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date {
  int __pyx_n;
  int arr_reso;
};

/* "utils.pxd":10070
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_NS)
 * 
 * cdef inline np.ndarray dt64arr_replace_dates(np.ndarray arr, np.npy_int64 year, np.npy_int64 month, np.npy_int64 day, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the Y/M/D components of an ndarray[datetime64] and return `int64` day ticks `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_dates {
  int __pyx_n;
  int arr_reso;
};

/* "utils.pxd":10139
 *     return dateD
 * 
 * cdef inline np.ndarray dt64arr_replace_times(np.ndarray arr, np.npy_int64 hour, np.npy_int64 minute, np.npy_int64 second, np.npy_int64 microsecond, np.npy_int64 nanosecond, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the h/m/s/us/ns components of an ndarray[datetime64] and return the
 *     time components `int64` ticks in the original resolution `<'ndarray[int64]'>`.
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_times {
  int __pyx_n;
  int arr_reso;
};

/* "utils.pxd":10264
 * 
 * # . arithmetic
 * cdef inline np.ndarray dt64arr_round(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Round a 1-D datetime64 array to the nearest multiple of `to_unit` (ties-to-even) `<'ndarray[datetime64]'>`
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_round {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":10448
 *     _raise_arr_dt64_rcl_error("round", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_ceil(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ceil a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_ceil {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":10632
 *     _raise_arr_dt64_rcl_error("ceil", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_floor(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Floor a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_dt64arr_floor {
  int __pyx_n;
  int arr_reso;
  int copy;
};

/* "utils.pxd":10897
 * 
 * # . conversion
 * cdef inline np.ndarray td64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[timedelta64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/
struct __pyx_opt_args_7cytimes_5utils_td64arr_as_int64_us {
  int __pyx_n;
  int arr_reso;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":10951
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray _td64arr_Y_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[Y]] to int64 day ticks using an
 *     average year (365.2425 D), then further adjust the resolution by `to_reso` and
*/
struct __pyx_opt_args_7cytimes_5utils__td64arr_Y_as_int64_D {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};

/* "utils.pxd":10987
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64 array." % to_reso)
 * 
 * cdef inline np.ndarray _td64arr_M_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[M]] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust the resolution
*/
struct __pyx_opt_args_7cytimes_5utils__td64arr_M_as_int64_D {
  int __pyx_n;
  npy_int64 offset;
  int copy;
};
struct __pyx_opt_args_7cytimes_6errors_raise_error;
struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error;
struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error;
struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error;
struct __pyx_opt_args_7cytimes_6errors_raise_argument_error;
struct __pyx_opt_args_7cytimes_6errors_raise_type_error;

/* "errors.pxd":4
 * 
 * # Raise error helpers
 * cpdef bint raise_error(object exc, object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
 * cpdef bint raise_configs_token_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_configs_value_error(object cls=?, str error_msg=?, Exception tb_exc=?)
*/
struct __pyx_opt_args_7cytimes_6errors_raise_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *input_msg;
  PyObject *error_msg;
  PyObject *tb_exc;
};

/* "errors.pxd":5
 * # Raise error helpers
 * cpdef bint raise_error(object exc, object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_configs_token_error(object cls=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
 * cpdef bint raise_configs_value_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_parser_failed_error(object cls=?, str error_msg=?, Exception tb_exc=?)
*/
struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *error_msg;
  PyObject *tb_exc;
};

/* "errors.pxd":6
 * cpdef bint raise_error(object exc, object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_configs_token_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_configs_value_error(object cls=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
 * cpdef bint raise_parser_failed_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_argument_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
*/
struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *error_msg;
  PyObject *tb_exc;
};

/* "errors.pxd":7
 * cpdef bint raise_configs_token_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_configs_value_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_parser_failed_error(object cls=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
 * cpdef bint raise_argument_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_type_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
*/
struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *error_msg;
  PyObject *tb_exc;
};

/* "errors.pxd":8
 * cpdef bint raise_configs_value_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_parser_failed_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_argument_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
 * cpdef bint raise_type_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
*/
struct __pyx_opt_args_7cytimes_6errors_raise_argument_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *input_msg;
  PyObject *error_msg;
  PyObject *tb_exc;
};

/* "errors.pxd":9
 * cpdef bint raise_parser_failed_error(object cls=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_argument_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)
 * cpdef bint raise_type_error(object cls=?, str input_msg=?, str error_msg=?, Exception tb_exc=?)             # <<<<<<<<<<<<<<
*/
struct __pyx_opt_args_7cytimes_6errors_raise_type_error {
  int __pyx_n;
  PyObject *cls;
  PyObject *input_msg;
  PyObject *error_msg;
  PyObject *tb_exc;
};
struct __pyx_opt_args_7cytimes_6parser__timelex;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc;
struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms;
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm;
struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str;
struct __pyx_opt_args_7cytimes_6parser_6Parser_parse;
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token;
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token;
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token;
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token;
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token;
struct __pyx_opt_args_7cytimes_6parser_parse;
struct __pyx_opt_args_7cytimes_6parser_parse_obj;
struct __pyx_opt_args_7cytimes_6parser_parse_month;
struct __pyx_opt_args_7cytimes_6parser_parse_weekday;

/* "cytimes/parser.pxd":13
 * 
 * # Timelex
 * ctypedef enum State:             # <<<<<<<<<<<<<<
 *     START     = 0
 *     DIGIT     = 1
*/
enum __pyx_t_7cytimes_6parser_State {
  __pyx_e_7cytimes_6parser_START = 0,
  __pyx_e_7cytimes_6parser_DIGIT = 1,
  __pyx_e_7cytimes_6parser_DIGIT_DOT = 2,
  __pyx_e_7cytimes_6parser_ALPHA = 3,
  __pyx_e_7cytimes_6parser_ALPHA_DOT = 4
};
typedef enum __pyx_t_7cytimes_6parser_State __pyx_t_7cytimes_6parser_State;

/* "cytimes/parser.pxd":20
 *     ALPHA_DOT = 4
 * 
 * cdef inline list _timelex(str data, Py_ssize_t pos, Py_ssize_t length=0):             # <<<<<<<<<<<<<<
 *     """Tokenize a datetime-like string into lexical units (tokens).
 * 
*/
struct __pyx_opt_args_7cytimes_6parser__timelex {
  int __pyx_n;
  Py_ssize_t length;
};

/* "cytimes/parser.pxd":266
 *     cpdef bint add_jump(self, str token) except -1
 *     cpdef bint remove_jump(self, str token) except -1
 *     cpdef bint replace_jump(self, set tokens=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_jump(self, str token) except -1
 *     # Pertain
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump {
  int __pyx_n;
  PyObject *tokens;
};

/* "cytimes/parser.pxd":271
 *     cpdef bint add_pertain(self, str token) except -1
 *     cpdef bint remove_pertain(self, str token) except -1
 *     cpdef bint replace_pertain(self, set tokens=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_pertain(self, str token) except -1
 *     # UTC
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain {
  int __pyx_n;
  PyObject *tokens;
};

/* "cytimes/parser.pxd":276
 *     cpdef bint add_utc(self, str token) except -1
 *     cpdef bint remove_utc(self, str token) except -1
 *     cpdef bint replace_utc(self, set tokens=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_utc(self, str token) except -1
 *     # Timezone
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc {
  int __pyx_n;
  PyObject *tokens;
};

/* "cytimes/parser.pxd":279
 *     cpdef bint is_utc(self, str token) except -1
 *     # Timezone
 *     cpdef bint add_tz(self, str token, int hours=?, int minutes=?, int seconds=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint remove_tz(self, str token) except -1
 *     cpdef bint replace_tz(self, dict mapping=?) except -1
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz {
  int __pyx_n;
  int hours;
  int minutes;
  int seconds;
};

/* "cytimes/parser.pxd":281
 *     cpdef bint add_tz(self, str token, int hours=?, int minutes=?, int seconds=?) except -1
 *     cpdef bint remove_tz(self, str token) except -1
 *     cpdef bint replace_tz(self, dict mapping=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_tz(self, str token) except -1
 *     cpdef int get_tz_offset(self, str token) except -200_000
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz {
  int __pyx_n;
  PyObject *mapping;
};

/* "cytimes/parser.pxd":287
 *     cpdef bint add_month(self, str token, int month) except -1
 *     cpdef bint remove_month(self, str token) except -1
 *     cpdef bint replace_month(self, dict mapping=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_month(self, str token) except -1
 *     cpdef int get_month(self, str token) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month {
  int __pyx_n;
  PyObject *mapping;
};

/* "cytimes/parser.pxd":293
 *     cpdef bint add_weekday(self, str token, int weekday) except -1
 *     cpdef bint remove_weekday(self, str token) except -1
 *     cpdef bint replace_weekday(self, dict mapping=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_weekday(self, str token) except -1
 *     cpdef int get_weekday(self, str token) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday {
  int __pyx_n;
  PyObject *mapping;
};

/* "cytimes/parser.pxd":299
 *     cpdef bint add_hms(self, str token, int flag) except -1
 *     cpdef bint remove_hms(self, str token) except -1
 *     cpdef bint replace_hms(self, dict mapping=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_hms(self, str token) except -1
 *     cpdef int get_hms(self, str token) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms {
  int __pyx_n;
  PyObject *mapping;
};

/* "cytimes/parser.pxd":305
 *     cpdef bint add_ampm(self, str token, int flag) except -1
 *     cpdef bint remove_ampm(self, str token) except -1
 *     cpdef bint replace_ampm(self, dict mapping=?) except -1             # <<<<<<<<<<<<<<
 *     cpdef bint is_ampm(self, str token) except -1
 *     cpdef int get_ampm(self, str token) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm {
  int __pyx_n;
  PyObject *mapping;
};

/* "cytimes/parser.pxd":351
 *     # Y/M/D
 *     cdef inline bint set_ymd_int(self, int flag, long long value) except -1
 *     cdef inline bint set_ymd_str(self, int flag, str token, Py_ssize_t token_len=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline int ymd_slots_filled(self) noexcept
 *     cdef inline int ymd_roles_resolved(self) noexcept
*/
struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str {
  int __pyx_n;
  Py_ssize_t token_len;
};

/* "cytimes/parser.pxd":385
 *         object __cls
 *     # Parse
 *     cpdef datetime.datetime parse(self, str dtstr, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, object dtclass=?)             # <<<<<<<<<<<<<<
 *     cdef inline bint _process(self, str dtstr, bint isoformat) except -1
 *     # Build
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser_parse {
  int __pyx_n;
  PyObject *__pyx_default;
  PyObject *yearfirst;
  PyObject *dayfirst;
  int ignoretz;
  int isoformat;
  PyObject *dtclass;
};

/* "cytimes/parser.pxd":413
 *     cdef inline bint _reset_token_peeks(self) noexcept
 *     # . setters
 *     cdef inline bint _set_ymd_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline bint _set_hms_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_hour_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token {
  int __pyx_n;
  PyObject *token;
  Py_ssize_t token_len;
  int token_kind;
};

/* "cytimes/parser.pxd":414
 *     # . setters
 *     cdef inline bint _set_ymd_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_hms_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline bint _set_hour_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_minute_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token {
  int __pyx_n;
  PyObject *token;
  Py_ssize_t token_len;
  int token_kind;
};

/* "cytimes/parser.pxd":415
 *     cdef inline bint _set_ymd_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_hms_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_hour_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline bint _set_minute_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_second_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token {
  int __pyx_n;
  PyObject *token;
  Py_ssize_t token_len;
  int token_kind;
};

/* "cytimes/parser.pxd":416
 *     cdef inline bint _set_hms_by_token(self, int flag, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_hour_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_minute_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline bint _set_second_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline int _adjust_hour_by_ampm(self, int hour, int flag) except -1
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token {
  int __pyx_n;
  PyObject *token;
  Py_ssize_t token_len;
  int token_kind;
};

/* "cytimes/parser.pxd":417
 *     cdef inline bint _set_hour_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_minute_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1
 *     cdef inline bint _set_second_by_token(self, str token=?, Py_ssize_t token_len=?, int token_kind=?) except -1             # <<<<<<<<<<<<<<
 *     cdef inline int _adjust_hour_by_ampm(self, int hour, int flag) except -1
 *     # Internal
*/
struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token {
  int __pyx_n;
  PyObject *token;
  Py_ssize_t token_len;
  int token_kind;
};

/* "cytimes/parser.pxd":425
 * 
 * # Parse
 * cpdef datetime.datetime parse(str dtstr, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)             # <<<<<<<<<<<<<<
 * cpdef datetime.datetime parse_obj(object dtobj, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)
 * cpdef int parse_month(object token, Configs cfg=?, bint raise_error=?) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_parse {
  int __pyx_n;
  PyObject *__pyx_default;
  PyObject *yearfirst;
  PyObject *dayfirst;
  int ignoretz;
  int isoformat;
  struct __pyx_obj_7cytimes_6parser_Configs *cfg;
  PyObject *dtclass;
};

/* "cytimes/parser.pxd":426
 * # Parse
 * cpdef datetime.datetime parse(str dtstr, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)
 * cpdef datetime.datetime parse_obj(object dtobj, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)             # <<<<<<<<<<<<<<
 * cpdef int parse_month(object token, Configs cfg=?, bint raise_error=?) except -2
 * cpdef int parse_weekday(object token, Configs cfg=?, bint raise_error=?) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_parse_obj {
  int __pyx_n;
  PyObject *__pyx_default;
  PyObject *yearfirst;
  PyObject *dayfirst;
  int ignoretz;
  int isoformat;
  struct __pyx_obj_7cytimes_6parser_Configs *cfg;
  PyObject *dtclass;
};

/* "cytimes/parser.pxd":427
 * cpdef datetime.datetime parse(str dtstr, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)
 * cpdef datetime.datetime parse_obj(object dtobj, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)
 * cpdef int parse_month(object token, Configs cfg=?, bint raise_error=?) except -2             # <<<<<<<<<<<<<<
 * cpdef int parse_weekday(object token, Configs cfg=?, bint raise_error=?) except -2
*/
struct __pyx_opt_args_7cytimes_6parser_parse_month {
  int __pyx_n;
  struct __pyx_obj_7cytimes_6parser_Configs *cfg;
  int raise_error;
};

/* "cytimes/parser.pxd":428
 * cpdef datetime.datetime parse_obj(object dtobj, object default=?, object yearfirst=?, object dayfirst=?, bint ignoretz=?, bint isoformat=?, Configs cfg=?, object dtclass=?)
 * cpdef int parse_month(object token, Configs cfg=?, bint raise_error=?) except -2
 * cpdef int parse_weekday(object token, Configs cfg=?, bint raise_error=?) except -2             # <<<<<<<<<<<<<<
*/
struct __pyx_opt_args_7cytimes_6parser_parse_weekday {
  int __pyx_n;
  struct __pyx_obj_7cytimes_6parser_Configs *cfg;
  int raise_error;
};

/* "cytimes/parser.pxd":246
 *     dict _DEFAULT_AMPM
 * 
 * cdef class Configs:             # <<<<<<<<<<<<<<
 *     cdef:
 *         # . settings
*/
struct __pyx_obj_7cytimes_6parser_Configs {
  PyObject_HEAD
  struct __pyx_vtabstruct_7cytimes_6parser_Configs *__pyx_vtab;
  int _yearfirst;
  int _dayfirst;
  PyObject *_jump;
  PyObject *_jump_ext;
  PyObject *_pertain;
  PyObject *_pertain_ext;
  PyObject *_utc;
  PyObject *_utc_ext;
  PyObject *_tz;
  PyObject *_tz_ext;
  PyObject *_month;
  PyObject *_month_ext;
  PyObject *_weekday;
  PyObject *_weekday_ext;
  PyObject *_hms;
  PyObject *_hms_ext;
  PyObject *_ampm;
  PyObject *_ampm_ext;
  PyObject *_Configs__cls;
};


/* "cytimes/parser.pxd":326
 * 
 * # Parser
 * cdef class Result:             # <<<<<<<<<<<<<<
 *     cdef:
 *         # . Y/M/D
*/
struct __pyx_obj_7cytimes_6parser_Result {
  PyObject_HEAD
  struct __pyx_vtabstruct_7cytimes_6parser_Result *__pyx_vtab;
  int _ymd[3];
  int _idx;
  int _yidx;
  int _midx;
  int _didx;
  int _resolved;
  int year;
  int month;
  int day;
  int hour;
  int minute;
  int second;
  int microsecond;
  int weekday;
  int doy;
  int ampm;
  int tzoffset;
  int tzoffset_finalized;
  int century_specified;
};


/* "cytimes/parser.pxd":374
 *     cdef inline bint _reset(self) noexcept
 * 
 * cdef class Parser:             # <<<<<<<<<<<<<<
 *     cdef:
 *         bint _ignoretz
*/
struct __pyx_obj_7cytimes_6parser_Parser {
  PyObject_HEAD
  struct __pyx_vtabstruct_7cytimes_6parser_Parser *__pyx_vtab;
  int _ignoretz;
  struct __pyx_obj_7cytimes_6parser_Configs *_cfg;
  struct __pyx_obj_7cytimes_6parser_Result *_res;
  Py_ssize_t _pos;
  Py_ssize_t _length;
  PyObject *_tokens;
  PyObject *_token1;
  PyObject *_Parser__cls;
};



/* "cytimes/parser.py":125
 * 
 * @cython.cclass
 * class Configs:             # <<<<<<<<<<<<<<
 *     """Configuration for the `<'Parser'>`.
 * 
*/

struct __pyx_vtabstruct_7cytimes_6parser_Configs {
  PyObject *(*order_hint)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch);
  int (*add_jump)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*remove_jump)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_jump)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump *__pyx_optional_args);
  int (*is_jump)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_pertain)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*remove_pertain)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_pertain)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain *__pyx_optional_args);
  int (*is_pertain)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_utc)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*remove_utc)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_utc)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc *__pyx_optional_args);
  int (*is_utc)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_tz)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz *__pyx_optional_args);
  int (*remove_tz)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_tz)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz *__pyx_optional_args);
  int (*is_tz)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*get_tz_offset)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_month)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch);
  int (*remove_month)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_month)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month *__pyx_optional_args);
  int (*is_month)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*get_month)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_weekday)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch);
  int (*remove_weekday)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_weekday)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday *__pyx_optional_args);
  int (*is_weekday)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*get_weekday)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_hms)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch);
  int (*remove_hms)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_hms)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms *__pyx_optional_args);
  int (*is_hms)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*get_hms)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*add_ampm)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch);
  int (*remove_ampm)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*replace_ampm)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm *__pyx_optional_args);
  int (*is_ampm)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*get_ampm)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch);
  int (*clear_settings)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch);
  int (*reset_settings)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch);
  PyObject *(*_ensure_str_token)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
  PyObject *(*_validate_token)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
  PyObject *(*_lowercase_token)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
  PyObject *(*_gen_token_case_variants)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *);
  int (*_ensure_int_value)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
  int (*_validate_value)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int, int);
  PyObject *(*_cls)(struct __pyx_obj_7cytimes_6parser_Configs *);
};
static struct __pyx_vtabstruct_7cytimes_6parser_Configs *__pyx_vtabptr_7cytimes_6parser_Configs;
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__ensure_str_token(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__validate_token(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__lowercase_token(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__validate_value(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int, int);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__cls(struct __pyx_obj_7cytimes_6parser_Configs *);


/* "cytimes/parser.py":1580
 * # Parser --------------------------------------------------------------------------------------
 * @cython.cclass
 * class Result:             # <<<<<<<<<<<<<<
 *     """Parsed datetime result container for the Parser.
 * 
*/

struct __pyx_vtabstruct_7cytimes_6parser_Result {
  int (*set_ymd_int)(struct __pyx_obj_7cytimes_6parser_Result *, int, PY_LONG_LONG);
  int (*set_ymd_str)(struct __pyx_obj_7cytimes_6parser_Result *, int, PyObject *, struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str *__pyx_optional_args);
  int (*ymd_slots_filled)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*ymd_roles_resolved)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*could_be_day)(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG);
  int (*could_be_doy)(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG);
  int (*resolve)(struct __pyx_obj_7cytimes_6parser_Result *, int, int);
  int (*valid)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_year_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_month_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_day_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_hour_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_minute_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_second_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_microsecond_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_weekday_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_doy_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_ampm_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*is_tzoffset_set)(struct __pyx_obj_7cytimes_6parser_Result *);
  int (*_record_ymd)(struct __pyx_obj_7cytimes_6parser_Result *, int, int);
  int (*_reset)(struct __pyx_obj_7cytimes_6parser_Result *);
};
static struct __pyx_vtabstruct_7cytimes_6parser_Result *__pyx_vtabptr_7cytimes_6parser_Result;
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_int(struct __pyx_obj_7cytimes_6parser_Result *, int, PY_LONG_LONG);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_str(struct __pyx_obj_7cytimes_6parser_Result *, int, PyObject *, struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_roles_resolved(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_day(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_doy(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_resolve(struct __pyx_obj_7cytimes_6parser_Result *, int, int);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_valid(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_year_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_month_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_day_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_hour_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_minute_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_second_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_weekday_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_doy_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_ampm_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(struct __pyx_obj_7cytimes_6parser_Result *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__record_ymd(struct __pyx_obj_7cytimes_6parser_Result *, int, int);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__reset(struct __pyx_obj_7cytimes_6parser_Result *);


/* "cytimes/parser.py":2292
 * 
 * @cython.cclass
 * class Parser:             # <<<<<<<<<<<<<<
 *     """Flexible date/time parser with ISO fast-path and token heuristics.
 * 
*/

struct __pyx_vtabstruct_7cytimes_6parser_Parser {
  PyDateTime_DateTime *(*parse)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_6Parser_parse *__pyx_optional_args);
  int (*_process)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, int);
  PyDateTime_DateTime *(*_build)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *);
  PyDateTime_DateTime *(*_gen_dt)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *);
  int (*_process_iso_format)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_iso_date)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_iso_time)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_iso_extra)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_process_timelex_tokens)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_numeric)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_month)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_iso_week)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_weekday)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_ampm)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_tzname)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_parse_token_tzoffset)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
  int (*_has_token)(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t);
  PyObject *(*_get_token)(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t);
  PyObject *(*_get_token1)(struct __pyx_obj_7cytimes_6parser_Parser *);
  PyObject *(*_get_next_token)(struct __pyx_obj_7cytimes_6parser_Parser *);
  int (*_reset_token_peeks)(struct __pyx_obj_7cytimes_6parser_Parser *);
  int (*_set_ymd_by_token)(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token *__pyx_optional_args);
  int (*_set_hms_by_token)(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token *__pyx_optional_args);
  int (*_set_hour_by_token)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token *__pyx_optional_args);
  int (*_set_minute_by_token)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token *__pyx_optional_args);
  int (*_set_second_by_token)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token *__pyx_optional_args);
  int (*_adjust_hour_by_ampm)(struct __pyx_obj_7cytimes_6parser_Parser *, int, int);
  PyObject *(*_cls)(struct __pyx_obj_7cytimes_6parser_Parser *);
};
static struct __pyx_vtabstruct_7cytimes_6parser_Parser *__pyx_vtabptr_7cytimes_6parser_Parser;
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, int);
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__build(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *);
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__gen_dt(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_iso_format(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_date(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_time(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_numeric(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_month(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_week(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_weekday(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_ampm(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzname(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__has_token(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token1(struct __pyx_obj_7cytimes_6parser_Parser *);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_next_token(struct __pyx_obj_7cytimes_6parser_Parser *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(struct __pyx_obj_7cytimes_6parser_Parser *);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hms_by_token(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_minute_by_token(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_second_by_token(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token *__pyx_optional_args);
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(struct __pyx_obj_7cytimes_6parser_Parser *, int, int);
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__cls(struct __pyx_obj_7cytimes_6parser_Parser *);
/* #### 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);

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

/* 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

/* GetException.proto */
#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

/* PyImportError_Check.proto */
#define __Pyx_PyExc_ImportError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_ImportError)

/* 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);

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

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

/* ModInt[long].proto */
static CYTHON_INLINE long __Pyx_mod_long(long, long, int b_is_constant);

/* PyZeroDivisionError_Check.proto */
#define __Pyx_PyExc_ZeroDivisionError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_ZeroDivisionError)

/* PyOverflowError_Check.proto */
#define __Pyx_PyExc_OverflowError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_OverflowError)

/* py_unicode_predicate.proto */
#if CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_Py_UNICODE_ISALPHA(Py_UCS4 uchar);
#else
#define __Pyx_Py_UNICODE_ISALPHA(u)  Py_UNICODE_ISALPHA(u)
#endif

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

/* 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>

/* IncludeStringH.proto (used by CIntToPyUnicode) */
#include <string.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);

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

/* PyUnicode_Substring.proto */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
            PyObject* text, Py_ssize_t start, Py_ssize_t stop);

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

/* 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

/* 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);

/* 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))

/* PyMemoryError_Check.proto */
#define __Pyx_PyExc_MemoryError_Check(obj)  __Pyx_TypeCheck(obj, PyExc_MemoryError)

/* 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

/* ModInt[PY_LONG_LONG].proto */
static CYTHON_INLINE PY_LONG_LONG __Pyx_mod_PY_LONG_LONG(PY_LONG_LONG, PY_LONG_LONG, int b_is_constant);

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

/* 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

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

/* CIntToPyUnicode.proto */
#define __Pyx_PyUnicode_From_int(value, width, padding_char, format_char) (\
    ((format_char) == ('c')) ?\
        __Pyx_uchar___Pyx_PyUnicode_From_int(value, width, padding_char) :\
        __Pyx____Pyx_PyUnicode_From_int(value, width, padding_char, format_char)\
    )
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char);
static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char);

/* 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

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

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

/* 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

/* CIntToPyUnicode.proto */
#define __Pyx_PyUnicode_From_PY_LONG_LONG(value, width, padding_char, format_char) (\
    ((format_char) == ('c')) ?\
        __Pyx_uchar___Pyx_PyUnicode_From_PY_LONG_LONG(value, width, padding_char) :\
        __Pyx____Pyx_PyUnicode_From_PY_LONG_LONG(value, width, padding_char, format_char)\
    )
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_PY_LONG_LONG(PY_LONG_LONG value, Py_ssize_t width, char padding_char);
static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_PY_LONG_LONG(PY_LONG_LONG value, Py_ssize_t width, char padding_char, char format_char);

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

/* CIntToPyUnicode.proto */
#define __Pyx_PyUnicode_From_npy_intp(value, width, padding_char, format_char) (\
    ((format_char) == ('c')) ?\
        __Pyx_uchar___Pyx_PyUnicode_From_npy_intp(value, width, padding_char) :\
        __Pyx____Pyx_PyUnicode_From_npy_intp(value, width, padding_char, format_char)\
    )
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_npy_intp(npy_intp value, Py_ssize_t width, char padding_char);
static CYTHON_INLINE PyObject* __Pyx____Pyx_PyUnicode_From_npy_intp(npy_intp value, Py_ssize_t width, char padding_char, char format_char);

/* ModInt[npy_int64].proto */
static CYTHON_INLINE npy_int64 __Pyx_mod_npy_int64(npy_int64, npy_int64, int b_is_constant);

/* DivInt[npy_int64].proto */
static CYTHON_INLINE npy_int64 __Pyx_div_npy_int64(npy_int64, npy_int64, int b_is_constant);

/* PyObject_Unicode.proto */
#define __Pyx_PyObject_Unicode(obj)\
    (likely(PyUnicode_CheckExact(obj)) ? __Pyx_NewRef(obj) : PyObject_Str(obj))

/* 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))

/* 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

/* 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

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

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

/* set_iter.proto */
static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set,
                                                  Py_ssize_t* p_orig_length, int* p_source_is_set);
static CYTHON_INLINE int __Pyx_set_iter_next(
        PyObject* iter_obj, Py_ssize_t orig_length,
        Py_ssize_t* ppos, PyObject **value,
        int source_is_set);

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

/* 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);

/* CBIntToPyUnicode.proto */
#define __Pyx_PyUnicode_FromBInt_bint(value)\
    ((value) ? __Pyx_NewRef(__pyx_mstate_global->__pyx_n_u_True) : __Pyx_NewRef(__pyx_mstate_global->__pyx_n_u_False))

/* GetAttr3.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);

/* DivInt[long].proto */
static CYTHON_INLINE long __Pyx_div_long(long, long, int b_is_constant);

/* ModFloat[double].proto */
static CYTHON_INLINE double __Pyx_mod_double(double, double, int b_is_constant);

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

/* CallTypeTraverse.proto */
#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

/* VoidPtrExport.proto */
static int __Pyx_ExportVoidPtr(PyObject *api_dict, const char *name, void *p, const char *sig);

/* GetApiDict.proto */
static PyObject *__Pyx_ApiExport_GetApiDict(void);

/* FunctionExport.proto */
static int __Pyx_ExportFunction(PyObject *api_dict, const char *name, void (*f)(void), const char *sig);

/* 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 */
static CYTHON_INLINE int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);

/* 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);

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto_3_2_1
#define __PYX_HAVE_RT_ImportType_proto_3_2_1
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
#include <stdalign.h>
#endif
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
#define __PYX_GET_STRUCT_ALIGNMENT_3_2_1(s) alignof(s)
#else
#define __PYX_GET_STRUCT_ALIGNMENT_3_2_1(s) sizeof(void*)
#endif
enum __Pyx_ImportType_CheckSize_3_2_1 {
   __Pyx_ImportType_CheckSize_Error_3_2_1 = 0,
   __Pyx_ImportType_CheckSize_Warn_3_2_1 = 1,
   __Pyx_ImportType_CheckSize_Ignore_3_2_1 = 2
};
static PyTypeObject *__Pyx_ImportType_3_2_1(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_2_1 check_size);
#endif

/* VoidPtrImport.proto */
static int __Pyx_ImportVoidPtr_3_2_1(PyObject *module, const char *name, void **p, const char *sig);

/* FunctionImport.proto */
static int __Pyx_ImportFunction_3_2_1(PyObject *module, const char *funcname, void (**f)(void), const char *sig);

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

/* 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

/* 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);

/* 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);

/* ListPack.proto */
static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...);

/* 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);

/* 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);

/* CheckUnpickleChecksum.proto */
static CYTHON_INLINE int __Pyx_CheckUnpickleChecksum(long checksum, long checksum1, long checksum2, long checksum3, const char *members);

/* RealImag.proto */
#if CYTHON_CCOMPLEX
  #ifdef __cplusplus
    #define __Pyx_CREAL(z) ((z).real())
    #define __Pyx_CIMAG(z) ((z).imag())
  #else
    #define __Pyx_CREAL(z) (__real__(z))
    #define __Pyx_CIMAG(z) (__imag__(z))
  #endif
#else
    #define __Pyx_CREAL(z) ((z).real)
    #define __Pyx_CIMAG(z) ((z).imag)
#endif
#if defined(__cplusplus) && CYTHON_CCOMPLEX\
        && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
    #define __Pyx_SET_CREAL(z,x) ((z).real(x))
    #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
#else
    #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
    #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
#endif

/* Arithmetic.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
    #define __Pyx_c_eq_float(a, b)   ((a)==(b))
    #define __Pyx_c_sum_float(a, b)  ((a)+(b))
    #define __Pyx_c_diff_float(a, b) ((a)-(b))
    #define __Pyx_c_prod_float(a, b) ((a)*(b))
    #define __Pyx_c_quot_float(a, b) ((a)/(b))
    #define __Pyx_c_neg_float(a)     (-(a))
  #ifdef __cplusplus
    #define __Pyx_c_is_zero_float(z) ((z)==(float)0)
    #define __Pyx_c_conj_float(z)    (::std::conj(z))
    #if 1
        #define __Pyx_c_abs_float(z)     (::std::abs(z))
        #define __Pyx_c_pow_float(a, b)  (::std::pow(a, b))
    #endif
  #else
    #define __Pyx_c_is_zero_float(z) ((z)==0)
    #define __Pyx_c_conj_float(z)    (conjf(z))
    #if 1
        #define __Pyx_c_abs_float(z)     (cabsf(z))
        #define __Pyx_c_pow_float(a, b)  (cpowf(a, b))
    #endif
 #endif
#else
    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);
    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);
    #if 1
        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);
        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);
    #endif
#endif

/* Arithmetic.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
    #define __Pyx_c_eq_double(a, b)   ((a)==(b))
    #define __Pyx_c_sum_double(a, b)  ((a)+(b))
    #define __Pyx_c_diff_double(a, b) ((a)-(b))
    #define __Pyx_c_prod_double(a, b) ((a)*(b))
    #define __Pyx_c_quot_double(a, b) ((a)/(b))
    #define __Pyx_c_neg_double(a)     (-(a))
  #ifdef __cplusplus
    #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
    #define __Pyx_c_conj_double(z)    (::std::conj(z))
    #if 1
        #define __Pyx_c_abs_double(z)     (::std::abs(z))
        #define __Pyx_c_pow_double(a, b)  (::std::pow(a, b))
    #endif
  #else
    #define __Pyx_c_is_zero_double(z) ((z)==0)
    #define __Pyx_c_conj_double(z)    (conj(z))
    #if 1
        #define __Pyx_c_abs_double(z)     (cabs(z))
        #define __Pyx_c_pow_double(a, b)  (cpow(a, b))
    #endif
 #endif
#else
    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
    #if 1
        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
    #endif
#endif

/* Arithmetic.proto */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
    #define __Pyx_c_eq_long__double(a, b)   ((a)==(b))
    #define __Pyx_c_sum_long__double(a, b)  ((a)+(b))
    #define __Pyx_c_diff_long__double(a, b) ((a)-(b))
    #define __Pyx_c_prod_long__double(a, b) ((a)*(b))
    #define __Pyx_c_quot_long__double(a, b) ((a)/(b))
    #define __Pyx_c_neg_long__double(a)     (-(a))
  #ifdef __cplusplus
    #define __Pyx_c_is_zero_long__double(z) ((z)==(long double)0)
    #define __Pyx_c_conj_long__double(z)    (::std::conj(z))
    #if 1
        #define __Pyx_c_abs_long__double(z)     (::std::abs(z))
        #define __Pyx_c_pow_long__double(a, b)  (::std::pow(a, b))
    #endif
  #else
    #define __Pyx_c_is_zero_long__double(z) ((z)==0)
    #define __Pyx_c_conj_long__double(z)    (conjl(z))
    #if 1
        #define __Pyx_c_abs_long__double(z)     (cabsl(z))
        #define __Pyx_c_pow_long__double(a, b)  (cpowl(a, b))
    #endif
 #endif
#else
    static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex);
    static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex);
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex);
    #if 1
        static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex);
        static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex, __pyx_t_long_double_complex);
    #endif
#endif

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

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

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_PY_LONG_LONG(PY_LONG_LONG value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value);

/* CIntFromPy.proto */
static CYTHON_INLINE PY_LONG_LONG __Pyx_PyLong_As_PY_LONG_LONG(PyObject *);

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

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_npy_intp(npy_intp value);

/* CIntFromPy.proto */
static CYTHON_INLINE npy_intp __Pyx_PyLong_As_npy_intp(PyObject *);

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

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

/* UpdateUnpickledDict.proto */
static int __Pyx_UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index);

/* 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

/* 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);

/* 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 "."

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self); /* proto*/
#endif
#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self); /* proto*/
#endif
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_4year_year(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_5month_month(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_3day_day(PyDateTime_Date *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4hour_hour(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6minute_minute(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6second_second(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4fold_fold(PyDateTime_Time *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4year_year(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_5month_month(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_3day_day(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4hour_hour(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6minute_minute(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6second_second(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4fold_fold(PyDateTime_DateTime *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_3day_day(PyDateTime_Delta *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_6second_second(PyDateTime_Delta *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(PyDateTime_Delta *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/
static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/
static PyObject *__pyx_f_7cytimes_6parser_7Configs_order_hint(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_get_tz_offset(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_month, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_get_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_weekday, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_get_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_get_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_add_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_remove_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_replace_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm *__pyx_optional_args); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_is_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_get_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_clear_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static int __pyx_f_7cytimes_6parser_7Configs_reset_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__ensure_str_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__validate_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__lowercase_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_value); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__validate_value(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, int __pyx_v_value, int __pyx_v_minimum, int __pyx_v_maximum); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__cls(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_int(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, PY_LONG_LONG __pyx_v_value); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_str(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_roles_resolved(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_day(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, PY_LONG_LONG __pyx_v_value); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_doy(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, PY_LONG_LONG __pyx_v_value); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_resolve(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_yearfirst, int __pyx_v_dayfirst); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_valid(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_year_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_month_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_day_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_hour_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_minute_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_second_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_weekday_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_doy_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_ampm_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__record_ymd(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, int __pyx_v_value); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__reset(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto*/
static PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser_parse(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_6Parser_parse *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, int __pyx_v_isoformat); /* proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__build(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_dtclass); /* proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__gen_dt(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_default, PyObject *__pyx_v_tzinfo, PyObject *__pyx_v_dtclass); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_iso_format(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_date(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_time(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_numeric(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_month(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_week(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_weekday(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_ampm(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzname(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__has_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, Py_ssize_t __pyx_v_offset); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, Py_ssize_t __pyx_v_offset); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token1(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_next_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_flag, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hms_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_flag, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_minute_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_second_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token *__pyx_optional_args); /* proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_hour, int __pyx_v_flag); /* proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__cls(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self); /* proto*/

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

/* Module declarations from "__builtin__" */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* Module declarations from "__builtin__" */

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

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

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

/* Module declarations from "cython" */

/* Module declarations from "__builtin__" */

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/* Module declarations from "cpython" */

/* Module declarations from "datetime" */

/* Module declarations from "cpython.datetime" */
static CYTHON_INLINE void __pyx_f_7cpython_8datetime_import_datetime(void); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cpython_8datetime_date_new(int, int, int); /*proto*/
static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cpython_8datetime_time_new(int, int, int, int, PyObject *, struct __pyx_opt_args_7cpython_8datetime_time_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cpython_8datetime_datetime_new(int, int, int, int, int, int, int, PyObject *, struct __pyx_opt_args_7cpython_8datetime_datetime_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cpython_8datetime_timedelta_new(int, int, int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_timezone_new(PyObject *, struct __pyx_opt_args_7cpython_8datetime_timezone_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cpython_8datetime_datetime_from_timestamp(PyObject *, struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cpython_8datetime_date_from_timestamp(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_datetime_tzinfo(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_year(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_month(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_day(PyObject *); /*proto*/

/* Module declarations from "cytimes" */

/* Module declarations from "numpy" */

/* Module declarations from "numpy" */
static CYTHON_INLINE int __pyx_f_5numpy_import_array(void); /*proto*/
static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void); /*proto*/
static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *); /*proto*/
static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *); /*proto*/
static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *); /*proto*/
static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *); /*proto*/

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

/* Module declarations from "libc" */

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

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

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

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

/* Module declarations from "cpython.time" */
static CYTHON_INLINE double __pyx_f_7cpython_4time_time(void); /*proto*/
static CYTHON_INLINE int __pyx_f_7cpython_4time__raise_from_errno(void); /*proto*/
static CYTHON_INLINE struct tm __pyx_f_7cpython_4time_localtime(void); /*proto*/

/* Module declarations from "cytimes.utils" */
static int (*__pyx_vp_7cytimes_5utils_DAYS_BR_MONTH)[13] = 0;
#define __pyx_v_7cytimes_5utils_DAYS_BR_MONTH (*__pyx_vp_7cytimes_5utils_DAYS_BR_MONTH)
static int (*__pyx_vp_7cytimes_5utils_DAYS_IN_MONTH)[13] = 0;
#define __pyx_v_7cytimes_5utils_DAYS_IN_MONTH (*__pyx_vp_7cytimes_5utils_DAYS_IN_MONTH)
static int (*__pyx_vp_7cytimes_5utils_DAYS_BR_QUARTER)[5] = 0;
#define __pyx_v_7cytimes_5utils_DAYS_BR_QUARTER (*__pyx_vp_7cytimes_5utils_DAYS_BR_QUARTER)
static int (*__pyx_vp_7cytimes_5utils_DAYS_IN_QUARTER)[5] = 0;
#define __pyx_v_7cytimes_5utils_DAYS_IN_QUARTER (*__pyx_vp_7cytimes_5utils_DAYS_IN_QUARTER)
static PyObject **__pyx_vp_7cytimes_5utils_NAT = 0;
#define __pyx_v_7cytimes_5utils_NAT (*__pyx_vp_7cytimes_5utils_NAT)
static int *__pyx_vp_7cytimes_5utils_ORDINAL_MAX = 0;
#define __pyx_v_7cytimes_5utils_ORDINAL_MAX (*__pyx_vp_7cytimes_5utils_ORDINAL_MAX)
static PyDateTime_DateTime **__pyx_vp_7cytimes_5utils_EPOCH_DT = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_DT (*__pyx_vp_7cytimes_5utils_EPOCH_DT)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_YEAR = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_YEAR (*__pyx_vp_7cytimes_5utils_EPOCH_YEAR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_MONTH = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_MONTH (*__pyx_vp_7cytimes_5utils_EPOCH_MONTH)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_DAY = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_DAY (*__pyx_vp_7cytimes_5utils_EPOCH_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_HOUR = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_HOUR (*__pyx_vp_7cytimes_5utils_EPOCH_HOUR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_MINUTE = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_MINUTE (*__pyx_vp_7cytimes_5utils_EPOCH_MINUTE)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_SECOND = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_SECOND (*__pyx_vp_7cytimes_5utils_EPOCH_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_MILLISECOND = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_MILLISECOND (*__pyx_vp_7cytimes_5utils_EPOCH_MILLISECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_MICROSECOND = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_MICROSECOND (*__pyx_vp_7cytimes_5utils_EPOCH_MICROSECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_C4 = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_C4 (*__pyx_vp_7cytimes_5utils_EPOCH_C4)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_C100 = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_C100 (*__pyx_vp_7cytimes_5utils_EPOCH_C100)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_C400 = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_C400 (*__pyx_vp_7cytimes_5utils_EPOCH_C400)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_EPOCH_CBASE = 0;
#define __pyx_v_7cytimes_5utils_EPOCH_CBASE (*__pyx_vp_7cytimes_5utils_EPOCH_CBASE)
static PyDateTime_TZInfo **__pyx_vp_7cytimes_5utils_UTC = 0;
#define __pyx_v_7cytimes_5utils_UTC (*__pyx_vp_7cytimes_5utils_UTC)
static PyObject **__pyx_vp_7cytimes_5utils_T_TIMEZONE = 0;
#define __pyx_v_7cytimes_5utils_T_TIMEZONE (*__pyx_vp_7cytimes_5utils_T_TIMEZONE)
static PyObject **__pyx_vp_7cytimes_5utils_T_ZONEINFO = 0;
#define __pyx_v_7cytimes_5utils_T_ZONEINFO (*__pyx_vp_7cytimes_5utils_T_ZONEINFO)
static int *__pyx_vp_7cytimes_5utils_NULL_TZOFFSET = 0;
#define __pyx_v_7cytimes_5utils_NULL_TZOFFSET (*__pyx_vp_7cytimes_5utils_NULL_TZOFFSET)
static PyObject **__pyx_vp_7cytimes_5utils__LOCAL_TIMEZONE = 0;
#define __pyx_v_7cytimes_5utils__LOCAL_TIMEZONE (*__pyx_vp_7cytimes_5utils__LOCAL_TIMEZONE)
static PyObject **__pyx_vp_7cytimes_5utils__UTC_ALIASES = 0;
#define __pyx_v_7cytimes_5utils__UTC_ALIASES (*__pyx_vp_7cytimes_5utils__UTC_ALIASES)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_SS_MINUTE = 0;
#define __pyx_v_7cytimes_5utils_SS_MINUTE (*__pyx_vp_7cytimes_5utils_SS_MINUTE)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_SS_HOUR = 0;
#define __pyx_v_7cytimes_5utils_SS_HOUR (*__pyx_vp_7cytimes_5utils_SS_HOUR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_SS_DAY = 0;
#define __pyx_v_7cytimes_5utils_SS_DAY (*__pyx_vp_7cytimes_5utils_SS_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_MS_SECOND = 0;
#define __pyx_v_7cytimes_5utils_MS_SECOND (*__pyx_vp_7cytimes_5utils_MS_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_MS_MINUTE = 0;
#define __pyx_v_7cytimes_5utils_MS_MINUTE (*__pyx_vp_7cytimes_5utils_MS_MINUTE)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_MS_HOUR = 0;
#define __pyx_v_7cytimes_5utils_MS_HOUR (*__pyx_vp_7cytimes_5utils_MS_HOUR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_MS_DAY = 0;
#define __pyx_v_7cytimes_5utils_MS_DAY (*__pyx_vp_7cytimes_5utils_MS_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_US_MILLISECOND = 0;
#define __pyx_v_7cytimes_5utils_US_MILLISECOND (*__pyx_vp_7cytimes_5utils_US_MILLISECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_US_SECOND = 0;
#define __pyx_v_7cytimes_5utils_US_SECOND (*__pyx_vp_7cytimes_5utils_US_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_US_MINUTE = 0;
#define __pyx_v_7cytimes_5utils_US_MINUTE (*__pyx_vp_7cytimes_5utils_US_MINUTE)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_US_HOUR = 0;
#define __pyx_v_7cytimes_5utils_US_HOUR (*__pyx_vp_7cytimes_5utils_US_HOUR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_US_DAY = 0;
#define __pyx_v_7cytimes_5utils_US_DAY (*__pyx_vp_7cytimes_5utils_US_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_MICROSECOND = 0;
#define __pyx_v_7cytimes_5utils_NS_MICROSECOND (*__pyx_vp_7cytimes_5utils_NS_MICROSECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_MILLISECOND = 0;
#define __pyx_v_7cytimes_5utils_NS_MILLISECOND (*__pyx_vp_7cytimes_5utils_NS_MILLISECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_SECOND = 0;
#define __pyx_v_7cytimes_5utils_NS_SECOND (*__pyx_vp_7cytimes_5utils_NS_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_MINUTE = 0;
#define __pyx_v_7cytimes_5utils_NS_MINUTE (*__pyx_vp_7cytimes_5utils_NS_MINUTE)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_HOUR = 0;
#define __pyx_v_7cytimes_5utils_NS_HOUR (*__pyx_vp_7cytimes_5utils_NS_HOUR)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_NS_DAY = 0;
#define __pyx_v_7cytimes_5utils_NS_DAY (*__pyx_vp_7cytimes_5utils_NS_DAY)
static double *__pyx_vp_7cytimes_5utils_TD64_YY_DAY = 0;
#define __pyx_v_7cytimes_5utils_TD64_YY_DAY (*__pyx_vp_7cytimes_5utils_TD64_YY_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_YY_SECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_YY_SECOND (*__pyx_vp_7cytimes_5utils_TD64_YY_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_YY_MILLISECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_YY_MILLISECOND (*__pyx_vp_7cytimes_5utils_TD64_YY_MILLISECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_YY_MICROSECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_YY_MICROSECOND (*__pyx_vp_7cytimes_5utils_TD64_YY_MICROSECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_YY_NANOSECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_YY_NANOSECOND (*__pyx_vp_7cytimes_5utils_TD64_YY_NANOSECOND)
static double *__pyx_vp_7cytimes_5utils_TD64_MM_DAY = 0;
#define __pyx_v_7cytimes_5utils_TD64_MM_DAY (*__pyx_vp_7cytimes_5utils_TD64_MM_DAY)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_MM_SECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_MM_SECOND (*__pyx_vp_7cytimes_5utils_TD64_MM_SECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_MM_MILLISECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_MM_MILLISECOND (*__pyx_vp_7cytimes_5utils_TD64_MM_MILLISECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_MM_MICROSECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_MM_MICROSECOND (*__pyx_vp_7cytimes_5utils_TD64_MM_MICROSECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_TD64_MM_NANOSECOND = 0;
#define __pyx_v_7cytimes_5utils_TD64_MM_NANOSECOND (*__pyx_vp_7cytimes_5utils_TD64_MM_NANOSECOND)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_YY_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_YY_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_YY_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MM_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MM_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_MM_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_WW_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_WW_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_WW_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_DD_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_DD_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_DD_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_HH_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_HH_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_HH_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MI_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MI_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_MI_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_SS_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_SS_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_SS_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MS_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MS_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_MS_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_US_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_US_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_US_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_NS_MIN = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_NS_MIN (*__pyx_vp_7cytimes_5utils_DT64_NS_NS_MIN)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_YY_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_YY_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_YY_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MM_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MM_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_MM_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_WW_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_WW_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_WW_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_DD_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_DD_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_DD_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_HH_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_HH_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_HH_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MI_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MI_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_MI_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_SS_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_SS_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_SS_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_MS_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_MS_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_MS_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_US_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_US_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_US_MAX)
static PY_LONG_LONG *__pyx_vp_7cytimes_5utils_DT64_NS_NS_MAX = 0;
#define __pyx_v_7cytimes_5utils_DT64_NS_NS_MAX (*__pyx_vp_7cytimes_5utils_DT64_NS_NS_MAX)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_YY = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_YY (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_YY)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_MM = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_MM (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_MM)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_WW = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_WW (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_WW)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_DD = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_DD (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_DD)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_HH = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_HH (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_HH)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_MI = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_MI (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_MI)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_SS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_SS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_SS)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_MS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_MS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_MS)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_US = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_US (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_US)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_NS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_NS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_NS)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_PS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_PS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_PS)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_FS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_FS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_FS)
static PyObject **__pyx_vp_7cytimes_5utils_DT64_DTYPE_AS = 0;
#define __pyx_v_7cytimes_5utils_DT64_DTYPE_AS (*__pyx_vp_7cytimes_5utils_DT64_DTYPE_AS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_YY = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_YY (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_YY)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MM = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_MM (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MM)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_WW = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_WW (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_WW)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_DD = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_DD (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_DD)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_HH = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_HH (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_HH)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MI = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_MI (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MI)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_SS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_SS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_SS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_MS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_US = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_US (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_US)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_NS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_NS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_NS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_PS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_PS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_PS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_FS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_FS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_FS)
static int *__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_AS = 0;
#define __pyx_v_7cytimes_5utils_DT_NPY_UNIT_AS (*__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_AS)
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dot(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_comma(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_plus_sign(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_minus_sign(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_plus_or_minus_sign(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_iso_sep(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_date_sep(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_time_sep(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_isoweek_sep(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_ctl(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_digit(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter_upper(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter_lower(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_alpha(Py_UCS4); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_comma(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_comma *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_date_sep(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_date_sep *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_time_sep(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_time_sep *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_isoweek_sep(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_isoweek_sep *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl_or_space *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_digits(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_letters(PyObject *, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_numeric_kind(PyObject *, struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoyear(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isoyear *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isomonth(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isomonth *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoday(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isoday *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoweek(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isoweek *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoweekday(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isodoy(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isodoy *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isohour(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isohour *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isominute(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isominute *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isosecond(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isosecond *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isofraction(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_isofraction *__pyx_optional_args); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_sf __pyx_f_7cytimes_5utils_parse_second_and_fraction(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_parse_second_and_fraction *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_scale_fraction_to_us(int, int); /*proto*/
static CYTHON_INLINE unsigned PY_LONG_LONG __pyx_f_7cytimes_5utils_slice_to_uint(PyObject *, Py_ssize_t, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_slice_to_uint *__pyx_optional_args); /*proto*/
static CYTHON_INLINE double __pyx_f_7cytimes_5utils_slice_to_ufloat(PyObject *, Py_ssize_t, Py_ssize_t, struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_parse_to_int(PyObject *, int __pyx_skip_dispatch); /*proto*/
static CYTHON_INLINE double __pyx_f_7cytimes_5utils_parse_to_float(PyObject *, int __pyx_skip_dispatch); /*proto*/
static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_gmtime(double); /*proto*/
static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_localtime(double); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ts_localtime(double); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_sec_to_us(double); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tm_strformat(struct tm, PyObject *); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_hmsf __pyx_f_7cytimes_5utils_hmsf_fr_us(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_leap_year(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_long_year(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_leap_years(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_leaps_bt_years(PY_LONG_LONG, PY_LONG_LONG); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_year(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_days_bf_year(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_day_of_year(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_quarter_of_month(int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_quarter(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_bf_quarter(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_day_of_quarter(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_month(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_bf_month(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_weekday(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_iso __pyx_f_7cytimes_5utils_ymd_isocalendar(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ymd_isoyear(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_isoweek(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_isoweekday(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ymd_to_ord(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_ord(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_us(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_sec(double); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_iso(PY_LONG_LONG, int, int); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_doy(PY_LONG_LONG, int); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_iso_week1_mon_ord(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE __pyx_t_7cytimes_5utils_dtm __pyx_f_7cytimes_5utils_dtm_fr_us(PY_LONG_LONG); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_combine_absolute_ms_us(int, int); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_new(struct __pyx_opt_args_7cytimes_5utils_date_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_now(struct __pyx_opt_args_7cytimes_5utils_date_now *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_date(PyObject *); /*proto*/
static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_date_to_tm(PyDateTime_Date *); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_date_to_ord(PyDateTime_Date *); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_date(PyDateTime_Date *, struct __pyx_opt_args_7cytimes_5utils_date_fr_date *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_dt(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_date_fr_dt *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_new(struct __pyx_opt_args_7cytimes_5utils_dt_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_now(struct __pyx_opt_args_7cytimes_5utils_dt_now *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt(PyObject *); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_local_mktime(PyDateTime_DateTime *); /*proto*/
static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_dt_to_tm(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_to_tm *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_to_us(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_to_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE double __pyx_f_7cytimes_5utils_dt_to_sec(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_to_sec *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_to_ord(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_to_ord *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_us(PY_LONG_LONG, struct __pyx_opt_args_7cytimes_5utils_dt_fr_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_sec(double, struct __pyx_opt_args_7cytimes_5utils_dt_fr_sec *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_date(PyDateTime_Date *, struct __pyx_opt_args_7cytimes_5utils_dt_fr_date *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_dt(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_add(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_dt_add *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace_tz(PyDateTime_DateTime *, PyObject *, struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace_fold(PyDateTime_DateTime *, int, struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_dt_tzname(PyDateTime_DateTime *); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_dt_utcoffset(PyDateTime_DateTime *); /*proto*/
static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_new(struct __pyx_opt_args_7cytimes_5utils_time_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_time_to_us(PyDateTime_Time *); /*proto*/
static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_us(PY_LONG_LONG, struct __pyx_opt_args_7cytimes_5utils_time_fr_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_dt(PyDateTime_DateTime *, struct __pyx_opt_args_7cytimes_5utils_time_fr_dt *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_new(struct __pyx_opt_args_7cytimes_5utils_td_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_td_utcformat(PyDateTime_Delta *); /*proto*/
static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_td_to_us(PyDateTime_Delta *); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_fr_us(PY_LONG_LONG, struct __pyx_opt_args_7cytimes_5utils_td_fr_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_new(struct __pyx_opt_args_7cytimes_5utils_tz_new *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_local(struct __pyx_opt_args_7cytimes_5utils_tz_local *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_tz(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_name(PyObject *, struct __pyx_opt_args_7cytimes_5utils_tz_name *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_tz_dst(PyObject *, struct __pyx_opt_args_7cytimes_5utils_tz_dst *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_tz_utcoffset(PyObject *, struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_tz_utcoffset_sec(PyObject *, struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset_sec *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_utcformat(PyObject *, struct __pyx_opt_args_7cytimes_5utils_tz_utcformat *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_int2str(int); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_int2dt64(int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_nptime_unit_str2int(PyObject *); /*proto*/
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_str2dt64(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_get_arr_nptime_unit(PyArrayObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_int_unit_error(int); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_dtype_error(PyArrayObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64(PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_dt64(PyObject *); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils_dt64_as_int64_us(PyObject *, struct __pyx_opt_args_7cytimes_5utils_dt64_as_int64_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__dt64_Y_as_int64_D(npy_int64, struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__dt64_M_as_int64_D(npy_int64, struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt64_to_dt(PyObject *, struct __pyx_opt_args_7cytimes_5utils_dt64_to_dt *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_dt64_to_reso_error(PyObject *, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_td64(PyObject *); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils_td64_as_int64_us(PyObject *, struct __pyx_opt_args_7cytimes_5utils_td64_as_int64_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__td64_Y_as_int64_D(npy_int64, int, struct __pyx_opt_args_7cytimes_5utils__td64_Y_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__td64_M_as_int64_D(npy_int64, int, struct __pyx_opt_args_7cytimes_5utils__td64_M_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_1dim_arr(PyArrayObject *); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_assure_int64(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_assure_int64_like(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_zero_int64(npy_intp); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_fill_int64(npy_int64, npy_intp); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_min(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_min *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_min_arr(PyArrayObject *, PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_arr_min_arr *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_neg(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_arr_neg *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_add(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_add *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_mul(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_mul *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_mod(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_mod *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_even(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_even *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_even_mul(PyArrayObject *, npy_int64, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_even_mul *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_up(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_up *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_down(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_down *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_ceil(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_ceil_mul(PyArrayObject *, npy_int64, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil_mul *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_floor(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_floor *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_floor_mul(PyArrayObject *, npy_int64, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_floor_mul *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_trunc(PyArrayObject *, npy_int64, struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_add_arr(PyArrayObject *, PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_arr_add_arr *__pyx_optional_args); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64arr(PyArrayObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_month(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_month *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_day(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_day *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_hour(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_hour *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_minute(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_minute *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_second(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_second *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_millisecond(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_millisecond *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_microsecond(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_microsecond *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_nanosecond(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_nanosecond *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_times(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_times *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_in_month(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_Q(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Q *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_W(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_h(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_s(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_ms(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_ns(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(PyArrayObject *, struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_add_delta_date(PyArrayObject *, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_ns_add_delta(PyArrayObject *, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64, npy_int64); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(PyArrayObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(PyArrayObject *, int, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_arr_dt64_rcl_error(PyObject *, int, PyObject *); /*proto*/
static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_td64arr(PyArrayObject *); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__td64arr_Y_as_int64_D(PyArrayObject *, int, struct __pyx_opt_args_7cytimes_5utils__td64arr_Y_as_int64_D *__pyx_optional_args); /*proto*/
static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__td64arr_M_as_int64_D(PyArrayObject *, int, struct __pyx_opt_args_7cytimes_5utils__td64arr_M_as_int64_D *__pyx_optional_args); /*proto*/

/* Module declarations from "cytimes.errors" */
static int (*__pyx_f_7cytimes_6errors_raise_error)(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_error *__pyx_optional_args); /*proto*/
static int (*__pyx_f_7cytimes_6errors_raise_configs_token_error)(int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error *__pyx_optional_args); /*proto*/
static int (*__pyx_f_7cytimes_6errors_raise_configs_value_error)(int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error *__pyx_optional_args); /*proto*/
static int (*__pyx_f_7cytimes_6errors_raise_parser_failed_error)(int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error *__pyx_optional_args); /*proto*/

/* Module declarations from "cytimes.parser" */
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_PERTAIN = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_JUMP = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_UTC = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_TZ = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_MONTH = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_HMS = 0;
static PyObject *__pyx_v_7cytimes_6parser__DEFAULT_AMPM = 0;
static struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS = 0;
static struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_7cytimes_6parser__DEFAULT_PARSER = 0;
static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser__timelex(PyObject *, Py_ssize_t, struct __pyx_opt_args_7cytimes_6parser__timelex *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_7cytimes_6parser_timelex(PyObject *, int __pyx_skip_dispatch); /*proto*/
static PyDateTime_DateTime *__pyx_f_7cytimes_6parser_parse(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse *__pyx_optional_args); /*proto*/
static PyDateTime_DateTime *__pyx_f_7cytimes_6parser_parse_obj(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_obj *__pyx_optional_args); /*proto*/
static int __pyx_f_7cytimes_6parser_parse_month(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_month *__pyx_optional_args); /*proto*/
static int __pyx_f_7cytimes_6parser_parse_weekday(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_weekday *__pyx_optional_args); /*proto*/
static PyObject *__pyx_f_7cytimes_6parser___pyx_unpickle_Configs__set_state(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *); /*proto*/
static PyObject *__pyx_f_7cytimes_6parser___pyx_unpickle_Parser__set_state(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *); /*proto*/
/* #### Code section: typeinfo ### */
/* #### Code section: before_global_var ### */
#define __Pyx_MODULE_NAME "cytimes.parser"
extern int __pyx_module_is_main_cytimes__parser;
int __pyx_module_is_main_cytimes__parser = 0;

/* Implementation of "cytimes.parser" */
/* #### Code section: global_var ### */
static PyObject *__pyx_builtin_enumerate;
/* #### Code section: string_decls ### */
/* #### Code section: decls ### */
static PyObject *__pyx_pf_7cytimes_5utils_parse_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_5utils_2parse_to_float(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_timelex(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data); /* proto */
static int __pyx_pf_7cytimes_6parser_7Configs___init__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_v_yearfirst, int __pyx_v_dayfirst); /* proto */
static struct __pyx_obj_7cytimes_6parser_Configs *__pyx_pf_7cytimes_6parser_7Configs_2from_parserinfo(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_info); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_9yearfirst___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_8dayfirst___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4order_hint(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4jump___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_6add_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_8remove_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_10replace_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_12is_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_7pertain___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_14add_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_16remove_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_18replace_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_20is_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_3utc___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_22add_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_24remove_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_26replace_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_28is_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_2tz___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_30add_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_hours, int __pyx_v_minutes, int __pyx_v_seconds); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_32remove_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_34replace_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_36is_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_38get_tz_offset(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_5month___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_40add_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_month); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_42remove_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_44replace_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_46is_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_48get_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_7weekday___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_50add_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_weekday); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_52remove_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_54replace_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_56is_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_58get_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_3hms___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_60add_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_62remove_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_64replace_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_66is_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_68get_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4ampm___get__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_70add_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_72remove_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_74replace_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_76is_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_78get_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_80clear_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_82reset_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_84__repr__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_86__reduce_cython__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_7Configs_88__setstate_cython__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7cytimes_6parser_6Result___cinit__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Result_2__repr__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto */
static int __pyx_pf_7cytimes_6parser_6Result_4__bool__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Result_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Result_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_7cytimes_6parser_6Parser___init__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Parser_2parse(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, PyObject *__pyx_v_dtclass); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Parser_4__reduce_cython__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6Parser_6__setstate_cython__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_2parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, PyObject *__pyx_v_dtclass); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_4parse_obj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtobj, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, PyObject *__pyx_v_dtclass); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_6parse_month(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, int __pyx_v_raise_error); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_8parse_weekday(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, int __pyx_v_raise_error); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_10__pyx_unpickle_Configs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_7cytimes_6parser_12__pyx_unpickle_Parser(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_tp_new_7cytimes_6parser_Configs(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7cytimes_6parser_Result(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_7cytimes_6parser_Parser(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;
  PyTypeObject *__pyx_ptype_7cpython_4type_type;
  PyTypeObject *__pyx_ptype_7cpython_4bool_bool;
  PyTypeObject *__pyx_ptype_7cpython_7complex_complex;
  PyTypeObject *__pyx_ptype_7cpython_8datetime_date;
  PyTypeObject *__pyx_ptype_7cpython_8datetime_time;
  PyTypeObject *__pyx_ptype_7cpython_8datetime_datetime;
  PyTypeObject *__pyx_ptype_7cpython_8datetime_timedelta;
  PyTypeObject *__pyx_ptype_7cpython_8datetime_tzinfo;
  PyTypeObject *__pyx_ptype_5numpy_dtype;
  PyTypeObject *__pyx_ptype_5numpy_flatiter;
  PyTypeObject *__pyx_ptype_5numpy_broadcast;
  PyTypeObject *__pyx_ptype_5numpy_ndarray;
  PyTypeObject *__pyx_ptype_5numpy_generic;
  PyTypeObject *__pyx_ptype_5numpy_number;
  PyTypeObject *__pyx_ptype_5numpy_integer;
  PyTypeObject *__pyx_ptype_5numpy_signedinteger;
  PyTypeObject *__pyx_ptype_5numpy_unsignedinteger;
  PyTypeObject *__pyx_ptype_5numpy_inexact;
  PyTypeObject *__pyx_ptype_5numpy_floating;
  PyTypeObject *__pyx_ptype_5numpy_complexfloating;
  PyTypeObject *__pyx_ptype_5numpy_flexible;
  PyTypeObject *__pyx_ptype_5numpy_character;
  PyTypeObject *__pyx_ptype_5numpy_ufunc;
  PyObject *__pyx_type_7cytimes_6parser_Configs;
  PyObject *__pyx_type_7cytimes_6parser_Result;
  PyObject *__pyx_type_7cytimes_6parser_Parser;
  PyTypeObject *__pyx_ptype_7cytimes_6parser_Configs;
  PyTypeObject *__pyx_ptype_7cytimes_6parser_Result;
  PyTypeObject *__pyx_ptype_7cytimes_6parser_Parser;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_pop;
  __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_values;
  __Pyx_CachedCFunction __pyx_umethod_PyUnicode_Type__lower;
  __Pyx_CachedCFunction __pyx_umethod_PyUnicode_Type__title;
  __Pyx_CachedCFunction __pyx_umethod_PyUnicode_Type__upper;
  PyObject *__pyx_tuple[7];
  PyObject *__pyx_codeobj_tab[57];
  PyObject *__pyx_string_tab[899];
  PyObject *__pyx_number_tab[17];
/* #### 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;

/* CodeObjectCache.module_state_decls */
struct __Pyx_CodeObjectCache __pyx_code_cache;

/* #### 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_ __pyx_string_tab[0]
#define __pyx_kp_u_02d __pyx_string_tab[1]
#define __pyx_kp_u_02d_02d __pyx_string_tab[2]
#define __pyx_kp_u_02d_02d_02d __pyx_string_tab[3]
#define __pyx_kp_u_02d_02d_02d_06d __pyx_string_tab[4]
#define __pyx_kp_u_02d_02d_02d_06d_2 __pyx_string_tab[5]
#define __pyx_kp_u_02d_02d_02d_2 __pyx_string_tab[6]
#define __pyx_kp_u_02d_02d_2 __pyx_string_tab[7]
#define __pyx_kp_u_04d __pyx_string_tab[8]
#define __pyx_kp_u_06d __pyx_string_tab[9]
#define __pyx_kp_u_06d_2 __pyx_string_tab[10]
#define __pyx_kp_u_2d __pyx_string_tab[11]
#define __pyx_kp_u_7f __pyx_string_tab[12]
#define __pyx_kp_u_Accepts __pyx_string_tab[13]
#define __pyx_kp_u_Accepts_Y_M_W_D_h_m_s_ms_us_ns __pyx_string_tab[14]
#define __pyx_kp_u_Add_token_that_should_be_recogni __pyx_string_tab[15]
#define __pyx_kp_u_Add_token_that_should_be_recogni_2 __pyx_string_tab[16]
#define __pyx_kp_u_Add_token_that_should_be_recogni_3 __pyx_string_tab[17]
#define __pyx_kp_u_Add_token_that_should_be_recogni_4 __pyx_string_tab[18]
#define __pyx_kp_u_Add_token_that_should_be_recogni_5 __pyx_string_tab[19]
#define __pyx_kp_u_Add_token_that_should_be_recogni_6 __pyx_string_tab[20]
#define __pyx_kp_u_Add_token_that_should_be_recogni_7 __pyx_string_tab[21]
#define __pyx_kp_u_Add_token_that_should_be_skipped __pyx_string_tab[22]
#define __pyx_kp_u_Cannot_add_delta_to_ndarray_s_Su __pyx_string_tab[23]
#define __pyx_kp_u_Cannot_compare_naive_and_aware_d __pyx_string_tab[24]
#define __pyx_kp_u_Cannot_compare_ndarrays_with_dif __pyx_string_tab[25]
#define __pyx_kp_u_Cannot_convert __pyx_string_tab[26]
#define __pyx_kp_u_Cannot_convert_2 __pyx_string_tab[27]
#define __pyx_kp_u_Cannot_convert_array_from_dateti __pyx_string_tab[28]
#define __pyx_kp_u_Cannot_convert_ndarray __pyx_string_tab[29]
#define __pyx_kp_u_Cannot_convert_s_to_non_negative __pyx_string_tab[30]
#define __pyx_kp_u_Cannot_convert_s_to_non_negative_2 __pyx_string_tab[31]
#define __pyx_kp_u_Cannot_create_date_using_custom __pyx_string_tab[32]
#define __pyx_kp_u_Cannot_create_datetime_using_cus __pyx_string_tab[33]
#define __pyx_kp_u_Cannot_create_time_using_custom __pyx_string_tab[34]
#define __pyx_kp_u_Cannot_create_timedelta_using_cu __pyx_string_tab[35]
#define __pyx_kp_u_Cannot_extract_any_datetime_com __pyx_string_tab[36]
#define __pyx_kp_u_Cannot_parse __pyx_string_tab[37]
#define __pyx_kp_u_Cannot_parse_None __pyx_string_tab[38]
#define __pyx_kp_u_Cannot_parse_s_to_float_contains __pyx_string_tab[39]
#define __pyx_kp_u_Cannot_parse_s_to_float_contains_2 __pyx_string_tab[40]
#define __pyx_kp_u_Cannot_parse_s_to_float_contains_3 __pyx_string_tab[41]
#define __pyx_kp_u_Cannot_parse_s_to_float_contains_4 __pyx_string_tab[42]
#define __pyx_kp_u_Cannot_parse_s_to_float_negative __pyx_string_tab[43]
#define __pyx_kp_u_Cannot_parse_s_to_float_negative_2 __pyx_string_tab[44]
#define __pyx_kp_u_Cannot_parse_s_to_float_no_digit __pyx_string_tab[45]
#define __pyx_kp_u_Cannot_parse_s_to_float_positive __pyx_string_tab[46]
#define __pyx_kp_u_Cannot_parse_s_to_float_positive_2 __pyx_string_tab[47]
#define __pyx_kp_u_Cannot_parse_s_to_integer_contai __pyx_string_tab[48]
#define __pyx_kp_u_Cannot_parse_s_to_integer_contai_2 __pyx_string_tab[49]
#define __pyx_kp_u_Cannot_parse_s_to_integer_contai_3 __pyx_string_tab[50]
#define __pyx_kp_u_Cannot_parse_s_to_integer_negati __pyx_string_tab[51]
#define __pyx_kp_u_Cannot_parse_s_to_integer_no_dig __pyx_string_tab[52]
#define __pyx_kp_u_Cannot_parse_s_to_integer_positi __pyx_string_tab[53]
#define __pyx_kp_u_Cannot_perform_addition_on_ndarr __pyx_string_tab[54]
#define __pyx_kp_u_Cannot_perform_multiplication_on __pyx_string_tab[55]
#define __pyx_kp_u_Cannot_perform_subtraction_on_nd __pyx_string_tab[56]
#define __pyx_kp_u_Configs_add_ampm_line_1182 __pyx_string_tab[57]
#define __pyx_kp_u_Configs_add_hms_line_1043 __pyx_string_tab[58]
#define __pyx_kp_u_Configs_add_jump_line_325 __pyx_string_tab[59]
#define __pyx_kp_u_Configs_add_month_line_766 __pyx_string_tab[60]
#define __pyx_kp_u_Configs_add_pertain_line_421 __pyx_string_tab[61]
#define __pyx_kp_u_Configs_add_tz_line_616 __pyx_string_tab[62]
#define __pyx_kp_u_Configs_add_utc_line_517 __pyx_string_tab[63]
#define __pyx_kp_u_Configs_add_weekday_line_904 __pyx_string_tab[64]
#define __pyx_kp_u_Configs_remove_ampm_line_1211 __pyx_string_tab[65]
#define __pyx_kp_u_Configs_remove_hms_line_1072 __pyx_string_tab[66]
#define __pyx_kp_u_Configs_remove_jump_line_346 __pyx_string_tab[67]
#define __pyx_kp_u_Configs_remove_month_line_795 __pyx_string_tab[68]
#define __pyx_kp_u_Configs_remove_pertain_line_442 __pyx_string_tab[69]
#define __pyx_kp_u_Configs_remove_tz_line_655 __pyx_string_tab[70]
#define __pyx_kp_u_Configs_remove_utc_line_538 __pyx_string_tab[71]
#define __pyx_kp_u_Configs_remove_weekday_line_933 __pyx_string_tab[72]
#define __pyx_kp_u_Configs_replace_ampm_line_1238 __pyx_string_tab[73]
#define __pyx_kp_u_Configs_replace_hms_line_1099 __pyx_string_tab[74]
#define __pyx_kp_u_Configs_replace_jump_line_368 __pyx_string_tab[75]
#define __pyx_kp_u_Configs_replace_month_line_822 __pyx_string_tab[76]
#define __pyx_kp_u_Configs_replace_pertain_line_464 __pyx_string_tab[77]
#define __pyx_kp_u_Configs_replace_tz_line_682 __pyx_string_tab[78]
#define __pyx_kp_u_Configs_replace_utc_line_560 __pyx_string_tab[79]
#define __pyx_kp_u_Configs_replace_weekday_line_960 __pyx_string_tab[80]
#define __pyx_kp_u_Conversion_limits_to_units_betw __pyx_string_tab[81]
#define __pyx_kp_u_D_2 __pyx_string_tab[82]
#define __pyx_kp_u_D_M_Y __pyx_string_tab[83]
#define __pyx_kp_u_Expects_1_D_ndarray_instead_got __pyx_string_tab[84]
#define __pyx_kp_u_Expects_an_instance_of_datetime __pyx_string_tab[85]
#define __pyx_kp_u_Expects_an_instance_of_dateutil __pyx_string_tab[86]
#define __pyx_kp_u_Expects_an_instance_of_np_dateti __pyx_string_tab[87]
#define __pyx_kp_u_Expects_an_instance_of_np_ndarra __pyx_string_tab[88]
#define __pyx_kp_u_Expects_an_instance_of_np_timede __pyx_string_tab[89]
#define __pyx_kp_u_Expects_instance_of_np_ndarray_t __pyx_string_tab[90]
#define __pyx_kp_u_Expects_integer_0_6_or_literal __pyx_string_tab[91]
#define __pyx_kp_u_Expects_integer_1_12_or_literal __pyx_string_tab[92]
#define __pyx_kp_u_Expects_ndarray_datetime64_or_nd __pyx_string_tab[93]
#define __pyx_kp_u_Fail_to_convert_timestamp_s_to_U __pyx_string_tab[94]
#define __pyx_kp_u_Fail_to_convert_timestamp_s_to_l __pyx_string_tab[95]
#define __pyx_kp_u_Failed_ndarray_datetime64 __pyx_string_tab[96]
#define __pyx_kp_u_Failed_to_build_datetime_from __pyx_string_tab[97]
#define __pyx_kp_u_Failed_to_parse __pyx_string_tab[98]
#define __pyx_kp_u_Invalid_UTC_offset_d_in_seconds __pyx_string_tab[99]
#define __pyx_kp_u_Invalid_Y_M_D_flag_value_d_must __pyx_string_tab[100]
#define __pyx_kp_u_Invalid_Y_M_D_value_d_must_be_in __pyx_string_tab[101]
#define __pyx_kp_u_Invalid_Y_M_D_value_s_cannot_be __pyx_string_tab[102]
#define __pyx_kp_u_Invalid_day_value_d_must_be_in_1 __pyx_string_tab[103]
#define __pyx_kp_u_Invalid_month __pyx_string_tab[104]
#define __pyx_kp_u_Invalid_month_number_d_must_be_b __pyx_string_tab[105]
#define __pyx_kp_u_Invalid_month_s_not_recognized __pyx_string_tab[106]
#define __pyx_kp_u_Invalid_month_value_d_must_be_in __pyx_string_tab[107]
#define __pyx_kp_u_Invalid_weekday __pyx_string_tab[108]
#define __pyx_kp_u_Invalid_weekday_number_d_must_be __pyx_string_tab[109]
#define __pyx_kp_u_Invalid_weekday_s_not_recognized __pyx_string_tab[110]
#define __pyx_kp_u_Lack_of_day __pyx_string_tab[111]
#define __pyx_kp_u_Lack_of_month __pyx_string_tab[112]
#define __pyx_kp_u_Lack_of_year __pyx_string_tab[113]
#define __pyx_kp_u_M_2 __pyx_string_tab[114]
#define __pyx_kp_u_M_D_Y __pyx_string_tab[115]
#define __pyx_kp_u_Namespace_token_cannot_be_None __pyx_string_tab[116]
#define __pyx_kp_u_None __pyx_string_tab[117]
#define __pyx_kp_u_Note_that_Cython_is_deliberately __pyx_string_tab[118]
#define __pyx_kp_u_Only_supports_arrays_with_units __pyx_string_tab[119]
#define __pyx_kp_u_Remove_AM_PM_token_from_the_conf __pyx_string_tab[120]
#define __pyx_kp_u_Remove_H_M_S_token_from_the_conf __pyx_string_tab[121]
#define __pyx_kp_u_Remove_UTC_timezone_token_from_t __pyx_string_tab[122]
#define __pyx_kp_u_Remove_jump_token_from_the_confi __pyx_string_tab[123]
#define __pyx_kp_u_Remove_month_token_from_the_conf __pyx_string_tab[124]
#define __pyx_kp_u_Remove_pertain_token_from_the_co __pyx_string_tab[125]
#define __pyx_kp_u_Remove_timezone_token_from_the_c __pyx_string_tab[126]
#define __pyx_kp_u_Remove_weekday_token_from_the_co __pyx_string_tab[127]
#define __pyx_kp_u_Replace_the_AM_PM_mapping_bool_p __pyx_string_tab[128]
#define __pyx_kp_u_Replace_the_H_M_S_mapping_bool_p __pyx_string_tab[129]
#define __pyx_kp_u_Replace_the_month_mapping_bool_p __pyx_string_tab[130]
#define __pyx_kp_u_Replace_the_set_of_UTC_timezone __pyx_string_tab[131]
#define __pyx_kp_u_Replace_the_set_of_jump_tokens_b __pyx_string_tab[132]
#define __pyx_kp_u_Replace_the_set_of_pertain_token __pyx_string_tab[133]
#define __pyx_kp_u_Replace_the_timezone_mapping_boo __pyx_string_tab[134]
#define __pyx_kp_u_Replace_the_weekday_mapping_bool __pyx_string_tab[135]
#define __pyx_kp_u_Seconds_value_must_be_finite_got __pyx_string_tab[136]
#define __pyx_kp_u_The_size_of_a_new_array_must_be __pyx_string_tab[137]
#define __pyx_kp_u_Timezone_offset __pyx_string_tab[138]
#define __pyx_kp_u_Token __pyx_string_tab[139]
#define __pyx_kp_u_Token_for_Configs __pyx_string_tab[140]
#define __pyx_kp_u_Token_for_Configs_s_cannot_be_an __pyx_string_tab[141]
#define __pyx_kp_u_Token_for_Configs_s_must_be_a_st __pyx_string_tab[142]
#define __pyx_kp_u_Unsupported_conversion_unit_d_fo __pyx_string_tab[143]
#define __pyx_kp_u_Unsupported_conversion_unit_d_fo_2 __pyx_string_tab[144]
#define __pyx_kp_u_Unsupported_data_type __pyx_string_tab[145]
#define __pyx_kp_u_Unsupported_datetime_resolution __pyx_string_tab[146]
#define __pyx_kp_u_Unsupported_numpy_time_unit_NPY __pyx_string_tab[147]
#define __pyx_kp_u_Unsupported_time_unit __pyx_string_tab[148]
#define __pyx_kp_u_Value_for_Configs __pyx_string_tab[149]
#define __pyx_kp_u_W_2 __pyx_string_tab[150]
#define __pyx_kp_u_Y_2 __pyx_string_tab[151]
#define __pyx_kp_u_Y_D_M __pyx_string_tab[152]
#define __pyx_kp_u_Y_M_D __pyx_string_tab[153]
#define __pyx_kp_u__10 __pyx_string_tab[154]
#define __pyx_kp_u__11 __pyx_string_tab[155]
#define __pyx_kp_u__12 __pyx_string_tab[156]
#define __pyx_kp_u__13 __pyx_string_tab[157]
#define __pyx_kp_u__14 __pyx_string_tab[158]
#define __pyx_kp_u__15 __pyx_string_tab[159]
#define __pyx_kp_u__16 __pyx_string_tab[160]
#define __pyx_kp_u__17 __pyx_string_tab[161]
#define __pyx_kp_u__18 __pyx_string_tab[162]
#define __pyx_kp_u__19 __pyx_string_tab[163]
#define __pyx_kp_u__2 __pyx_string_tab[164]
#define __pyx_kp_u__20 __pyx_string_tab[165]
#define __pyx_kp_u__21 __pyx_string_tab[166]
#define __pyx_kp_u__22 __pyx_string_tab[167]
#define __pyx_kp_u__23 __pyx_string_tab[168]
#define __pyx_kp_u__3 __pyx_string_tab[169]
#define __pyx_kp_u__4 __pyx_string_tab[170]
#define __pyx_kp_u__5 __pyx_string_tab[171]
#define __pyx_kp_u__6 __pyx_string_tab[172]
#define __pyx_kp_u__60 __pyx_string_tab[173]
#define __pyx_kp_u__7 __pyx_string_tab[174]
#define __pyx_kp_u__8 __pyx_string_tab[175]
#define __pyx_kp_u__9 __pyx_string_tab[176]
#define __pyx_kp_u_add_note __pyx_string_tab[177]
#define __pyx_kp_u_ampm_2 __pyx_string_tab[178]
#define __pyx_kp_u_ampm_d __pyx_string_tab[179]
#define __pyx_kp_u_arr2_length __pyx_string_tab[180]
#define __pyx_kp_u_arr_div_ceil_division_by_zero __pyx_string_tab[181]
#define __pyx_kp_u_arr_div_ceil_mul_division_by_zer __pyx_string_tab[182]
#define __pyx_kp_u_arr_div_down_division_by_zero __pyx_string_tab[183]
#define __pyx_kp_u_arr_div_down_mul_division_by_zer __pyx_string_tab[184]
#define __pyx_kp_u_arr_div_even_division_by_zero __pyx_string_tab[185]
#define __pyx_kp_u_arr_div_even_mul_division_by_zer __pyx_string_tab[186]
#define __pyx_kp_u_arr_div_floor_division_by_zero __pyx_string_tab[187]
#define __pyx_kp_u_arr_div_floor_mul_division_by_ze __pyx_string_tab[188]
#define __pyx_kp_u_arr_div_trunc_division_by_zero __pyx_string_tab[189]
#define __pyx_kp_u_arr_div_trunc_mul_division_by_ze __pyx_string_tab[190]
#define __pyx_kp_u_arr_div_up_division_by_zero __pyx_string_tab[191]
#define __pyx_kp_u_arr_div_up_mul_division_by_zero __pyx_string_tab[192]
#define __pyx_kp_u_arr_mod_division_by_zero __pyx_string_tab[193]
#define __pyx_kp_u_at_position __pyx_string_tab[194]
#define __pyx_kp_u_conflicts_with_existing_tokens __pyx_string_tab[195]
#define __pyx_kp_u_cython_bint __pyx_string_tab[196]
#define __pyx_kp_u_cython_int __pyx_string_tab[197]
#define __pyx_kp_u_datetime2 __pyx_string_tab[198]
#define __pyx_kp_u_day_d __pyx_string_tab[199]
#define __pyx_kp_u_dayfirst_2 __pyx_string_tab[200]
#define __pyx_kp_u_dict_str_int __pyx_string_tab[201]
#define __pyx_kp_u_disable __pyx_string_tab[202]
#define __pyx_kp_u_doy_day_of_year_d __pyx_string_tab[203]
#define __pyx_kp_u_dt_isoformat_sep_cannot_be_None __pyx_string_tab[204]
#define __pyx_kp_u_dt_strformat_fmt_cannot_be_None __pyx_string_tab[205]
#define __pyx_kp_u_enable __pyx_string_tab[206]
#define __pyx_kp_u_fold_must_be_either_0_or_1_got_d __pyx_string_tab[207]
#define __pyx_kp_u_for_Configs __pyx_string_tab[208]
#define __pyx_kp_u_from __pyx_string_tab[209]
#define __pyx_kp_u_from_2 __pyx_string_tab[210]
#define __pyx_kp_u_from_parserinfo_info __pyx_string_tab[211]
#define __pyx_kp_u_gc __pyx_string_tab[212]
#define __pyx_kp_u_h_2 __pyx_string_tab[213]
#define __pyx_kp_u_hms_2 __pyx_string_tab[214]
#define __pyx_kp_u_hour_d __pyx_string_tab[215]
#define __pyx_kp_u_instead_got __pyx_string_tab[216]
#define __pyx_kp_u_int_str_None __pyx_string_tab[217]
#define __pyx_kp_u_isenabled __pyx_string_tab[218]
#define __pyx_kp_u_m_2 __pyx_string_tab[219]
#define __pyx_kp_u_math_div_ceil_division_by_zero __pyx_string_tab[220]
#define __pyx_kp_u_math_div_ceil_result_does_not_fi __pyx_string_tab[221]
#define __pyx_kp_u_math_div_down_division_by_zero __pyx_string_tab[222]
#define __pyx_kp_u_math_div_down_result_does_not_fi __pyx_string_tab[223]
#define __pyx_kp_u_math_div_even_division_by_zero __pyx_string_tab[224]
#define __pyx_kp_u_math_div_even_result_does_not_fi __pyx_string_tab[225]
#define __pyx_kp_u_math_div_floor_division_by_zero __pyx_string_tab[226]
#define __pyx_kp_u_math_div_floor_result_does_not_f __pyx_string_tab[227]
#define __pyx_kp_u_math_div_trunc_division_by_zero __pyx_string_tab[228]
#define __pyx_kp_u_math_div_trunc_result_does_not_f __pyx_string_tab[229]
#define __pyx_kp_u_math_div_up_division_by_zero __pyx_string_tab[230]
#define __pyx_kp_u_math_div_up_result_does_not_fit __pyx_string_tab[231]
#define __pyx_kp_u_math_mod_division_by_zero __pyx_string_tab[232]
#define __pyx_kp_u_microsecond_d __pyx_string_tab[233]
#define __pyx_kp_u_minimum_value_cannot_be_greater __pyx_string_tab[234]
#define __pyx_kp_u_minute_d __pyx_string_tab[235]
#define __pyx_kp_u_minutes __pyx_string_tab[236]
#define __pyx_kp_u_missing_time_resolution_for_ndar __pyx_string_tab[237]
#define __pyx_kp_u_month_2 __pyx_string_tab[238]
#define __pyx_kp_u_month_d __pyx_string_tab[239]
#define __pyx_kp_u_ms_2 __pyx_string_tab[240]
#define __pyx_kp_u_must_be_a_string_instead_got __pyx_string_tab[241]
#define __pyx_kp_u_must_be_an_integer_between __pyx_string_tab[242]
#define __pyx_kp_u_must_be_an_integer_instead_got __pyx_string_tab[243]
#define __pyx_kp_u_no_default___reduce___due_to_non __pyx_string_tab[244]
#define __pyx_kp_u_ns_2 __pyx_string_tab[245]
#define __pyx_kp_u_numpy__core_multiarray_failed_to __pyx_string_tab[246]
#define __pyx_kp_u_numpy__core_umath_failed_to_impo __pyx_string_tab[247]
#define __pyx_kp_u_out_of_range_Must_be_strictly_b __pyx_string_tab[248]
#define __pyx_kp_u_out_of_range_Must_be_strictly_b_2 __pyx_string_tab[249]
#define __pyx_kp_u_parse_to_float_token_cannot_be_N __pyx_string_tab[250]
#define __pyx_kp_u_parse_to_int_token_cannot_be_Non __pyx_string_tab[251]
#define __pyx_kp_u_pertain_2 __pyx_string_tab[252]
#define __pyx_kp_u_resolution_is_not_supported __pyx_string_tab[253]
#define __pyx_kp_u_resolved __pyx_string_tab[254]
#define __pyx_kp_u_s_2 __pyx_string_tab[255]
#define __pyx_kp_u_second_d __pyx_string_tab[256]
#define __pyx_kp_u_seconds_2 __pyx_string_tab[257]
#define __pyx_kp_u_seconds_from __pyx_string_tab[258]
#define __pyx_kp_u_seconds_from_hours __pyx_string_tab[259]
#define __pyx_kp_u_self__Configs__cls_is_not_None_o __pyx_string_tab[260]
#define __pyx_kp_u_self__Parser__cls_is_not_None_or __pyx_string_tab[261]
#define __pyx_kp_u_set_str __pyx_string_tab[262]
#define __pyx_kp_u_size __pyx_string_tab[263]
#define __pyx_kp_u_sizes_jump __pyx_string_tab[264]
#define __pyx_kp_u_slice_to_ufloat_out_of_range_sta __pyx_string_tab[265]
#define __pyx_kp_u_slice_to_ufloat_size_must_be_0_i __pyx_string_tab[266]
#define __pyx_kp_u_slice_to_ufloat_start_must_be_0 __pyx_string_tab[267]
#define __pyx_kp_u_slice_to_ufloat_token_cannot_be __pyx_string_tab[268]
#define __pyx_kp_u_slice_to_uint_out_of_range_start __pyx_string_tab[269]
#define __pyx_kp_u_slice_to_uint_size_must_be_0_ins __pyx_string_tab[270]
#define __pyx_kp_u_slice_to_uint_start_must_be_0_in __pyx_string_tab[271]
#define __pyx_kp_u_slice_to_uint_token_cannot_be_No __pyx_string_tab[272]
#define __pyx_kp_u_src_cytimes_parser_py __pyx_string_tab[273]
#define __pyx_kp_u_src_cytimes_utils_pxd __pyx_string_tab[274]
#define __pyx_kp_u_stringsource __pyx_string_tab[275]
#define __pyx_kp_u_ticks_Supported_resolution_Y_M __pyx_string_tab[276]
#define __pyx_kp_u_ticks_Supported_units __pyx_string_tab[277]
#define __pyx_kp_u_ticks_Supported_units_Y_M_W_D_h __pyx_string_tab[278]
#define __pyx_kp_u_tm_strformat_expanded_output_exc __pyx_string_tab[279]
#define __pyx_kp_u_tm_strformat_failed_to_allocate __pyx_string_tab[280]
#define __pyx_kp_u_tm_strformat_fmt_cannot_be_None __pyx_string_tab[281]
#define __pyx_kp_u_to __pyx_string_tab[282]
#define __pyx_kp_u_to_datetime64 __pyx_string_tab[283]
#define __pyx_kp_u_to_float_contains_invalid_chara __pyx_string_tab[284]
#define __pyx_kp_u_to_int64 __pyx_string_tab[285]
#define __pyx_kp_u_to_int64_2 __pyx_string_tab[286]
#define __pyx_kp_u_to_integer_Contains_invalid_cha __pyx_string_tab[287]
#define __pyx_kp_u_to_non_negative_float_contains __pyx_string_tab[288]
#define __pyx_kp_u_to_unsigned_integer_Contains_in __pyx_string_tab[289]
#define __pyx_kp_u_token_len __pyx_string_tab[290]
#define __pyx_kp_u_tz_2 __pyx_string_tab[291]
#define __pyx_kp_u_tzoffset_d __pyx_string_tab[292]
#define __pyx_kp_u_unit_to_int64 __pyx_string_tab[293]
#define __pyx_kp_u_us_2 __pyx_string_tab[294]
#define __pyx_kp_u_utc_2 __pyx_string_tab[295]
#define __pyx_kp_u_weekday_2 __pyx_string_tab[296]
#define __pyx_kp_u_weekday_d __pyx_string_tab[297]
#define __pyx_kp_u_year_d __pyx_string_tab[298]
#define __pyx_kp_u_yearfirst_2 __pyx_string_tab[299]
#define __pyx_n_u_AMPM __pyx_string_tab[300]
#define __pyx_n_u_Apr __pyx_string_tab[301]
#define __pyx_n_u_Aug __pyx_string_tab[302]
#define __pyx_n_u_Configs __pyx_string_tab[303]
#define __pyx_n_u_Configs___reduce_cython __pyx_string_tab[304]
#define __pyx_n_u_Configs___setstate_cython __pyx_string_tab[305]
#define __pyx_n_u_Configs_add_ampm __pyx_string_tab[306]
#define __pyx_n_u_Configs_add_hms __pyx_string_tab[307]
#define __pyx_n_u_Configs_add_jump __pyx_string_tab[308]
#define __pyx_n_u_Configs_add_month __pyx_string_tab[309]
#define __pyx_n_u_Configs_add_pertain __pyx_string_tab[310]
#define __pyx_n_u_Configs_add_tz __pyx_string_tab[311]
#define __pyx_n_u_Configs_add_utc __pyx_string_tab[312]
#define __pyx_n_u_Configs_add_weekday __pyx_string_tab[313]
#define __pyx_n_u_Configs_clear_settings __pyx_string_tab[314]
#define __pyx_n_u_Configs_from_parserinfo __pyx_string_tab[315]
#define __pyx_n_u_Configs_get_ampm __pyx_string_tab[316]
#define __pyx_n_u_Configs_get_hms __pyx_string_tab[317]
#define __pyx_n_u_Configs_get_month __pyx_string_tab[318]
#define __pyx_n_u_Configs_get_tz_offset __pyx_string_tab[319]
#define __pyx_n_u_Configs_get_weekday __pyx_string_tab[320]
#define __pyx_n_u_Configs_is_ampm __pyx_string_tab[321]
#define __pyx_n_u_Configs_is_hms __pyx_string_tab[322]
#define __pyx_n_u_Configs_is_jump __pyx_string_tab[323]
#define __pyx_n_u_Configs_is_month __pyx_string_tab[324]
#define __pyx_n_u_Configs_is_pertain __pyx_string_tab[325]
#define __pyx_n_u_Configs_is_tz __pyx_string_tab[326]
#define __pyx_n_u_Configs_is_utc __pyx_string_tab[327]
#define __pyx_n_u_Configs_is_weekday __pyx_string_tab[328]
#define __pyx_n_u_Configs_order_hint __pyx_string_tab[329]
#define __pyx_n_u_Configs_remove_ampm __pyx_string_tab[330]
#define __pyx_n_u_Configs_remove_hms __pyx_string_tab[331]
#define __pyx_n_u_Configs_remove_jump __pyx_string_tab[332]
#define __pyx_n_u_Configs_remove_month __pyx_string_tab[333]
#define __pyx_n_u_Configs_remove_pertain __pyx_string_tab[334]
#define __pyx_n_u_Configs_remove_tz __pyx_string_tab[335]
#define __pyx_n_u_Configs_remove_utc __pyx_string_tab[336]
#define __pyx_n_u_Configs_remove_weekday __pyx_string_tab[337]
#define __pyx_n_u_Configs_replace_ampm __pyx_string_tab[338]
#define __pyx_n_u_Configs_replace_hms __pyx_string_tab[339]
#define __pyx_n_u_Configs_replace_jump __pyx_string_tab[340]
#define __pyx_n_u_Configs_replace_month __pyx_string_tab[341]
#define __pyx_n_u_Configs_replace_pertain __pyx_string_tab[342]
#define __pyx_n_u_Configs_replace_tz __pyx_string_tab[343]
#define __pyx_n_u_Configs_replace_utc __pyx_string_tab[344]
#define __pyx_n_u_Configs_replace_weekday __pyx_string_tab[345]
#define __pyx_n_u_Configs_reset_settings __pyx_string_tab[346]
#define __pyx_n_u_D __pyx_string_tab[347]
#define __pyx_n_u_Dec __pyx_string_tab[348]
#define __pyx_n_u_False __pyx_string_tab[349]
#define __pyx_n_u_Feb __pyx_string_tab[350]
#define __pyx_n_u_Fri __pyx_string_tab[351]
#define __pyx_n_u_HMS __pyx_string_tab[352]
#define __pyx_n_u_InvalidMonthError __pyx_string_tab[353]
#define __pyx_n_u_InvalidParserInfo __pyx_string_tab[354]
#define __pyx_n_u_InvalidWeekdayError __pyx_string_tab[355]
#define __pyx_n_u_JUMP __pyx_string_tab[356]
#define __pyx_n_u_Jan __pyx_string_tab[357]
#define __pyx_n_u_Jul __pyx_string_tab[358]
#define __pyx_n_u_Jun __pyx_string_tab[359]
#define __pyx_n_u_M __pyx_string_tab[360]
#define __pyx_n_u_MONTHS __pyx_string_tab[361]
#define __pyx_n_u_Mar __pyx_string_tab[362]
#define __pyx_n_u_May __pyx_string_tab[363]
#define __pyx_n_u_Mon __pyx_string_tab[364]
#define __pyx_n_u_Nov __pyx_string_tab[365]
#define __pyx_n_u_Oct __pyx_string_tab[366]
#define __pyx_n_u_PERTAIN __pyx_string_tab[367]
#define __pyx_n_u_Parser __pyx_string_tab[368]
#define __pyx_n_u_Parser___reduce_cython __pyx_string_tab[369]
#define __pyx_n_u_Parser___setstate_cython __pyx_string_tab[370]
#define __pyx_n_u_Parser_parse __pyx_string_tab[371]
#define __pyx_n_u_Pyx_PyDict_NextRef __pyx_string_tab[372]
#define __pyx_n_u_Result __pyx_string_tab[373]
#define __pyx_n_u_Result___reduce_cython __pyx_string_tab[374]
#define __pyx_n_u_Result___setstate_cython __pyx_string_tab[375]
#define __pyx_n_u_Sat __pyx_string_tab[376]
#define __pyx_n_u_Sep __pyx_string_tab[377]
#define __pyx_n_u_Sun __pyx_string_tab[378]
#define __pyx_n_u_T __pyx_string_tab[379]
#define __pyx_n_u_TZOFFSET __pyx_string_tab[380]
#define __pyx_n_u_Thu __pyx_string_tab[381]
#define __pyx_n_u_True __pyx_string_tab[382]
#define __pyx_n_u_Tue __pyx_string_tab[383]
#define __pyx_n_u_UTCZONE __pyx_string_tab[384]
#define __pyx_n_u_W __pyx_string_tab[385]
#define __pyx_n_u_WEEKDAYS __pyx_string_tab[386]
#define __pyx_n_u_Wed __pyx_string_tab[387]
#define __pyx_n_u_Y __pyx_string_tab[388]
#define __pyx_n_u__24 __pyx_string_tab[389]
#define __pyx_n_u__25 __pyx_string_tab[390]
#define __pyx_n_u__26 __pyx_string_tab[391]
#define __pyx_n_u__27 __pyx_string_tab[392]
#define __pyx_n_u__28 __pyx_string_tab[393]
#define __pyx_n_u__29 __pyx_string_tab[394]
#define __pyx_n_u__30 __pyx_string_tab[395]
#define __pyx_n_u__31 __pyx_string_tab[396]
#define __pyx_n_u__32 __pyx_string_tab[397]
#define __pyx_n_u__33 __pyx_string_tab[398]
#define __pyx_n_u__34 __pyx_string_tab[399]
#define __pyx_n_u__35 __pyx_string_tab[400]
#define __pyx_n_u__36 __pyx_string_tab[401]
#define __pyx_n_u__37 __pyx_string_tab[402]
#define __pyx_n_u__38 __pyx_string_tab[403]
#define __pyx_n_u__39 __pyx_string_tab[404]
#define __pyx_n_u__40 __pyx_string_tab[405]
#define __pyx_n_u__41 __pyx_string_tab[406]
#define __pyx_n_u__42 __pyx_string_tab[407]
#define __pyx_n_u__43 __pyx_string_tab[408]
#define __pyx_n_u__44 __pyx_string_tab[409]
#define __pyx_n_u__45 __pyx_string_tab[410]
#define __pyx_n_u__46 __pyx_string_tab[411]
#define __pyx_n_u__47 __pyx_string_tab[412]
#define __pyx_n_u__48 __pyx_string_tab[413]
#define __pyx_n_u__49 __pyx_string_tab[414]
#define __pyx_n_u__50 __pyx_string_tab[415]
#define __pyx_n_u__51 __pyx_string_tab[416]
#define __pyx_n_u__52 __pyx_string_tab[417]
#define __pyx_n_u__53 __pyx_string_tab[418]
#define __pyx_n_u__54 __pyx_string_tab[419]
#define __pyx_n_u__55 __pyx_string_tab[420]
#define __pyx_n_u__56 __pyx_string_tab[421]
#define __pyx_n_u__57 __pyx_string_tab[422]
#define __pyx_n_u__58 __pyx_string_tab[423]
#define __pyx_n_u__59 __pyx_string_tab[424]
#define __pyx_n_u_a __pyx_string_tab[425]
#define __pyx_n_u_abril __pyx_string_tab[426]
#define __pyx_n_u_ad __pyx_string_tab[427]
#define __pyx_n_u_add_ampm __pyx_string_tab[428]
#define __pyx_n_u_add_hms __pyx_string_tab[429]
#define __pyx_n_u_add_jump __pyx_string_tab[430]
#define __pyx_n_u_add_month __pyx_string_tab[431]
#define __pyx_n_u_add_pertain __pyx_string_tab[432]
#define __pyx_n_u_add_tz __pyx_string_tab[433]
#define __pyx_n_u_add_utc __pyx_string_tab[434]
#define __pyx_n_u_add_weekday __pyx_string_tab[435]
#define __pyx_n_u_afternoon __pyx_string_tab[436]
#define __pyx_n_u_agosto __pyx_string_tab[437]
#define __pyx_n_u_all __pyx_string_tab[438]
#define __pyx_n_u_am __pyx_string_tab[439]
#define __pyx_n_u_ampm __pyx_string_tab[440]
#define __pyx_n_u_and __pyx_string_tab[441]
#define __pyx_n_u_aot __pyx_string_tab[442]
#define __pyx_n_u_apr __pyx_string_tab[443]
#define __pyx_n_u_april __pyx_string_tab[444]
#define __pyx_n_u_aprile __pyx_string_tab[445]
#define __pyx_n_u_aralk __pyx_string_tab[446]
#define __pyx_n_u_aramba __pyx_string_tab[447]
#define __pyx_n_u_as __pyx_string_tab[448]
#define __pyx_n_u_astype __pyx_string_tab[449]
#define __pyx_n_u_asyncio_coroutines __pyx_string_tab[450]
#define __pyx_n_u_at __pyx_string_tab[451]
#define __pyx_n_u_aug __pyx_string_tab[452]
#define __pyx_n_u_august __pyx_string_tab[453]
#define __pyx_n_u_augusti __pyx_string_tab[454]
#define __pyx_n_u_augustus __pyx_string_tab[455]
#define __pyx_n_u_austos __pyx_string_tab[456]
#define __pyx_n_u_avril __pyx_string_tab[457]
#define __pyx_n_u_ceil __pyx_string_tab[458]
#define __pyx_n_u_cfg __pyx_string_tab[459]
#define __pyx_n_u_class __pyx_string_tab[460]
#define __pyx_n_u_clear_settings __pyx_string_tab[461]
#define __pyx_n_u_cline_in_traceback __pyx_string_tab[462]
#define __pyx_n_u_cls __pyx_string_tab[463]
#define __pyx_n_u_cuma __pyx_string_tab[464]
#define __pyx_n_u_cumartesi __pyx_string_tab[465]
#define __pyx_n_u_cytimes __pyx_string_tab[466]
#define __pyx_n_u_cytimes_parser __pyx_string_tab[467]
#define __pyx_n_u_cytimes_utils __pyx_string_tab[468]
#define __pyx_n_u_czerwca __pyx_string_tab[469]
#define __pyx_n_u_czwartek __pyx_string_tab[470]
#define __pyx_n_u_d __pyx_string_tab[471]
#define __pyx_n_u_dakika __pyx_string_tab[472]
#define __pyx_n_u_dakikalar __pyx_string_tab[473]
#define __pyx_n_u_data __pyx_string_tab[474]
#define __pyx_n_u_datetime __pyx_string_tab[475]
#define __pyx_n_u_dateutil_parser__parser __pyx_string_tab[476]
#define __pyx_n_u_day __pyx_string_tab[477]
#define __pyx_n_u_dayfirst __pyx_string_tab[478]
#define __pyx_n_u_days __pyx_string_tab[479]
#define __pyx_n_u_dcembre __pyx_string_tab[480]
#define __pyx_n_u_dec __pyx_string_tab[481]
#define __pyx_n_u_december __pyx_string_tab[482]
#define __pyx_n_u_default __pyx_string_tab[483]
#define __pyx_n_u_dezember __pyx_string_tab[484]
#define __pyx_n_u_dezembro __pyx_string_tab[485]
#define __pyx_n_u_dicembre __pyx_string_tab[486]
#define __pyx_n_u_diciembre __pyx_string_tab[487]
#define __pyx_n_u_dict __pyx_string_tab[488]
#define __pyx_n_u_dict_2 __pyx_string_tab[489]
#define __pyx_n_u_dienstag __pyx_string_tab[490]
#define __pyx_n_u_dimanche __pyx_string_tab[491]
#define __pyx_n_u_dinsdag __pyx_string_tab[492]
#define __pyx_n_u_domenica __pyx_string_tab[493]
#define __pyx_n_u_domingo __pyx_string_tab[494]
#define __pyx_n_u_donderdag __pyx_string_tab[495]
#define __pyx_n_u_donnerstag __pyx_string_tab[496]
#define __pyx_n_u_dst __pyx_string_tab[497]
#define __pyx_n_u_dtclass __pyx_string_tab[498]
#define __pyx_n_u_dtobj __pyx_string_tab[499]
#define __pyx_n_u_dtstr __pyx_string_tab[500]
#define __pyx_n_u_dtype __pyx_string_tab[501]
#define __pyx_n_u_eftermiddag __pyx_string_tab[502]
#define __pyx_n_u_ekim __pyx_string_tab[503]
#define __pyx_n_u_enero __pyx_string_tab[504]
#define __pyx_n_u_enumerate __pyx_string_tab[505]
#define __pyx_n_u_errors __pyx_string_tab[506]
#define __pyx_n_u_eyll __pyx_string_tab[507]
#define __pyx_n_u_feb __pyx_string_tab[508]
#define __pyx_n_u_febbraio __pyx_string_tab[509]
#define __pyx_n_u_febr __pyx_string_tab[510]
#define __pyx_n_u_febrero __pyx_string_tab[511]
#define __pyx_n_u_februar __pyx_string_tab[512]
#define __pyx_n_u_februari __pyx_string_tab[513]
#define __pyx_n_u_february __pyx_string_tab[514]
#define __pyx_n_u_fevereiro __pyx_string_tab[515]
#define __pyx_n_u_flag __pyx_string_tab[516]
#define __pyx_n_u_floor __pyx_string_tab[517]
#define __pyx_n_u_fold __pyx_string_tab[518]
#define __pyx_n_u_fredag __pyx_string_tab[519]
#define __pyx_n_u_freitag __pyx_string_tab[520]
#define __pyx_n_u_fri __pyx_string_tab[521]
#define __pyx_n_u_friday __pyx_string_tab[522]
#define __pyx_n_u_from_parserinfo __pyx_string_tab[523]
#define __pyx_n_u_fromutc __pyx_string_tab[524]
#define __pyx_n_u_fs __pyx_string_tab[525]
#define __pyx_n_u_func __pyx_string_tab[526]
#define __pyx_n_u_fvrier __pyx_string_tab[527]
#define __pyx_n_u_gennaio __pyx_string_tab[528]
#define __pyx_n_u_get_ampm __pyx_string_tab[529]
#define __pyx_n_u_get_hms __pyx_string_tab[530]
#define __pyx_n_u_get_month __pyx_string_tab[531]
#define __pyx_n_u_get_tz_offset __pyx_string_tab[532]
#define __pyx_n_u_get_weekday __pyx_string_tab[533]
#define __pyx_n_u_getstate __pyx_string_tab[534]
#define __pyx_n_u_gioved __pyx_string_tab[535]
#define __pyx_n_u_giugno __pyx_string_tab[536]
#define __pyx_n_u_gmt __pyx_string_tab[537]
#define __pyx_n_u_godzin __pyx_string_tab[538]
#define __pyx_n_u_godzina __pyx_string_tab[539]
#define __pyx_n_u_godziny __pyx_string_tab[540]
#define __pyx_n_u_grudnia __pyx_string_tab[541]
#define __pyx_n_u_h __pyx_string_tab[542]
#define __pyx_n_u_haziran __pyx_string_tab[543]
#define __pyx_n_u_heure __pyx_string_tab[544]
#define __pyx_n_u_heures __pyx_string_tab[545]
#define __pyx_n_u_hms __pyx_string_tab[546]
#define __pyx_n_u_hora __pyx_string_tab[547]
#define __pyx_n_u_horas __pyx_string_tab[548]
#define __pyx_n_u_hour __pyx_string_tab[549]
#define __pyx_n_u_hours __pyx_string_tab[550]
#define __pyx_n_u_hr __pyx_string_tab[551]
#define __pyx_n_u_i __pyx_string_tab[552]
#define __pyx_n_u_ignoretz __pyx_string_tab[553]
#define __pyx_n_u_info __pyx_string_tab[554]
#define __pyx_n_u_is_ampm __pyx_string_tab[555]
#define __pyx_n_u_is_coroutine __pyx_string_tab[556]
#define __pyx_n_u_is_hms __pyx_string_tab[557]
#define __pyx_n_u_is_jump __pyx_string_tab[558]
#define __pyx_n_u_is_month __pyx_string_tab[559]
#define __pyx_n_u_is_pertain __pyx_string_tab[560]
#define __pyx_n_u_is_tz __pyx_string_tab[561]
#define __pyx_n_u_is_utc __pyx_string_tab[562]
#define __pyx_n_u_is_weekday __pyx_string_tab[563]
#define __pyx_n_u_isoformat __pyx_string_tab[564]
#define __pyx_n_u_items __pyx_string_tab[565]
#define __pyx_n_u_jan __pyx_string_tab[566]
#define __pyx_n_u_janeiro __pyx_string_tab[567]
#define __pyx_n_u_januar __pyx_string_tab[568]
#define __pyx_n_u_januari __pyx_string_tab[569]
#define __pyx_n_u_january __pyx_string_tab[570]
#define __pyx_n_u_janvier __pyx_string_tab[571]
#define __pyx_n_u_jeudi __pyx_string_tab[572]
#define __pyx_n_u_jueves __pyx_string_tab[573]
#define __pyx_n_u_juillet __pyx_string_tab[574]
#define __pyx_n_u_juin __pyx_string_tab[575]
#define __pyx_n_u_jul __pyx_string_tab[576]
#define __pyx_n_u_julho __pyx_string_tab[577]
#define __pyx_n_u_juli __pyx_string_tab[578]
#define __pyx_n_u_julio __pyx_string_tab[579]
#define __pyx_n_u_july __pyx_string_tab[580]
#define __pyx_n_u_jump __pyx_string_tab[581]
#define __pyx_n_u_jun __pyx_string_tab[582]
#define __pyx_n_u_june __pyx_string_tab[583]
#define __pyx_n_u_junho __pyx_string_tab[584]
#define __pyx_n_u_juni __pyx_string_tab[585]
#define __pyx_n_u_junio __pyx_string_tab[586]
#define __pyx_n_u_kasm __pyx_string_tab[587]
#define __pyx_n_u_kwietnia __pyx_string_tab[588]
#define __pyx_n_u_leden __pyx_string_tab[589]
#define __pyx_n_u_lipca __pyx_string_tab[590]
#define __pyx_n_u_listopada __pyx_string_tab[591]
#define __pyx_n_u_lower __pyx_string_tab[592]
#define __pyx_n_u_lrdag __pyx_string_tab[593]
#define __pyx_n_u_luglio __pyx_string_tab[594]
#define __pyx_n_u_lundi __pyx_string_tab[595]
#define __pyx_n_u_luned __pyx_string_tab[596]
#define __pyx_n_u_lunes __pyx_string_tab[597]
#define __pyx_n_u_lutego __pyx_string_tab[598]
#define __pyx_n_u_m __pyx_string_tab[599]
#define __pyx_n_u_maana __pyx_string_tab[600]
#define __pyx_n_u_maandag __pyx_string_tab[601]
#define __pyx_n_u_maart __pyx_string_tab[602]
#define __pyx_n_u_maggio __pyx_string_tab[603]
#define __pyx_n_u_mai __pyx_string_tab[604]
#define __pyx_n_u_main __pyx_string_tab[605]
#define __pyx_n_u_maio __pyx_string_tab[606]
#define __pyx_n_u_maj __pyx_string_tab[607]
#define __pyx_n_u_maja __pyx_string_tab[608]
#define __pyx_n_u_manh __pyx_string_tab[609]
#define __pyx_n_u_mapping __pyx_string_tab[610]
#define __pyx_n_u_mar __pyx_string_tab[611]
#define __pyx_n_u_marca __pyx_string_tab[612]
#define __pyx_n_u_march __pyx_string_tab[613]
#define __pyx_n_u_mardi __pyx_string_tab[614]
#define __pyx_n_u_maro __pyx_string_tab[615]
#define __pyx_n_u_mars __pyx_string_tab[616]
#define __pyx_n_u_mart __pyx_string_tab[617]
#define __pyx_n_u_marted __pyx_string_tab[618]
#define __pyx_n_u_martes __pyx_string_tab[619]
#define __pyx_n_u_marzo __pyx_string_tab[620]
#define __pyx_n_u_mattina __pyx_string_tab[621]
#define __pyx_n_u_may __pyx_string_tab[622]
#define __pyx_n_u_mayo __pyx_string_tab[623]
#define __pyx_n_u_mays __pyx_string_tab[624]
#define __pyx_n_u_mei __pyx_string_tab[625]
#define __pyx_n_u_mercoled __pyx_string_tab[626]
#define __pyx_n_u_mercredi __pyx_string_tab[627]
#define __pyx_n_u_microsecond __pyx_string_tab[628]
#define __pyx_n_u_microseconds __pyx_string_tab[629]
#define __pyx_n_u_middag __pyx_string_tab[630]
#define __pyx_n_u_min __pyx_string_tab[631]
#define __pyx_n_u_minut __pyx_string_tab[632]
#define __pyx_n_u_minuta __pyx_string_tab[633]
#define __pyx_n_u_minute __pyx_string_tab[634]
#define __pyx_n_u_minuten __pyx_string_tab[635]
#define __pyx_n_u_minuter __pyx_string_tab[636]
#define __pyx_n_u_minutes_2 __pyx_string_tab[637]
#define __pyx_n_u_minuti __pyx_string_tab[638]
#define __pyx_n_u_minuto __pyx_string_tab[639]
#define __pyx_n_u_minutos __pyx_string_tab[640]
#define __pyx_n_u_minuty __pyx_string_tab[641]
#define __pyx_n_u_minuut __pyx_string_tab[642]
#define __pyx_n_u_mircoles __pyx_string_tab[643]
#define __pyx_n_u_mittwoch __pyx_string_tab[644]
#define __pyx_n_u_mndag __pyx_string_tab[645]
#define __pyx_n_u_module __pyx_string_tab[646]
#define __pyx_n_u_mon __pyx_string_tab[647]
#define __pyx_n_u_monday __pyx_string_tab[648]
#define __pyx_n_u_montag __pyx_string_tab[649]
#define __pyx_n_u_month __pyx_string_tab[650]
#define __pyx_n_u_morgen __pyx_string_tab[651]
#define __pyx_n_u_morgon __pyx_string_tab[652]
#define __pyx_n_u_morning __pyx_string_tab[653]
#define __pyx_n_u_mrz __pyx_string_tab[654]
#define __pyx_n_u_ms __pyx_string_tab[655]
#define __pyx_n_u_nachmittag __pyx_string_tab[656]
#define __pyx_n_u_name __pyx_string_tab[657]
#define __pyx_n_u_nd __pyx_string_tab[658]
#define __pyx_n_u_new __pyx_string_tab[659]
#define __pyx_n_u_niedziela __pyx_string_tab[660]
#define __pyx_n_u_nisan __pyx_string_tab[661]
#define __pyx_n_u_nov __pyx_string_tab[662]
#define __pyx_n_u_november __pyx_string_tab[663]
#define __pyx_n_u_novembre __pyx_string_tab[664]
#define __pyx_n_u_novembro __pyx_string_tab[665]
#define __pyx_n_u_noviembre __pyx_string_tab[666]
#define __pyx_n_u_ns __pyx_string_tab[667]
#define __pyx_n_u_object __pyx_string_tab[668]
#define __pyx_n_u_ocak __pyx_string_tab[669]
#define __pyx_n_u_ochtend __pyx_string_tab[670]
#define __pyx_n_u_oct __pyx_string_tab[671]
#define __pyx_n_u_october __pyx_string_tab[672]
#define __pyx_n_u_octobre __pyx_string_tab[673]
#define __pyx_n_u_octubre __pyx_string_tab[674]
#define __pyx_n_u_of __pyx_string_tab[675]
#define __pyx_n_u_oktober __pyx_string_tab[676]
#define __pyx_n_u_on __pyx_string_tab[677]
#define __pyx_n_u_onsdag __pyx_string_tab[678]
#define __pyx_n_u_ora __pyx_string_tab[679]
#define __pyx_n_u_order_hint __pyx_string_tab[680]
#define __pyx_n_u_ore __pyx_string_tab[681]
#define __pyx_n_u_ottobre __pyx_string_tab[682]
#define __pyx_n_u_outubro __pyx_string_tab[683]
#define __pyx_n_u_p __pyx_string_tab[684]
#define __pyx_n_u_padziernika __pyx_string_tab[685]
#define __pyx_n_u_parse __pyx_string_tab[686]
#define __pyx_n_u_parse_month __pyx_string_tab[687]
#define __pyx_n_u_parse_obj __pyx_string_tab[688]
#define __pyx_n_u_parse_to_float __pyx_string_tab[689]
#define __pyx_n_u_parse_to_int __pyx_string_tab[690]
#define __pyx_n_u_parse_weekday __pyx_string_tab[691]
#define __pyx_n_u_parserinfo __pyx_string_tab[692]
#define __pyx_n_u_pazar __pyx_string_tab[693]
#define __pyx_n_u_pazartesi __pyx_string_tab[694]
#define __pyx_n_u_perembe __pyx_string_tab[695]
#define __pyx_n_u_pertain __pyx_string_tab[696]
#define __pyx_n_u_pitek __pyx_string_tab[697]
#define __pyx_n_u_pm __pyx_string_tab[698]
#define __pyx_n_u_pomeriggio __pyx_string_tab[699]
#define __pyx_n_u_poniedziaek __pyx_string_tab[700]
#define __pyx_n_u_pop __pyx_string_tab[701]
#define __pyx_n_u_popoudnie __pyx_string_tab[702]
#define __pyx_n_u_ps __pyx_string_tab[703]
#define __pyx_n_u_pyx_capi __pyx_string_tab[704]
#define __pyx_n_u_pyx_checksum __pyx_string_tab[705]
#define __pyx_n_u_pyx_result __pyx_string_tab[706]
#define __pyx_n_u_pyx_state __pyx_string_tab[707]
#define __pyx_n_u_pyx_type __pyx_string_tab[708]
#define __pyx_n_u_pyx_unpickle_Configs __pyx_string_tab[709]
#define __pyx_n_u_pyx_unpickle_Parser __pyx_string_tab[710]
#define __pyx_n_u_pyx_vtable __pyx_string_tab[711]
#define __pyx_n_u_qualname __pyx_string_tab[712]
#define __pyx_n_u_raise_error __pyx_string_tab[713]
#define __pyx_n_u_rano __pyx_string_tab[714]
#define __pyx_n_u_rd __pyx_string_tab[715]
#define __pyx_n_u_reduce __pyx_string_tab[716]
#define __pyx_n_u_reduce_cython __pyx_string_tab[717]
#define __pyx_n_u_reduce_ex __pyx_string_tab[718]
#define __pyx_n_u_remove_ampm __pyx_string_tab[719]
#define __pyx_n_u_remove_hms __pyx_string_tab[720]
#define __pyx_n_u_remove_jump __pyx_string_tab[721]
#define __pyx_n_u_remove_month __pyx_string_tab[722]
#define __pyx_n_u_remove_pertain __pyx_string_tab[723]
#define __pyx_n_u_remove_tz __pyx_string_tab[724]
#define __pyx_n_u_remove_utc __pyx_string_tab[725]
#define __pyx_n_u_remove_weekday __pyx_string_tab[726]
#define __pyx_n_u_replace_ampm __pyx_string_tab[727]
#define __pyx_n_u_replace_hms __pyx_string_tab[728]
#define __pyx_n_u_replace_jump __pyx_string_tab[729]
#define __pyx_n_u_replace_month __pyx_string_tab[730]
#define __pyx_n_u_replace_pertain __pyx_string_tab[731]
#define __pyx_n_u_replace_tz __pyx_string_tab[732]
#define __pyx_n_u_replace_utc __pyx_string_tab[733]
#define __pyx_n_u_replace_weekday __pyx_string_tab[734]
#define __pyx_n_u_reset_settings __pyx_string_tab[735]
#define __pyx_n_u_return __pyx_string_tab[736]
#define __pyx_n_u_roda __pyx_string_tab[737]
#define __pyx_n_u_round __pyx_string_tab[738]
#define __pyx_n_u_row __pyx_string_tab[739]
#define __pyx_n_u_s __pyx_string_tab[740]
#define __pyx_n_u_saat __pyx_string_tab[741]
#define __pyx_n_u_saatler __pyx_string_tab[742]
#define __pyx_n_u_sabah __pyx_string_tab[743]
#define __pyx_n_u_sabato __pyx_string_tab[744]
#define __pyx_n_u_sal __pyx_string_tab[745]
#define __pyx_n_u_samedi __pyx_string_tab[746]
#define __pyx_n_u_samstag __pyx_string_tab[747]
#define __pyx_n_u_saniye __pyx_string_tab[748]
#define __pyx_n_u_saniyeler __pyx_string_tab[749]
#define __pyx_n_u_sat __pyx_string_tab[750]
#define __pyx_n_u_saturday __pyx_string_tab[751]
#define __pyx_n_u_sbado __pyx_string_tab[752]
#define __pyx_n_u_sec __pyx_string_tab[753]
#define __pyx_n_u_second __pyx_string_tab[754]
#define __pyx_n_u_seconde __pyx_string_tab[755]
#define __pyx_n_u_seconden __pyx_string_tab[756]
#define __pyx_n_u_secondes __pyx_string_tab[757]
#define __pyx_n_u_secondi __pyx_string_tab[758]
#define __pyx_n_u_secondo __pyx_string_tab[759]
#define __pyx_n_u_seconds __pyx_string_tab[760]
#define __pyx_n_u_segundo __pyx_string_tab[761]
#define __pyx_n_u_segundos __pyx_string_tab[762]
#define __pyx_n_u_sekund __pyx_string_tab[763]
#define __pyx_n_u_sekunda __pyx_string_tab[764]
#define __pyx_n_u_sekunde __pyx_string_tab[765]
#define __pyx_n_u_sekunden __pyx_string_tab[766]
#define __pyx_n_u_sekunder __pyx_string_tab[767]
#define __pyx_n_u_sekundy __pyx_string_tab[768]
#define __pyx_n_u_self __pyx_string_tab[769]
#define __pyx_n_u_sep __pyx_string_tab[770]
#define __pyx_n_u_sept __pyx_string_tab[771]
#define __pyx_n_u_september __pyx_string_tab[772]
#define __pyx_n_u_septembre __pyx_string_tab[773]
#define __pyx_n_u_septiembre __pyx_string_tab[774]
#define __pyx_n_u_set_name __pyx_string_tab[775]
#define __pyx_n_u_setdefault __pyx_string_tab[776]
#define __pyx_n_u_setembro __pyx_string_tab[777]
#define __pyx_n_u_setstate __pyx_string_tab[778]
#define __pyx_n_u_setstate_cython __pyx_string_tab[779]
#define __pyx_n_u_settembre __pyx_string_tab[780]
#define __pyx_n_u_sierpnia __pyx_string_tab[781]
#define __pyx_n_u_sndag __pyx_string_tab[782]
#define __pyx_n_u_sobota __pyx_string_tab[783]
#define __pyx_n_u_sonntag __pyx_string_tab[784]
#define __pyx_n_u_st __pyx_string_tab[785]
#define __pyx_n_u_state __pyx_string_tab[786]
#define __pyx_n_u_str __pyx_string_tab[787]
#define __pyx_n_u_stunde __pyx_string_tab[788]
#define __pyx_n_u_stunden __pyx_string_tab[789]
#define __pyx_n_u_stycznia __pyx_string_tab[790]
#define __pyx_n_u_sun __pyx_string_tab[791]
#define __pyx_n_u_sunday __pyx_string_tab[792]
#define __pyx_n_u_t __pyx_string_tab[793]
#define __pyx_n_u_tarde __pyx_string_tab[794]
#define __pyx_n_u_temmuz __pyx_string_tab[795]
#define __pyx_n_u_test __pyx_string_tab[796]
#define __pyx_n_u_th __pyx_string_tab[797]
#define __pyx_n_u_thu __pyx_string_tab[798]
#define __pyx_n_u_thursday __pyx_string_tab[799]
#define __pyx_n_u_timelex __pyx_string_tab[800]
#define __pyx_n_u_timmar __pyx_string_tab[801]
#define __pyx_n_u_timme __pyx_string_tab[802]
#define __pyx_n_u_tisdag __pyx_string_tab[803]
#define __pyx_n_u_title __pyx_string_tab[804]
#define __pyx_n_u_token __pyx_string_tab[805]
#define __pyx_n_u_tokens __pyx_string_tab[806]
#define __pyx_n_u_torsdag __pyx_string_tab[807]
#define __pyx_n_u_tue __pyx_string_tab[808]
#define __pyx_n_u_tuesday __pyx_string_tab[809]
#define __pyx_n_u_tz __pyx_string_tab[810]
#define __pyx_n_u_tzinfo __pyx_string_tab[811]
#define __pyx_n_u_tzname __pyx_string_tab[812]
#define __pyx_n_u_ubat __pyx_string_tab[813]
#define __pyx_n_u_update __pyx_string_tab[814]
#define __pyx_n_u_upper __pyx_string_tab[815]
#define __pyx_n_u_uren __pyx_string_tab[816]
#define __pyx_n_u_us __pyx_string_tab[817]
#define __pyx_n_u_use_setstate __pyx_string_tab[818]
#define __pyx_n_u_utc __pyx_string_tab[819]
#define __pyx_n_u_utcoffset __pyx_string_tab[820]
#define __pyx_n_u_utils __pyx_string_tab[821]
#define __pyx_n_u_uur __pyx_string_tab[822]
#define __pyx_n_u_values __pyx_string_tab[823]
#define __pyx_n_u_vendredi __pyx_string_tab[824]
#define __pyx_n_u_venerd __pyx_string_tab[825]
#define __pyx_n_u_viernes __pyx_string_tab[826]
#define __pyx_n_u_vrijdag __pyx_string_tab[827]
#define __pyx_n_u_wed __pyx_string_tab[828]
#define __pyx_n_u_wednesday __pyx_string_tab[829]
#define __pyx_n_u_weekday __pyx_string_tab[830]
#define __pyx_n_u_woensdag __pyx_string_tab[831]
#define __pyx_n_u_wrzenia __pyx_string_tab[832]
#define __pyx_n_u_wtorek __pyx_string_tab[833]
#define __pyx_n_u_year __pyx_string_tab[834]
#define __pyx_n_u_yearfirst __pyx_string_tab[835]
#define __pyx_n_u_z __pyx_string_tab[836]
#define __pyx_n_u_zaterdag __pyx_string_tab[837]
#define __pyx_n_u_zondag __pyx_string_tab[838]
#define __pyx_kp_b_PY_LONG_LONG_PyDateTime_DateTime __pyx_string_tab[839]
#define __pyx_kp_b_PyDateTime_DateTime_PyObject_int __pyx_string_tab[840]
#define __pyx_kp_b_PyObject_struct___pyx_obj_7cytim __pyx_string_tab[841]
#define __pyx_kp_b_int_PyObject_int___pyx_skip_disp __pyx_string_tab[842]
#define __pyx_kp_b_iso88591_1_q_vS_z_q_4t1_A_5_WA_q_f_0_SSU __pyx_string_tab[843]
#define __pyx_kp_b_iso88591_1_q_vS_z_q_4t1_A_5_WA_q_f_a_RRT __pyx_string_tab[844]
#define __pyx_kp_b_iso88591_1_vS_j_q_z_A_q_q_1_U_1_XQgQ_b_3 __pyx_string_tab[845]
#define __pyx_kp_b_iso88591_81F_Q __pyx_string_tab[846]
#define __pyx_kp_b_iso88591_AV1 __pyx_string_tab[847]
#define __pyx_kp_b_iso88591_A_1_7_Q_Q_4q_t1_O1_q_Q_L_7q_1_A __pyx_string_tab[848]
#define __pyx_kp_b_iso88591_A_1_AYa_AYgS_AT_G4_0_q_q __pyx_string_tab[849]
#define __pyx_kp_b_iso88591_A_2_4z_a_a_T_s_T_m9D_Q_Qd_q_AS_Q __pyx_string_tab[850]
#define __pyx_kp_b_iso88591_A_31_83a_a_D_A_Kq_O1_5_vQ_G1_6_6 __pyx_string_tab[851]
#define __pyx_kp_b_iso88591_A_4A_83a_a_D_A_L_A_5_vQ_HA_7_7_A __pyx_string_tab[852]
#define __pyx_kp_b_iso88591_A_4_4t1_1_T_T_1_T_1_1 __pyx_string_tab[853]
#define __pyx_kp_b_iso88591_A_5Q_83a_a_D_A_M_Q_5_vQ_IQ_81_81 __pyx_string_tab[854]
#define __pyx_kp_b_iso88591_A_6_A_1_1D_1 __pyx_string_tab[855]
#define __pyx_kp_b_iso88591_A_6_A_1_1D_A __pyx_string_tab[856]
#define __pyx_kp_b_iso88591_A_6_A_1_1D_q __pyx_string_tab[857]
#define __pyx_kp_b_iso88591_A_6_A_1_AT __pyx_string_tab[858]
#define __pyx_kp_b_iso88591_A_6_A_1_AT_1 __pyx_string_tab[859]
#define __pyx_kp_b_iso88591_A_6_A_1_AT_A __pyx_string_tab[860]
#define __pyx_kp_b_iso88591_A_6_A_1_AT_Q __pyx_string_tab[861]
#define __pyx_kp_b_iso88591_A_6_A_1_AT_a __pyx_string_tab[862]
#define __pyx_kp_b_iso88591_A_6_A_AT_1_6_1 __pyx_string_tab[863]
#define __pyx_kp_b_iso88591_A_6_A_A_AT_6_A_1 __pyx_string_tab[864]
#define __pyx_kp_b_iso88591_A_6_A_A_AT_A_6_A_1 __pyx_string_tab[865]
#define __pyx_kp_b_iso88591_A_6_A_A_AT_Q_6_A_1 __pyx_string_tab[866]
#define __pyx_kp_b_iso88591_A_6_A_A_AT_a_6_A_1 __pyx_string_tab[867]
#define __pyx_kp_b_iso88591_A_6a_83a_a_D_A_N_a_5_vQ_Ja_9A_9A __pyx_string_tab[868]
#define __pyx_kp_b_iso88591_A_8_83a_a_D_A_A_5_vQ_L_a_a_A_q __pyx_string_tab[869]
#define __pyx_kp_b_iso88591_A_AWA_AWF_Q_AT_q_G4_0_Q_q __pyx_string_tab[870]
#define __pyx_kp_b_iso88591_A_AWA_q_G1_G4_0_1D_1_q __pyx_string_tab[871]
#define __pyx_kp_b_iso88591_A_AXQ_AXV3a_AT_G4_0_a_q __pyx_string_tab[872]
#define __pyx_kp_b_iso88591_A_AXQ_q_HA_G4_0_1D_A_q __pyx_string_tab[873]
#define __pyx_kp_b_iso88591_A_A_1_6_A_AT_d_M_IQgQ_4t5__Jc_4q __pyx_string_tab[874]
#define __pyx_kp_b_iso88591_A_A_a_a_AV1_A_Cr_81_AT_wa_G4_0_Z __pyx_string_tab[875]
#define __pyx_kp_b_iso88591_A_A_q_Kq_G4_0_1D_q_q __pyx_string_tab[876]
#define __pyx_kp_b_iso88591_A_L_A_O1_q_Kq_O1_Kq_O1_N_a_A_L_A __pyx_string_tab[877]
#define __pyx_kp_b_iso88591_A_O1_M_AQ_L_Kq_N_1_AQ_L_M_q __pyx_string_tab[878]
#define __pyx_kp_b_iso88591_A_Q_7_Q_Q_4q_t1_Kq_O1_Q_HAT_31G1 __pyx_string_tab[879]
#define __pyx_kp_b_iso88591_A_QfA_V1_1_G4_0_AT_1_q __pyx_string_tab[880]
#define __pyx_kp_b_iso88591_A_QgQ_Qd_1_t_4AQ_1D_1_q __pyx_string_tab[881]
#define __pyx_kp_b_iso88591_A_QgQ_WA_1_G4_0_AT_A_q __pyx_string_tab[882]
#define __pyx_kp_b_iso88591_A_Qha_Qd_1_t_4AQ_1D_A_q __pyx_string_tab[883]
#define __pyx_kp_b_iso88591_A_Qha_XQ_1_G4_0_AT_Q_q __pyx_string_tab[884]
#define __pyx_kp_b_iso88591_A_Qiq_Ya_1_G4_0_AT_a_q __pyx_string_tab[885]
#define __pyx_kp_b_iso88591_A_Qk_1_G4_0_AT_q __pyx_string_tab[886]
#define __pyx_kp_b_iso88591_A_Qk_Qd_Q_1_t_4AQ_1D_q_q __pyx_string_tab[887]
#define __pyx_kp_b_iso88591_A_a_7_Q_Q_4q_t1_L_A_Q_IQd_4AXQ_Q __pyx_string_tab[888]
#define __pyx_kp_b_iso88591_A_q_A_A_A_AT_G1_G4_0__E_q __pyx_string_tab[889]
#define __pyx_kp_b_iso88591_Q __pyx_string_tab[890]
#define __pyx_kp_b_iso88591_QfA __pyx_string_tab[891]
#define __pyx_kp_b_iso88591_T_G4_4z_WTXX__ccmmqqr_G1F_a_vWE __pyx_string_tab[892]
#define __pyx_kp_b_iso88591_T_XT_T_TQXX_ggkkssw_x_D_D_H_H_Q __pyx_string_tab[893]
#define __pyx_kp_b_iso88591_a_q_A_Q_1_aH_t3a_fAWI_T___vQd_J __pyx_string_tab[894]
#define __pyx_kp_b_iso88591_a_q_A_Q_1_aR_z_4_1A_Cq_uA_9Kz_e __pyx_string_tab[895]
#define __pyx_kp_b_iso88591_q_0_kQR_6_7_1 __pyx_string_tab[896]
#define __pyx_kp_b_iso88591_q_0_kQR_7_1_7_N_1 __pyx_string_tab[897]
#define __pyx_kp_b_iso88591_vS_j_q_z_A_q_A_A_q_q_1_U_1_XQgQ __pyx_string_tab[898]
#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_2 __pyx_number_tab[3]
#define __pyx_int_3 __pyx_number_tab[4]
#define __pyx_int_4 __pyx_number_tab[5]
#define __pyx_int_5 __pyx_number_tab[6]
#define __pyx_int_6 __pyx_number_tab[7]
#define __pyx_int_7 __pyx_number_tab[8]
#define __pyx_int_8 __pyx_number_tab[9]
#define __pyx_int_9 __pyx_number_tab[10]
#define __pyx_int_10 __pyx_number_tab[11]
#define __pyx_int_11 __pyx_number_tab[12]
#define __pyx_int_12 __pyx_number_tab[13]
#define __pyx_int_28 __pyx_number_tab[14]
#define __pyx_int_31358320 __pyx_number_tab[15]
#define __pyx_int_258420170 __pyx_number_tab[16]
/* #### 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_7cpython_4type_type);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4bool_bool);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_7complex_complex);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_date);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_time);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_datetime);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_timedelta);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_8datetime_tzinfo);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character);
  Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cytimes_6parser_Configs);
  Py_CLEAR(clear_module_state->__pyx_type_7cytimes_6parser_Configs);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cytimes_6parser_Result);
  Py_CLEAR(clear_module_state->__pyx_type_7cytimes_6parser_Result);
  Py_CLEAR(clear_module_state->__pyx_ptype_7cytimes_6parser_Parser);
  Py_CLEAR(clear_module_state->__pyx_type_7cytimes_6parser_Parser);
  for (int i=0; i<7; ++i) { Py_CLEAR(clear_module_state->__pyx_tuple[i]); }
  for (int i=0; i<57; ++i) { Py_CLEAR(clear_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<899; ++i) { Py_CLEAR(clear_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<17; ++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);

/* #### 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_7cpython_4type_type);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4bool_bool);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_7complex_complex);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_date);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_time);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_datetime);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_timedelta);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_8datetime_tzinfo);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character);
  Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cytimes_6parser_Configs);
  Py_VISIT(traverse_module_state->__pyx_type_7cytimes_6parser_Configs);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cytimes_6parser_Result);
  Py_VISIT(traverse_module_state->__pyx_type_7cytimes_6parser_Result);
  Py_VISIT(traverse_module_state->__pyx_ptype_7cytimes_6parser_Parser);
  Py_VISIT(traverse_module_state->__pyx_type_7cytimes_6parser_Parser);
  for (int i=0; i<7; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_tuple[i]); }
  for (int i=0; i<57; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_codeobj_tab[i]); }
  for (int i=0; i<899; ++i) { __Pyx_VISIT_CONST(traverse_module_state->__pyx_string_tab[i]); }
  for (int i=0; i<17; ++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);

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

/* "cpython/complex.pxd":20
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4real_real(PyComplexObject *__pyx_v_self) {
  double __pyx_r;

  /* "cpython/complex.pxd":23
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
 *             return self.cval.real             # <<<<<<<<<<<<<<
 * 
 *         # unavailable in limited API
*/
  __pyx_r = __pyx_v_self->cval.real;
  goto __pyx_L0;

  /* "cpython/complex.pxd":20
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double real(self) noexcept:
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/complex.pxd":26
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE double __pyx_f_7cpython_7complex_7complex_4imag_imag(PyComplexObject *__pyx_v_self) {
  double __pyx_r;

  /* "cpython/complex.pxd":29
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
 *             return self.cval.imag             # <<<<<<<<<<<<<<
 * 
 *     # PyTypeObject PyComplex_Type
*/
  __pyx_r = __pyx_v_self->cval.imag;
  goto __pyx_L0;

  /* "cpython/complex.pxd":26
 * 
 *         # unavailable in limited API
 *         @property             # <<<<<<<<<<<<<<
 *         @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 *         cdef inline double imag(self) noexcept:
*/

  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/contextvars.pxd":115
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value *__pyx_optional_args) {

  /* "cpython/contextvars.pxd":116
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the default value of the context variable,
*/
  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
  PyObject *__pyx_v_value;
  PyObject *__pyx_v_pyvalue = NULL;
  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_value", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default_value = __pyx_optional_args->default_value;
    }
  }

  /* "cpython/contextvars.pxd":121
 *     or None if no such value or default was found.
 *     """
 *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:
*/
  __pyx_v_value = NULL;

  /* "cpython/contextvars.pxd":122
 *     """
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)             # <<<<<<<<<<<<<<
 *     if value is NULL:
 *         # context variable does not have a default
*/
  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, NULL, (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 122, __pyx_L1_error)

  /* "cpython/contextvars.pxd":123
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:             # <<<<<<<<<<<<<<
 *         # context variable does not have a default
 *         pyvalue = default_value
*/
  __pyx_t_2 = (__pyx_v_value == NULL);
  if (__pyx_t_2) {

    /* "cpython/contextvars.pxd":125
 *     if value is NULL:
 *         # context variable does not have a default
 *         pyvalue = default_value             # <<<<<<<<<<<<<<
 *     else:
 *         # value or default value of context variable
*/
    __Pyx_INCREF(__pyx_v_default_value);
    __pyx_v_pyvalue = __pyx_v_default_value;

    /* "cpython/contextvars.pxd":123
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, NULL, &value)
 *     if value is NULL:             # <<<<<<<<<<<<<<
 *         # context variable does not have a default
 *         pyvalue = default_value
*/
    goto __pyx_L3;
  }

  /* "cpython/contextvars.pxd":128
 *     else:
 *         # value or default value of context variable
 *         pyvalue = <object>value             # <<<<<<<<<<<<<<
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue
*/
  /*else*/ {
    __pyx_t_3 = ((PyObject *)__pyx_v_value);
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_pyvalue = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "cpython/contextvars.pxd":129
 *         # value or default value of context variable
 *         pyvalue = <object>value
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
 *     return pyvalue
 * 
*/
    Py_XDECREF(__pyx_v_value);
  }
  __pyx_L3:;

  /* "cpython/contextvars.pxd":130
 *         pyvalue = <object>value
 *         Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pyvalue);
  __pyx_r = __pyx_v_pyvalue;
  goto __pyx_L0;

  /* "cpython/contextvars.pxd":115
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cpython.contextvars.get_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pyvalue);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "cpython/contextvars.pxd":133
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value_no_default(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

#if !CYTHON_COMPILING_IN_LIMITED_API
static CYTHON_INLINE PyObject *__pyx_f_7cpython_11contextvars_get_value_no_default(PyObject *__pyx_v_var, struct __pyx_opt_args_7cpython_11contextvars_get_value_no_default *__pyx_optional_args) {

  /* "cpython/contextvars.pxd":134
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")
 * cdef inline object get_value_no_default(var, default_value=None):             # <<<<<<<<<<<<<<
 *     """Return a new reference to the value of the context variable,
 *     or the provided default value if no such value was found.
*/
  PyObject *__pyx_v_default_value = ((PyObject *)Py_None);
  PyObject *__pyx_v_value;
  PyObject *__pyx_v_pyvalue = NULL;
  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_value_no_default", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default_value = __pyx_optional_args->default_value;
    }
  }

  /* "cpython/contextvars.pxd":140
 *     Ignores the default value of the context variable, if any.
 *     """
 *     cdef PyObject *value = NULL             # <<<<<<<<<<<<<<
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)
 *     # value of context variable or 'default_value'
*/
  __pyx_v_value = NULL;

  /* "cpython/contextvars.pxd":141
 *     """
 *     cdef PyObject *value = NULL
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)             # <<<<<<<<<<<<<<
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value
*/
  __pyx_t_1 = PyContextVar_Get(__pyx_v_var, ((PyObject *)__pyx_v_default_value), (&__pyx_v_value)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(1, 141, __pyx_L1_error)

  /* "cpython/contextvars.pxd":143
 *     PyContextVar_Get(var, <PyObject*>default_value, &value)
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value             # <<<<<<<<<<<<<<
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue
*/
  __pyx_t_2 = ((PyObject *)__pyx_v_value);
  __Pyx_INCREF(__pyx_t_2);
  __pyx_v_pyvalue = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "cpython/contextvars.pxd":144
 *     # value of context variable or 'default_value'
 *     pyvalue = <object>value
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'             # <<<<<<<<<<<<<<
 *     return pyvalue
*/
  Py_XDECREF(__pyx_v_value);

  /* "cpython/contextvars.pxd":145
 *     pyvalue = <object>value
 *     Py_XDECREF(value)  # PyContextVar_Get() returned an owned reference as 'PyObject*'
 *     return pyvalue             # <<<<<<<<<<<<<<
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_pyvalue);
  __pyx_r = __pyx_v_pyvalue;
  goto __pyx_L0;

  /* "cpython/contextvars.pxd":133
 * 
 * 
 * @_cython.c_compile_guard("!CYTHON_COMPILING_IN_LIMITED_API")             # <<<<<<<<<<<<<<
 * cdef inline object get_value_no_default(var, default_value=None):
 *     """Return a new reference to the value of the context variable,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cpython.contextvars.get_value_no_default", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pyvalue);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
#endif /*!(#if !CYTHON_COMPILING_IN_LIMITED_API)*/

/* "datetime.pxd":44
 * 
 *     ctypedef extern class datetime.date[object PyDateTime_Date]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_4year_year(PyDateTime_Date *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":46
 *         @property
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_GET_YEAR(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":44
 * 
 *     ctypedef extern class datetime.date[object PyDateTime_Date]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)
*/

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

/* "datetime.pxd":48
 *             return PyDateTime_GET_YEAR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_5month_month(PyDateTime_Date *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":50
 *         @property
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_GET_MONTH(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":48
 *             return PyDateTime_GET_YEAR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)
*/

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

/* "datetime.pxd":52
 *             return PyDateTime_GET_MONTH(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4date_3day_day(PyDateTime_Date *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":54
 *         @property
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)             # <<<<<<<<<<<<<<
 * 
 *     ctypedef extern class datetime.time[object PyDateTime_Time]:
*/
  __pyx_r = PyDateTime_GET_DAY(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":52
 *             return PyDateTime_GET_MONTH(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)
*/

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

/* "datetime.pxd":57
 * 
 *     ctypedef extern class datetime.time[object PyDateTime_Time]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_TIME_GET_HOUR(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4hour_hour(PyDateTime_Time *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":59
 *         @property
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_TIME_GET_HOUR(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_TIME_GET_HOUR(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":57
 * 
 *     ctypedef extern class datetime.time[object PyDateTime_Time]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_TIME_GET_HOUR(self)
*/

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

/* "datetime.pxd":61
 *             return PyDateTime_TIME_GET_HOUR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_TIME_GET_MINUTE(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6minute_minute(PyDateTime_Time *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":63
 *         @property
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_TIME_GET_MINUTE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_TIME_GET_MINUTE(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":61
 *             return PyDateTime_TIME_GET_HOUR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_TIME_GET_MINUTE(self)
*/

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

/* "datetime.pxd":65
 *             return PyDateTime_TIME_GET_MINUTE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_TIME_GET_SECOND(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_6second_second(PyDateTime_Time *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":67
 *         @property
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_TIME_GET_SECOND(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_TIME_GET_SECOND(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":65
 *             return PyDateTime_TIME_GET_MINUTE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_TIME_GET_SECOND(self)
*/

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

/* "datetime.pxd":69
 *             return PyDateTime_TIME_GET_SECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_TIME_GET_MICROSECOND(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(PyDateTime_Time *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":71
 *         @property
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_TIME_GET_MICROSECOND(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_TIME_GET_MICROSECOND(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":69
 *             return PyDateTime_TIME_GET_SECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_TIME_GET_MICROSECOND(self)
*/

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

/* "datetime.pxd":73
 *             return PyDateTime_TIME_GET_MICROSECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_TIME_GET_TZINFO(self)
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(PyDateTime_Time *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("tzinfo", 0);

  /* "datetime.pxd":75
 *         @property
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_TIME_GET_TZINFO(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTime_TIME_GET_TZINFO(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_t_1));
  __pyx_r = ((PyObject *)__pyx_t_1);
  goto __pyx_L0;

  /* "datetime.pxd":73
 *             return PyDateTime_TIME_GET_MICROSECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_TIME_GET_TZINFO(self)
*/

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

/* "datetime.pxd":77
 *             return <object>PyDateTime_TIME_GET_TZINFO(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_4time_4fold_fold(PyDateTime_Time *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":80
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
 *             return PyDateTime_TIME_GET_FOLD(self)             # <<<<<<<<<<<<<<
 * 
 *     ctypedef extern class datetime.datetime[object PyDateTime_DateTime]:
*/
  __pyx_r = PyDateTime_TIME_GET_FOLD(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":77
 *             return <object>PyDateTime_TIME_GET_TZINFO(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
*/

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

/* "datetime.pxd":83
 * 
 *     ctypedef extern class datetime.datetime[object PyDateTime_DateTime]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4year_year(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":85
 *         @property
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_GET_YEAR(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":83
 * 
 *     ctypedef extern class datetime.datetime[object PyDateTime_DateTime]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int year(self) noexcept:
 *             return PyDateTime_GET_YEAR(self)
*/

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

/* "datetime.pxd":87
 *             return PyDateTime_GET_YEAR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_5month_month(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":89
 *         @property
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_GET_MONTH(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":87
 *             return PyDateTime_GET_YEAR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int month(self) noexcept:
 *             return PyDateTime_GET_MONTH(self)
*/

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

/* "datetime.pxd":91
 *             return PyDateTime_GET_MONTH(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_3day_day(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":93
 *         @property
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_GET_DAY(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":91
 *             return PyDateTime_GET_MONTH(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_GET_DAY(self)
*/

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

/* "datetime.pxd":95
 *             return PyDateTime_GET_DAY(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_DATE_GET_HOUR(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4hour_hour(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":97
 *         @property
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_DATE_GET_HOUR(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DATE_GET_HOUR(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":95
 *             return PyDateTime_GET_DAY(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int hour(self) noexcept:
 *             return PyDateTime_DATE_GET_HOUR(self)
*/

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

/* "datetime.pxd":99
 *             return PyDateTime_DATE_GET_HOUR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_DATE_GET_MINUTE(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6minute_minute(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":101
 *         @property
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_DATE_GET_MINUTE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DATE_GET_MINUTE(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":99
 *             return PyDateTime_DATE_GET_HOUR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int minute(self) noexcept:
 *             return PyDateTime_DATE_GET_MINUTE(self)
*/

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

/* "datetime.pxd":103
 *             return PyDateTime_DATE_GET_MINUTE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DATE_GET_SECOND(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_6second_second(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":105
 *         @property
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DATE_GET_SECOND(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DATE_GET_SECOND(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":103
 *             return PyDateTime_DATE_GET_MINUTE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DATE_GET_SECOND(self)
*/

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

/* "datetime.pxd":107
 *             return PyDateTime_DATE_GET_SECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DATE_GET_MICROSECOND(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":109
 *         @property
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DATE_GET_MICROSECOND(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DATE_GET_MICROSECOND(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":107
 *             return PyDateTime_DATE_GET_SECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DATE_GET_MICROSECOND(self)
*/

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

/* "datetime.pxd":111
 *             return PyDateTime_DATE_GET_MICROSECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_DATE_GET_TZINFO(self)
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(PyDateTime_DateTime *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("tzinfo", 0);

  /* "datetime.pxd":113
 *         @property
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_DATE_GET_TZINFO(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTime_DATE_GET_TZINFO(((PyObject *)__pyx_v_self));
  __Pyx_INCREF(((PyObject *)__pyx_t_1));
  __pyx_r = ((PyObject *)__pyx_t_1);
  goto __pyx_L0;

  /* "datetime.pxd":111
 *             return PyDateTime_DATE_GET_MICROSECOND(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object tzinfo(self):
 *             return <object>PyDateTime_DATE_GET_TZINFO(self)
*/

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

/* "datetime.pxd":115
 *             return <object>PyDateTime_DATE_GET_TZINFO(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_8datetime_4fold_fold(PyDateTime_DateTime *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":118
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
 *             return PyDateTime_DATE_GET_FOLD(self)             # <<<<<<<<<<<<<<
 * 
 *     ctypedef extern class datetime.timedelta[object PyDateTime_Delta]:
*/
  __pyx_r = PyDateTime_DATE_GET_FOLD(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":115
 *             return <object>PyDateTime_DATE_GET_TZINFO(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int fold(self) noexcept:
 *             # For Python < 3.6 this returns 0 no matter what
*/

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

/* "datetime.pxd":121
 * 
 *     ctypedef extern class datetime.timedelta[object PyDateTime_Delta]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_DELTA_GET_DAYS(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_3day_day(PyDateTime_Delta *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":123
 *         @property
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_DELTA_GET_DAYS(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DELTA_GET_DAYS(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":121
 * 
 *     ctypedef extern class datetime.timedelta[object PyDateTime_Delta]:
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int day(self) noexcept:
 *             return PyDateTime_DELTA_GET_DAYS(self)
*/

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

/* "datetime.pxd":125
 *             return PyDateTime_DELTA_GET_DAYS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DELTA_GET_SECONDS(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_6second_second(PyDateTime_Delta *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":127
 *         @property
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DELTA_GET_SECONDS(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDateTime_DELTA_GET_SECONDS(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":125
 *             return PyDateTime_DELTA_GET_DAYS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int second(self) noexcept:
 *             return PyDateTime_DELTA_GET_SECONDS(self)
*/

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

/* "datetime.pxd":129
 *             return PyDateTime_DELTA_GET_SECONDS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DELTA_GET_MICROSECONDS(self)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(PyDateTime_Delta *__pyx_v_self) {
  int __pyx_r;

  /* "datetime.pxd":131
 *         @property
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DELTA_GET_MICROSECONDS(self)             # <<<<<<<<<<<<<<
 * 
 *     ctypedef extern class datetime.tzinfo[object PyDateTime_TZInfo]:
*/
  __pyx_r = PyDateTime_DELTA_GET_MICROSECONDS(((PyObject *)__pyx_v_self));
  goto __pyx_L0;

  /* "datetime.pxd":129
 *             return PyDateTime_DELTA_GET_SECONDS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int microsecond(self) noexcept:
 *             return PyDateTime_DELTA_GET_MICROSECONDS(self)
*/

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

/* "datetime.pxd":255
 * # Datetime C API initialization function.
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime() noexcept:             # <<<<<<<<<<<<<<
 *     PyDateTime_IMPORT
 * 
*/

static CYTHON_INLINE void __pyx_f_7cpython_8datetime_import_datetime(void) {

  /* "datetime.pxd":256
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime() noexcept:
 *     PyDateTime_IMPORT             # <<<<<<<<<<<<<<
 * 
 * # Create date object using DateTime CAPI factory function.
*/
  (void)(PyDateTime_IMPORT);

  /* "datetime.pxd":255
 * # Datetime C API initialization function.
 * # You have to call it before any usage of DateTime CAPI functions.
 * cdef inline void import_datetime() noexcept:             # <<<<<<<<<<<<<<
 *     PyDateTime_IMPORT
 * 
*/

  /* function exit code */
}

/* "datetime.pxd":260
 * # Create date object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline date date_new(int year, int month, int day):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cpython_8datetime_date_new(int __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PyDateTime_Date *__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("date_new", 0);

  /* "datetime.pxd":261
 * # Note, there are no range checks for any of the arguments.
 * cdef inline date date_new(int year, int month, int day):
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)             # <<<<<<<<<<<<<<
 * 
 * # Create time object using DateTime CAPI factory function
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)PyDateTimeAPI->Date_FromDate(__pyx_v_year, __pyx_v_month, __pyx_v_day, PyDateTimeAPI->DateType)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":260
 * # Create date object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline date date_new(int year, int month, int day):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromDate(year, month, day, PyDateTimeAPI.DateType)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cpython.datetime.date_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":265
 * # Create time object using DateTime CAPI factory function
 * # Note, there are no range checks for any of the arguments.
 * cdef inline time time_new(int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cpython_8datetime_time_new(int __pyx_v_hour, int __pyx_v_minute, int __pyx_v_second, int __pyx_v_microsecond, PyObject *__pyx_v_tz, struct __pyx_opt_args_7cpython_8datetime_time_new *__pyx_optional_args) {
  int __pyx_v_fold = ((int)0);
  PyDateTime_Time *__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("time_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fold = __pyx_optional_args->fold;
    }
  }

  /* "datetime.pxd":266
 * # Note, there are no range checks for any of the arguments.
 * cdef inline time time_new(int hour, int minute, int second, int microsecond, object tz, int fold=0):
 *     return __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)             # <<<<<<<<<<<<<<
 * 
 * # Create datetime object using DateTime CAPI factory function.
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__Pyx_DateTime_TimeWithFold(__pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tz, __pyx_v_fold)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 266, __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_7cpython_8datetime_time))))) __PYX_ERR(2, 266, __pyx_L1_error)
  __pyx_r = ((PyDateTime_Time *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":265
 * # Create time object using DateTime CAPI factory function
 * # Note, there are no range checks for any of the arguments.
 * cdef inline time time_new(int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_TimeWithFold(hour, minute, second, microsecond, tz, fold)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cpython.datetime.time_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":270
 * # Create datetime object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline datetime datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cpython_8datetime_datetime_new(int __pyx_v_year, int __pyx_v_month, int __pyx_v_day, int __pyx_v_hour, int __pyx_v_minute, int __pyx_v_second, int __pyx_v_microsecond, PyObject *__pyx_v_tz, struct __pyx_opt_args_7cpython_8datetime_datetime_new *__pyx_optional_args) {
  int __pyx_v_fold = ((int)0);
  PyDateTime_DateTime *__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("datetime_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_fold = __pyx_optional_args->fold;
    }
  }

  /* "datetime.pxd":271
 * # Note, there are no range checks for any of the arguments.
 * cdef inline datetime datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz, int fold=0):
 *     return __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)             # <<<<<<<<<<<<<<
 * 
 * # Create timedelta object using DateTime CAPI factory function.
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)__Pyx_DateTime_DateTimeWithFold(__pyx_v_year, __pyx_v_month, __pyx_v_day, __pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tz, __pyx_v_fold)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 271, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":270
 * # Create datetime object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline datetime datetime_new(int year, int month, int day, int hour, int minute, int second, int microsecond, object tz, int fold=0):             # <<<<<<<<<<<<<<
 *     return __Pyx_DateTime_DateTimeWithFold(year, month, day, hour, minute, second, microsecond, tz, fold)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cpython.datetime.datetime_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":275
 * # Create timedelta object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline timedelta timedelta_new(int days, int seconds, int useconds):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cpython_8datetime_timedelta_new(int __pyx_v_days, int __pyx_v_seconds, int __pyx_v_useconds) {
  PyDateTime_Delta *__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("timedelta_new", 0);

  /* "datetime.pxd":276
 * # Note, there are no range checks for any of the arguments.
 * cdef inline timedelta timedelta_new(int days, int seconds, int useconds):
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)             # <<<<<<<<<<<<<<
 * 
 * # Create timedelta object using DateTime CAPI factory function.
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = ((PyObject *)PyDateTimeAPI->Delta_FromDelta(__pyx_v_days, __pyx_v_seconds, __pyx_v_useconds, 1, PyDateTimeAPI->DeltaType)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":275
 * # Create timedelta object using DateTime CAPI factory function.
 * # Note, there are no range checks for any of the arguments.
 * cdef inline timedelta timedelta_new(int days, int seconds, int useconds):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Delta_FromDelta(days, seconds, useconds, 1, PyDateTimeAPI.DeltaType)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cpython.datetime.timedelta_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":279
 * 
 * # Create timedelta object using DateTime CAPI factory function.
 * cdef inline object timezone_new(object offset, object name=None):             # <<<<<<<<<<<<<<
 *     return __Pyx_TimeZone_FromOffsetAndName(offset, <PyObject*>name if name is not None else NULL)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_timezone_new(PyObject *__pyx_v_offset, struct __pyx_opt_args_7cpython_8datetime_timezone_new *__pyx_optional_args) {
  PyObject *__pyx_v_name = ((PyObject *)Py_None);
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__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("timezone_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_name = __pyx_optional_args->name;
    }
  }

  /* "datetime.pxd":280
 * # Create timedelta object using DateTime CAPI factory function.
 * cdef inline object timezone_new(object offset, object name=None):
 *     return __Pyx_TimeZone_FromOffsetAndName(offset, <PyObject*>name if name is not None else NULL)             # <<<<<<<<<<<<<<
 * 
 * # Create datetime object using DB API constructor.
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = (__pyx_v_name != Py_None);
  if (__pyx_t_2) {
    __pyx_t_1 = ((PyObject *)__pyx_v_name);
  } else {
    __pyx_t_1 = NULL;
  }
  __pyx_t_3 = __Pyx_TimeZone_FromOffsetAndName(__pyx_v_offset, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":279
 * 
 * # Create timedelta object using DateTime CAPI factory function.
 * cdef inline object timezone_new(object offset, object name=None):             # <<<<<<<<<<<<<<
 *     return __Pyx_TimeZone_FromOffsetAndName(offset, <PyObject*>name if name is not None else NULL)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cpython.datetime.timezone_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":283
 * 
 * # Create datetime object using DB API constructor.
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.DateTime_FromTimestamp(
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cpython_8datetime_datetime_from_timestamp(PyObject *__pyx_v_timestamp, struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp *__pyx_optional_args) {
  PyObject *__pyx_v_tz = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("datetime_from_timestamp", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tz = __pyx_optional_args->tz;
    }
  }

  /* "datetime.pxd":284
 * # Create datetime object using DB API constructor.
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):
 *     return PyDateTimeAPI.DateTime_FromTimestamp(             # <<<<<<<<<<<<<<
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
 * 
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "datetime.pxd":285
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):
 *     return PyDateTimeAPI.DateTime_FromTimestamp(
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)             # <<<<<<<<<<<<<<
 * 
 * # Create date object using DB API constructor.
*/
  __pyx_t_2 = (__pyx_v_tz != Py_None);
  if (__pyx_t_2) {
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_timestamp);
    __Pyx_GIVEREF(__pyx_v_timestamp);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_timestamp) != (0)) __PYX_ERR(2, 285, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_tz);
    __Pyx_GIVEREF(__pyx_v_tz);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_tz) != (0)) __PYX_ERR(2, 285, __pyx_L1_error);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 285, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_timestamp);
    __Pyx_GIVEREF(__pyx_v_timestamp);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_timestamp) != (0)) __PYX_ERR(2, 285, __pyx_L1_error);
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  }

  /* "datetime.pxd":284
 * # Create datetime object using DB API constructor.
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):
 *     return PyDateTimeAPI.DateTime_FromTimestamp(             # <<<<<<<<<<<<<<
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
 * 
*/
  __pyx_t_3 = ((PyObject *)PyDateTimeAPI->DateTime_FromTimestamp(((PyObject *)PyDateTimeAPI->DateTimeType), __pyx_t_1, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":283
 * 
 * # Create datetime object using DB API constructor.
 * cdef inline datetime datetime_from_timestamp(timestamp, tz=None):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.DateTime_FromTimestamp(
 *         <PyObject*>PyDateTimeAPI.DateTimeType, (timestamp, tz) if tz is not None else (timestamp,), NULL)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cpython.datetime.datetime_from_timestamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":288
 * 
 * # Create date object using DB API constructor.
 * cdef inline date date_from_timestamp(timestamp):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromTimestamp(<PyObject*>PyDateTimeAPI.DateType, (timestamp,))
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cpython_8datetime_date_from_timestamp(PyObject *__pyx_v_timestamp) {
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_from_timestamp", 0);

  /* "datetime.pxd":289
 * # Create date object using DB API constructor.
 * cdef inline date date_from_timestamp(timestamp):
 *     return PyDateTimeAPI.Date_FromTimestamp(<PyObject*>PyDateTimeAPI.DateType, (timestamp,))             # <<<<<<<<<<<<<<
 * 
 * # More recognizable getters for date/time/datetime/timedelta.
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_timestamp);
  __Pyx_GIVEREF(__pyx_v_timestamp);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_timestamp) != (0)) __PYX_ERR(2, 289, __pyx_L1_error);
  __pyx_t_2 = ((PyObject *)PyDateTimeAPI->Date_FromTimestamp(((PyObject *)PyDateTimeAPI->DateType), __pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 289, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Date *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "datetime.pxd":288
 * 
 * # Create date object using DB API constructor.
 * cdef inline date date_from_timestamp(timestamp):             # <<<<<<<<<<<<<<
 *     return PyDateTimeAPI.Date_FromTimestamp(<PyObject*>PyDateTimeAPI.DateType, (timestamp,))
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cpython.datetime.date_from_timestamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "datetime.pxd":297
 * 
 * # Get UTC singleton
 * cdef inline object get_utc():             # <<<<<<<<<<<<<<
 *     return <object>__Pyx_TimeZone_UTC
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_get_utc(void) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_utc", 0);

  /* "datetime.pxd":298
 * # Get UTC singleton
 * cdef inline object get_utc():
 *     return <object>__Pyx_TimeZone_UTC             # <<<<<<<<<<<<<<
 * 
 * # Get tzinfo of time
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__Pyx_TimeZone_UTC));
  __pyx_r = ((PyObject *)__Pyx_TimeZone_UTC);
  goto __pyx_L0;

  /* "datetime.pxd":297
 * 
 * # Get UTC singleton
 * cdef inline object get_utc():             # <<<<<<<<<<<<<<
 *     return <object>__Pyx_TimeZone_UTC
 * 
*/

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

/* "datetime.pxd":301
 * 
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     return <object>PyDateTime_TIME_GET_TZINFO(o)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_time_tzinfo(PyObject *__pyx_v_o) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("time_tzinfo", 0);

  /* "datetime.pxd":302
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):
 *     return <object>PyDateTime_TIME_GET_TZINFO(o)             # <<<<<<<<<<<<<<
 * 
 * # Get tzinfo of datetime
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTime_TIME_GET_TZINFO(__pyx_v_o);
  __Pyx_INCREF(((PyObject *)__pyx_t_1));
  __pyx_r = ((PyObject *)__pyx_t_1);
  goto __pyx_L0;

  /* "datetime.pxd":301
 * 
 * # Get tzinfo of time
 * cdef inline object time_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     return <object>PyDateTime_TIME_GET_TZINFO(o)
 * 
*/

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

/* "datetime.pxd":305
 * 
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     return <object>PyDateTime_DATE_GET_TZINFO(o)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cpython_8datetime_datetime_tzinfo(PyObject *__pyx_v_o) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("datetime_tzinfo", 0);

  /* "datetime.pxd":306
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):
 *     return <object>PyDateTime_DATE_GET_TZINFO(o)             # <<<<<<<<<<<<<<
 * 
 * # Get year of date
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDateTime_DATE_GET_TZINFO(__pyx_v_o);
  __Pyx_INCREF(((PyObject *)__pyx_t_1));
  __pyx_r = ((PyObject *)__pyx_t_1);
  goto __pyx_L0;

  /* "datetime.pxd":305
 * 
 * # Get tzinfo of datetime
 * cdef inline object datetime_tzinfo(object o):             # <<<<<<<<<<<<<<
 *     return <object>PyDateTime_DATE_GET_TZINFO(o)
 * 
*/

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

/* "datetime.pxd":309
 * 
 * # Get year of date
 * cdef inline int date_year(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_year(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":310
 * # Get year of date
 * cdef inline int date_year(object o) noexcept:
 *     return PyDateTime_GET_YEAR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get month of date
*/
  __pyx_r = PyDateTime_GET_YEAR(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":309
 * 
 * # Get year of date
 * cdef inline int date_year(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
*/

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

/* "datetime.pxd":313
 * 
 * # Get month of date
 * cdef inline int date_month(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_month(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":314
 * # Get month of date
 * cdef inline int date_month(object o) noexcept:
 *     return PyDateTime_GET_MONTH(o)             # <<<<<<<<<<<<<<
 * 
 * # Get day of date
*/
  __pyx_r = PyDateTime_GET_MONTH(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":313
 * 
 * # Get month of date
 * cdef inline int date_month(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
*/

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

/* "datetime.pxd":317
 * 
 * # Get day of date
 * cdef inline int date_day(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_date_day(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":318
 * # Get day of date
 * cdef inline int date_day(object o) noexcept:
 *     return PyDateTime_GET_DAY(o)             # <<<<<<<<<<<<<<
 * 
 * # Get year of datetime
*/
  __pyx_r = PyDateTime_GET_DAY(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":317
 * 
 * # Get day of date
 * cdef inline int date_day(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
*/

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

/* "datetime.pxd":321
 * 
 * # Get year of datetime
 * cdef inline int datetime_year(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_year(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":322
 * # Get year of datetime
 * cdef inline int datetime_year(object o) noexcept:
 *     return PyDateTime_GET_YEAR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get month of datetime
*/
  __pyx_r = PyDateTime_GET_YEAR(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":321
 * 
 * # Get year of datetime
 * cdef inline int datetime_year(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_YEAR(o)
 * 
*/

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

/* "datetime.pxd":325
 * 
 * # Get month of datetime
 * cdef inline int datetime_month(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_month(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":326
 * # Get month of datetime
 * cdef inline int datetime_month(object o) noexcept:
 *     return PyDateTime_GET_MONTH(o)             # <<<<<<<<<<<<<<
 * 
 * # Get day of datetime
*/
  __pyx_r = PyDateTime_GET_MONTH(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":325
 * 
 * # Get month of datetime
 * cdef inline int datetime_month(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_MONTH(o)
 * 
*/

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

/* "datetime.pxd":329
 * 
 * # Get day of datetime
 * cdef inline int datetime_day(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_day(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":330
 * # Get day of datetime
 * cdef inline int datetime_day(object o) noexcept:
 *     return PyDateTime_GET_DAY(o)             # <<<<<<<<<<<<<<
 * 
 * # Get hour of time
*/
  __pyx_r = PyDateTime_GET_DAY(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":329
 * 
 * # Get day of datetime
 * cdef inline int datetime_day(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_GET_DAY(o)
 * 
*/

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

/* "datetime.pxd":333
 * 
 * # Get hour of time
 * cdef inline int time_hour(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_HOUR(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_hour(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":334
 * # Get hour of time
 * cdef inline int time_hour(object o) noexcept:
 *     return PyDateTime_TIME_GET_HOUR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get minute of time
*/
  __pyx_r = PyDateTime_TIME_GET_HOUR(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":333
 * 
 * # Get hour of time
 * cdef inline int time_hour(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_HOUR(o)
 * 
*/

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

/* "datetime.pxd":337
 * 
 * # Get minute of time
 * cdef inline int time_minute(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MINUTE(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_minute(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":338
 * # Get minute of time
 * cdef inline int time_minute(object o) noexcept:
 *     return PyDateTime_TIME_GET_MINUTE(o)             # <<<<<<<<<<<<<<
 * 
 * # Get second of time
*/
  __pyx_r = PyDateTime_TIME_GET_MINUTE(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":337
 * 
 * # Get minute of time
 * cdef inline int time_minute(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MINUTE(o)
 * 
*/

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

/* "datetime.pxd":341
 * 
 * # Get second of time
 * cdef inline int time_second(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_SECOND(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_second(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":342
 * # Get second of time
 * cdef inline int time_second(object o) noexcept:
 *     return PyDateTime_TIME_GET_SECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get microsecond of time
*/
  __pyx_r = PyDateTime_TIME_GET_SECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":341
 * 
 * # Get second of time
 * cdef inline int time_second(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_SECOND(o)
 * 
*/

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

/* "datetime.pxd":345
 * 
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MICROSECOND(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_microsecond(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":346
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o) noexcept:
 *     return PyDateTime_TIME_GET_MICROSECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get fold of time
*/
  __pyx_r = PyDateTime_TIME_GET_MICROSECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":345
 * 
 * # Get microsecond of time
 * cdef inline int time_microsecond(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_TIME_GET_MICROSECOND(o)
 * 
*/

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

/* "datetime.pxd":349
 * 
 * # Get fold of time
 * cdef inline int time_fold(object o) noexcept:             # <<<<<<<<<<<<<<
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_TIME_GET_FOLD(o)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_time_fold(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":351
 * cdef inline int time_fold(object o) noexcept:
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_TIME_GET_FOLD(o)             # <<<<<<<<<<<<<<
 * 
 * # Get hour of datetime
*/
  __pyx_r = PyDateTime_TIME_GET_FOLD(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":349
 * 
 * # Get fold of time
 * cdef inline int time_fold(object o) noexcept:             # <<<<<<<<<<<<<<
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_TIME_GET_FOLD(o)
*/

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

/* "datetime.pxd":354
 * 
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_HOUR(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_hour(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":355
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o) noexcept:
 *     return PyDateTime_DATE_GET_HOUR(o)             # <<<<<<<<<<<<<<
 * 
 * # Get minute of datetime
*/
  __pyx_r = PyDateTime_DATE_GET_HOUR(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":354
 * 
 * # Get hour of datetime
 * cdef inline int datetime_hour(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_HOUR(o)
 * 
*/

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

/* "datetime.pxd":358
 * 
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MINUTE(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_minute(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":359
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o) noexcept:
 *     return PyDateTime_DATE_GET_MINUTE(o)             # <<<<<<<<<<<<<<
 * 
 * # Get second of datetime
*/
  __pyx_r = PyDateTime_DATE_GET_MINUTE(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":358
 * 
 * # Get minute of datetime
 * cdef inline int datetime_minute(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MINUTE(o)
 * 
*/

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

/* "datetime.pxd":362
 * 
 * # Get second of datetime
 * cdef inline int datetime_second(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_SECOND(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_second(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":363
 * # Get second of datetime
 * cdef inline int datetime_second(object o) noexcept:
 *     return PyDateTime_DATE_GET_SECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get microsecond of datetime
*/
  __pyx_r = PyDateTime_DATE_GET_SECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":362
 * 
 * # Get second of datetime
 * cdef inline int datetime_second(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_SECOND(o)
 * 
*/

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

/* "datetime.pxd":366
 * 
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MICROSECOND(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_microsecond(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":367
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o) noexcept:
 *     return PyDateTime_DATE_GET_MICROSECOND(o)             # <<<<<<<<<<<<<<
 * 
 * # Get fold of datetime
*/
  __pyx_r = PyDateTime_DATE_GET_MICROSECOND(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":366
 * 
 * # Get microsecond of datetime
 * cdef inline int datetime_microsecond(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DATE_GET_MICROSECOND(o)
 * 
*/

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

/* "datetime.pxd":370
 * 
 * # Get fold of datetime
 * cdef inline int datetime_fold(object o) noexcept:             # <<<<<<<<<<<<<<
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_DATE_GET_FOLD(o)
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_datetime_fold(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":372
 * cdef inline int datetime_fold(object o) noexcept:
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_DATE_GET_FOLD(o)             # <<<<<<<<<<<<<<
 * 
 * # Get days of timedelta
*/
  __pyx_r = PyDateTime_DATE_GET_FOLD(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":370
 * 
 * # Get fold of datetime
 * cdef inline int datetime_fold(object o) noexcept:             # <<<<<<<<<<<<<<
 *     # For Python < 3.6 this returns 0 no matter what
 *     return PyDateTime_DATE_GET_FOLD(o)
*/

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

/* "datetime.pxd":375
 * 
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_DAYS(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_days(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":376
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o) noexcept:
 *     return PyDateTime_DELTA_GET_DAYS(o)             # <<<<<<<<<<<<<<
 * 
 * # Get seconds of timedelta
*/
  __pyx_r = PyDateTime_DELTA_GET_DAYS(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":375
 * 
 * # Get days of timedelta
 * cdef inline int timedelta_days(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_DAYS(o)
 * 
*/

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

/* "datetime.pxd":379
 * 
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_SECONDS(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_seconds(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":380
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o) noexcept:
 *     return PyDateTime_DELTA_GET_SECONDS(o)             # <<<<<<<<<<<<<<
 * 
 * # Get microseconds of timedelta
*/
  __pyx_r = PyDateTime_DELTA_GET_SECONDS(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":379
 * 
 * # Get seconds of timedelta
 * cdef inline int timedelta_seconds(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_SECONDS(o)
 * 
*/

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

/* "datetime.pxd":383
 * 
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_MICROSECONDS(o)
 * 
*/

static CYTHON_INLINE int __pyx_f_7cpython_8datetime_timedelta_microseconds(PyObject *__pyx_v_o) {
  int __pyx_r;

  /* "datetime.pxd":384
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o) noexcept:
 *     return PyDateTime_DELTA_GET_MICROSECONDS(o)             # <<<<<<<<<<<<<<
 * 
 * cdef inline double total_seconds(timedelta obj) noexcept:
*/
  __pyx_r = PyDateTime_DELTA_GET_MICROSECONDS(__pyx_v_o);
  goto __pyx_L0;

  /* "datetime.pxd":383
 * 
 * # Get microseconds of timedelta
 * cdef inline int timedelta_microseconds(object o) noexcept:             # <<<<<<<<<<<<<<
 *     return PyDateTime_DELTA_GET_MICROSECONDS(o)
 * 
*/

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

/* "datetime.pxd":386
 *     return PyDateTime_DELTA_GET_MICROSECONDS(o)
 * 
 * cdef inline double total_seconds(timedelta obj) noexcept:             # <<<<<<<<<<<<<<
 *     # Mirrors the "timedelta.total_seconds()" method.
 *     # Note that this implementation is not guaranteed to give *exactly* the same
*/

static CYTHON_INLINE double __pyx_f_7cpython_8datetime_total_seconds(PyDateTime_Delta *__pyx_v_obj) {
  double __pyx_v_days;
  double __pyx_v_seconds;
  double __pyx_v_micros;
  double __pyx_r;

  /* "datetime.pxd":392
 *     cdef:
 *         double days, seconds, micros
 *     days = <double>PyDateTime_DELTA_GET_DAYS(obj)             # <<<<<<<<<<<<<<
 *     seconds = <double>PyDateTime_DELTA_GET_SECONDS(obj)
 *     micros = <double>PyDateTime_DELTA_GET_MICROSECONDS(obj)
*/
  __pyx_v_days = ((double)PyDateTime_DELTA_GET_DAYS(((PyObject *)__pyx_v_obj)));

  /* "datetime.pxd":393
 *         double days, seconds, micros
 *     days = <double>PyDateTime_DELTA_GET_DAYS(obj)
 *     seconds = <double>PyDateTime_DELTA_GET_SECONDS(obj)             # <<<<<<<<<<<<<<
 *     micros = <double>PyDateTime_DELTA_GET_MICROSECONDS(obj)
 *     return days * 24 * 3600 + seconds + micros / 1_000_000
*/
  __pyx_v_seconds = ((double)PyDateTime_DELTA_GET_SECONDS(((PyObject *)__pyx_v_obj)));

  /* "datetime.pxd":394
 *     days = <double>PyDateTime_DELTA_GET_DAYS(obj)
 *     seconds = <double>PyDateTime_DELTA_GET_SECONDS(obj)
 *     micros = <double>PyDateTime_DELTA_GET_MICROSECONDS(obj)             # <<<<<<<<<<<<<<
 *     return days * 24 * 3600 + seconds + micros / 1_000_000
*/
  __pyx_v_micros = ((double)PyDateTime_DELTA_GET_MICROSECONDS(((PyObject *)__pyx_v_obj)));

  /* "datetime.pxd":395
 *     seconds = <double>PyDateTime_DELTA_GET_SECONDS(obj)
 *     micros = <double>PyDateTime_DELTA_GET_MICROSECONDS(obj)
 *     return days * 24 * 3600 + seconds + micros / 1_000_000             # <<<<<<<<<<<<<<
*/
  __pyx_r = ((((__pyx_v_days * 24.0) * 3600.0) + __pyx_v_seconds) + (__pyx_v_micros / 1000000.0));
  goto __pyx_L0;

  /* "datetime.pxd":386
 *     return PyDateTime_DELTA_GET_MICROSECONDS(o)
 * 
 * cdef inline double total_seconds(timedelta obj) noexcept:             # <<<<<<<<<<<<<<
 *     # Mirrors the "timedelta.total_seconds()" method.
 *     # Note that this implementation is not guaranteed to give *exactly* the same
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":242
 *         cdef int type_num
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp itemsize(self) noexcept nogil:
 *             return PyDataType_ELSIZE(self)
*/

static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_8itemsize_itemsize(PyArray_Descr *__pyx_v_self) {
  npy_intp __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":244
 *         @property
 *         cdef inline npy_intp itemsize(self) noexcept nogil:
 *             return PyDataType_ELSIZE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDataType_ELSIZE(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":242
 *         cdef int type_num
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp itemsize(self) noexcept nogil:
 *             return PyDataType_ELSIZE(self)
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":246
 *             return PyDataType_ELSIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp alignment(self) noexcept nogil:
 *             return PyDataType_ALIGNMENT(self)
*/

static CYTHON_INLINE npy_intp __pyx_f_5numpy_5dtype_9alignment_alignment(PyArray_Descr *__pyx_v_self) {
  npy_intp __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":248
 *         @property
 *         cdef inline npy_intp alignment(self) noexcept nogil:
 *             return PyDataType_ALIGNMENT(self)             # <<<<<<<<<<<<<<
 * 
 *         # Use fields/names with care as they may be NULL.  You must check
*/
  __pyx_r = PyDataType_ALIGNMENT(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":246
 *             return PyDataType_ELSIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp alignment(self) noexcept nogil:
 *             return PyDataType_ALIGNMENT(self)
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":252
 *         # Use fields/names with care as they may be NULL.  You must check
 *         # for this using PyDataType_HASFIELDS.
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object fields(self):
 *             return <object>PyDataType_FIELDS(self)
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_6fields_fields(PyArray_Descr *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("fields", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":254
 *         @property
 *         cdef inline object fields(self):
 *             return <object>PyDataType_FIELDS(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDataType_FIELDS(__pyx_v_self);
  __Pyx_INCREF(((PyObject *)__pyx_t_1));
  __pyx_r = ((PyObject *)__pyx_t_1);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":252
 *         # Use fields/names with care as they may be NULL.  You must check
 *         # for this using PyDataType_HASFIELDS.
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline object fields(self):
 *             return <object>PyDataType_FIELDS(self)
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":256
 *             return <object>PyDataType_FIELDS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline tuple names(self):
 *             return <tuple>PyDataType_NAMES(self)
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_5dtype_5names_names(PyArray_Descr *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1;
  __Pyx_RefNannySetupContext("names", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":258
 *         @property
 *         cdef inline tuple names(self):
 *             return <tuple>PyDataType_NAMES(self)             # <<<<<<<<<<<<<<
 * 
 *         # Use PyDataType_HASSUBARRAY to test whether this field is
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyDataType_NAMES(__pyx_v_self);
  __Pyx_INCREF(((PyObject*)__pyx_t_1));
  __pyx_r = ((PyObject*)__pyx_t_1);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":256
 *             return <object>PyDataType_FIELDS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline tuple names(self):
 *             return <tuple>PyDataType_NAMES(self)
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263
 *         # valid (the pointer can be NULL). Most users should access
 *         # this field via the inline helper method PyDataType_SHAPE.
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil:
 *             return PyDataType_SUBARRAY(self)
*/

static CYTHON_INLINE PyArray_ArrayDescr *__pyx_f_5numpy_5dtype_8subarray_subarray(PyArray_Descr *__pyx_v_self) {
  PyArray_ArrayDescr *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":265
 *         @property
 *         cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil:
 *             return PyDataType_SUBARRAY(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyDataType_SUBARRAY(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":263
 *         # valid (the pointer can be NULL). Most users should access
 *         # this field via the inline helper method PyDataType_SHAPE.
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline PyArray_ArrayDescr* subarray(self) noexcept nogil:
 *             return PyDataType_SUBARRAY(self)
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":267
 *             return PyDataType_SUBARRAY(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_uint64 flags(self) noexcept nogil:
 *             """The data types flags."""
*/

static CYTHON_INLINE npy_uint64 __pyx_f_5numpy_5dtype_5flags_flags(PyArray_Descr *__pyx_v_self) {
  npy_uint64 __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":270
 *         cdef inline npy_uint64 flags(self) noexcept nogil:
 *             """The data types flags."""
 *             return PyDataType_FLAGS(self)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = PyDataType_FLAGS(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":267
 *             return PyDataType_SUBARRAY(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_uint64 flags(self) noexcept nogil:
 *             """The data types flags."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":279
 *     ctypedef class numpy.broadcast [object PyArrayMultiIterObject, check_size ignore]:
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int numiter(self) noexcept nogil:
 *             """The number of arrays that need to be broadcast to the same shape."""
*/

static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_7numiter_numiter(PyArrayMultiIterObject *__pyx_v_self) {
  int __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":282
 *         cdef inline int numiter(self) noexcept nogil:
 *             """The number of arrays that need to be broadcast to the same shape."""
 *             return PyArray_MultiIter_NUMITER(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_MultiIter_NUMITER(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":279
 *     ctypedef class numpy.broadcast [object PyArrayMultiIterObject, check_size ignore]:
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int numiter(self) noexcept nogil:
 *             """The number of arrays that need to be broadcast to the same shape."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284
 *             return PyArray_MultiIter_NUMITER(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp size(self) noexcept nogil:
 *             """The total broadcasted size."""
*/

static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_4size_size(PyArrayMultiIterObject *__pyx_v_self) {
  npy_intp __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":287
 *         cdef inline npy_intp size(self) noexcept nogil:
 *             """The total broadcasted size."""
 *             return PyArray_MultiIter_SIZE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_MultiIter_SIZE(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":284
 *             return PyArray_MultiIter_NUMITER(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp size(self) noexcept nogil:
 *             """The total broadcasted size."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":289
 *             return PyArray_MultiIter_SIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp index(self) noexcept nogil:
 *             """The current (1-d) index into the broadcasted result."""
*/

static CYTHON_INLINE npy_intp __pyx_f_5numpy_9broadcast_5index_index(PyArrayMultiIterObject *__pyx_v_self) {
  npy_intp __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":292
 *         cdef inline npy_intp index(self) noexcept nogil:
 *             """The current (1-d) index into the broadcasted result."""
 *             return PyArray_MultiIter_INDEX(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_MultiIter_INDEX(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":289
 *             return PyArray_MultiIter_SIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp index(self) noexcept nogil:
 *             """The current (1-d) index into the broadcasted result."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":294
 *             return PyArray_MultiIter_INDEX(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int nd(self) noexcept nogil:
 *             """The number of dimensions in the broadcasted result."""
*/

static CYTHON_INLINE int __pyx_f_5numpy_9broadcast_2nd_nd(PyArrayMultiIterObject *__pyx_v_self) {
  int __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":297
 *         cdef inline int nd(self) noexcept nogil:
 *             """The number of dimensions in the broadcasted result."""
 *             return PyArray_MultiIter_NDIM(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_MultiIter_NDIM(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":294
 *             return PyArray_MultiIter_INDEX(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int nd(self) noexcept nogil:
 *             """The number of dimensions in the broadcasted result."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":299
 *             return PyArray_MultiIter_NDIM(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp* dimensions(self) noexcept nogil:
 *             """The shape of the broadcasted result."""
*/

static CYTHON_INLINE npy_intp *__pyx_f_5numpy_9broadcast_10dimensions_dimensions(PyArrayMultiIterObject *__pyx_v_self) {
  npy_intp *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":302
 *         cdef inline npy_intp* dimensions(self) noexcept nogil:
 *             """The shape of the broadcasted result."""
 *             return PyArray_MultiIter_DIMS(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_MultiIter_DIMS(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":299
 *             return PyArray_MultiIter_NDIM(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp* dimensions(self) noexcept nogil:
 *             """The shape of the broadcasted result."""
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":304
 *             return PyArray_MultiIter_DIMS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline void** iters(self) noexcept nogil:
 *             """An array of iterator objects that holds the iterators for the arrays to be broadcast together.
*/

static CYTHON_INLINE void **__pyx_f_5numpy_9broadcast_5iters_iters(PyArrayMultiIterObject *__pyx_v_self) {
  void **__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":308
 *             """An array of iterator objects that holds the iterators for the arrays to be broadcast together.
 *             On return, the iterators are adjusted for broadcasting."""
 *             return PyArray_MultiIter_ITERS(self)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = PyArray_MultiIter_ITERS(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":304
 *             return PyArray_MultiIter_DIMS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline void** iters(self) noexcept nogil:
 *             """An array of iterator objects that holds the iterators for the arrays to be broadcast together.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":322
 *         # Instead, we use properties that map to the corresponding C-API functions.
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline PyObject* base(self) noexcept nogil:
 *             """Returns a borrowed reference to the object owning the data/memory.
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) {
  PyObject *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":326
 *             """Returns a borrowed reference to the object owning the data/memory.
 *             """
 *             return PyArray_BASE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_BASE(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":322
 *         # Instead, we use properties that map to the corresponding C-API functions.
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline PyObject* base(self) noexcept nogil:
 *             """Returns a borrowed reference to the object owning the data/memory.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":328
 *             return PyArray_BASE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline dtype descr(self):
 *             """Returns an owned reference to the dtype of the array.
*/

static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) {
  PyArray_Descr *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyArray_Descr *__pyx_t_1;
  __Pyx_RefNannySetupContext("descr", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":332
 *             """Returns an owned reference to the dtype of the array.
 *             """
 *             return <dtype>PyArray_DESCR(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = PyArray_DESCR(__pyx_v_self);
  __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1));
  __pyx_r = ((PyArray_Descr *)__pyx_t_1);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":328
 *             return PyArray_BASE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline dtype descr(self):
 *             """Returns an owned reference to the dtype of the array.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":334
 *             return <dtype>PyArray_DESCR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int ndim(self) noexcept nogil:
 *             """Returns the number of dimensions in the array.
*/

static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) {
  int __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":338
 *             """Returns the number of dimensions in the array.
 *             """
 *             return PyArray_NDIM(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_NDIM(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":334
 *             return <dtype>PyArray_DESCR(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline int ndim(self) noexcept nogil:
 *             """Returns the number of dimensions in the array.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":340
 *             return PyArray_NDIM(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp *shape(self) noexcept nogil:
 *             """Returns a pointer to the dimensions/shape of the array.
*/

static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) {
  npy_intp *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":346
 *             Can return NULL for 0-dimensional arrays.
 *             """
 *             return PyArray_DIMS(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_DIMS(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":340
 *             return PyArray_NDIM(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp *shape(self) noexcept nogil:
 *             """Returns a pointer to the dimensions/shape of the array.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":348
 *             return PyArray_DIMS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp *strides(self) noexcept nogil:
 *             """Returns a pointer to the strides of the array.
*/

static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) {
  npy_intp *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":353
 *             The number of elements matches the number of dimensions of the array (ndim).
 *             """
 *             return PyArray_STRIDES(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_STRIDES(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":348
 *             return PyArray_DIMS(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp *strides(self) noexcept nogil:
 *             """Returns a pointer to the strides of the array.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":355
 *             return PyArray_STRIDES(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp size(self) noexcept nogil:
 *             """Returns the total size (in number of elements) of the array.
*/

static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) {
  npy_intp __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":359
 *             """Returns the total size (in number of elements) of the array.
 *             """
 *             return PyArray_SIZE(self)             # <<<<<<<<<<<<<<
 * 
 *         @property
*/
  __pyx_r = PyArray_SIZE(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":355
 *             return PyArray_STRIDES(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline npy_intp size(self) noexcept nogil:
 *             """Returns the total size (in number of elements) of the array.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":361
 *             return PyArray_SIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline char* data(self) noexcept nogil:
 *             """The pointer to the data buffer as a char*.
*/

static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) {
  char *__pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":368
 *             of `PyArray_DATA()` instead, which returns a 'void*'.
 *             """
 *             return PyArray_BYTES(self)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = PyArray_BYTES(__pyx_v_self);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":361
 *             return PyArray_SIZE(self)
 * 
 *         @property             # <<<<<<<<<<<<<<
 *         cdef inline char* data(self) noexcept nogil:
 *             """The pointer to the data buffer as a char*.
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776
 * ctypedef long double complex clongdouble_t
 * 
 * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
  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("PyArray_MultiIterNew1", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":777
 * 
 * cdef inline object PyArray_MultiIterNew1(a):
 *     return PyArray_MultiIterNew(1, <void*>a)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":776
 * ctypedef long double complex clongdouble_t
 * 
 * cdef inline object PyArray_MultiIterNew1(a):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
  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("PyArray_MultiIterNew2", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":780
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":779
 *     return PyArray_MultiIterNew(1, <void*>a)
 * 
 * cdef inline object PyArray_MultiIterNew2(a, b):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
  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("PyArray_MultiIterNew3", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":783
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 783, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":782
 *     return PyArray_MultiIterNew(2, <void*>a, <void*>b)
 * 
 * cdef inline object PyArray_MultiIterNew3(a, b, c):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
  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("PyArray_MultiIterNew4", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":786
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":785
 *     return PyArray_MultiIterNew(3, <void*>a, <void*>b, <void*> c)
 * 
 * cdef inline object PyArray_MultiIterNew4(a, b, c, d):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
  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("PyArray_MultiIterNew5", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":789
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)             # <<<<<<<<<<<<<<
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":788
 *     return PyArray_MultiIterNew(4, <void*>a, <void*>b, <void*>c, <void*> d)
 * 
 * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):             # <<<<<<<<<<<<<<
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":791
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2;
  __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
 *         return <tuple>d.subarray.shape
 *     else:
*/
  __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d);
  if (__pyx_t_1) {

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":793
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape             # <<<<<<<<<<<<<<
 *     else:
 *         return ()
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = __pyx_f_5numpy_5dtype_8subarray_subarray(__pyx_v_d)->shape;
    __Pyx_INCREF(((PyObject*)__pyx_t_2));
    __pyx_r = ((PyObject*)__pyx_t_2);
    goto __pyx_L0;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":792
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):
 *     if PyDataType_HASSUBARRAY(d):             # <<<<<<<<<<<<<<
 *         return <tuple>d.subarray.shape
 *     else:
*/
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":795
 *         return <tuple>d.subarray.shape
 *     else:
 *         return ()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_empty_tuple);
    __pyx_r = __pyx_mstate_global->__pyx_empty_tuple;
    goto __pyx_L0;
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":791
 *     return PyArray_MultiIterNew(5, <void*>a, <void*>b, <void*>c, <void*> d, <void*> e)
 * 
 * cdef inline tuple PyDataType_SHAPE(dtype d):             # <<<<<<<<<<<<<<
 *     if PyDataType_HASSUBARRAY(d):
 *         return <tuple>d.subarray.shape
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994
 *     int _import_umath() except -1
 * 
 * cdef inline void set_array_base(ndarray arr, object base) except *:             # <<<<<<<<<<<<<<
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)
*/

static CYTHON_INLINE void __pyx_f_5numpy_set_array_base(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_base) {
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":995
 * 
 * cdef inline void set_array_base(ndarray arr, object base) except *:
 *     Py_INCREF(base) # important to do this before stealing the reference below!             # <<<<<<<<<<<<<<
 *     PyArray_SetBaseObject(arr, base)
 * 
*/
  Py_INCREF(__pyx_v_base);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":996
 * cdef inline void set_array_base(ndarray arr, object base) except *:
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object get_array_base(ndarray arr):
*/
  __pyx_t_1 = PyArray_SetBaseObject(__pyx_v_arr, __pyx_v_base); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(3, 996, __pyx_L1_error)

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":994
 *     int _import_umath() except -1
 * 
 * cdef inline void set_array_base(ndarray arr, object base) except *:             # <<<<<<<<<<<<<<
 *     Py_INCREF(base) # important to do this before stealing the reference below!
 *     PyArray_SetBaseObject(arr, base)
*/

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("numpy.set_array_base", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":998
 *     PyArray_SetBaseObject(arr, base)
 * 
 * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
*/

static CYTHON_INLINE PyObject *__pyx_f_5numpy_get_array_base(PyArrayObject *__pyx_v_arr) {
  PyObject *__pyx_v_base;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("get_array_base", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":999
 * 
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)             # <<<<<<<<<<<<<<
 *     if base is NULL:
 *         return None
*/
  __pyx_v_base = PyArray_BASE(__pyx_v_arr);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1000
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)
 *     if base is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     return <object>base
*/
  __pyx_t_1 = (__pyx_v_base == NULL);
  if (__pyx_t_1) {

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1001
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
 *         return None             # <<<<<<<<<<<<<<
 *     return <object>base
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1000
 * cdef inline object get_array_base(ndarray arr):
 *     base = PyArray_BASE(arr)
 *     if base is NULL:             # <<<<<<<<<<<<<<
 *         return None
 *     return <object>base
*/
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1002
 *     if base is NULL:
 *         return None
 *     return <object>base             # <<<<<<<<<<<<<<
 * 
 * # Versions of the import_* functions which are more suitable for
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_base));
  __pyx_r = ((PyObject *)__pyx_v_base);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":998
 *     PyArray_SetBaseObject(arr, base)
 * 
 * cdef inline object get_array_base(ndarray arr):             # <<<<<<<<<<<<<<
 *     base = PyArray_BASE(arr)
 *     if base is NULL:
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1006
 * # Versions of the import_* functions which are more suitable for
 * # Cython code.
 * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         __pyx_import_array()
*/

static CYTHON_INLINE int __pyx_f_5numpy_import_array(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  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("import_array", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1007
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1008
 * cdef inline int import_array() except -1:
 *     try:
 *         __pyx_import_array()             # <<<<<<<<<<<<<<
 *     except Exception:
 *         raise ImportError("numpy._core.multiarray failed to import")
*/
      __pyx_t_4 = _import_array(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 1008, __pyx_L3_error)

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1007
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
*/
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1009
 *     try:
 *         __pyx_import_array()
 *     except Exception:             # <<<<<<<<<<<<<<
 *         raise ImportError("numpy._core.multiarray failed to import")
 * 
*/
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(3, 1009, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1010
 *         __pyx_import_array()
 *     except Exception:
 *         raise ImportError("numpy._core.multiarray failed to import")             # <<<<<<<<<<<<<<
 * 
 * cdef inline int import_umath() except -1:
*/
      __pyx_t_9 = NULL;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_numpy__core_multiarray_failed_to};
        __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __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_8)) __PYX_ERR(3, 1010, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(3, 1010, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1007
 * # Cython code.
 * cdef inline int import_array() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         __pyx_import_array()
 *     except Exception:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1006
 * # Versions of the import_* functions which are more suitable for
 * # Cython code.
 * cdef inline int import_array() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         __pyx_import_array()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("numpy.import_array", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1012
 *         raise ImportError("numpy._core.multiarray failed to import")
 * 
 * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         _import_umath()
*/

static CYTHON_INLINE int __pyx_f_5numpy_import_umath(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  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("import_umath", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1013
 * 
 * cdef inline int import_umath() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1014
 * cdef inline int import_umath() except -1:
 *     try:
 *         _import_umath()             # <<<<<<<<<<<<<<
 *     except Exception:
 *         raise ImportError("numpy._core.umath failed to import")
*/
      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 1014, __pyx_L3_error)

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1013
 * 
 * cdef inline int import_umath() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1015
 *     try:
 *         _import_umath()
 *     except Exception:             # <<<<<<<<<<<<<<
 *         raise ImportError("numpy._core.umath failed to import")
 * 
*/
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(3, 1015, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1016
 *         _import_umath()
 *     except Exception:
 *         raise ImportError("numpy._core.umath failed to import")             # <<<<<<<<<<<<<<
 * 
 * cdef inline int import_ufunc() except -1:
*/
      __pyx_t_9 = NULL;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo};
        __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __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_8)) __PYX_ERR(3, 1016, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(3, 1016, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1013
 * 
 * cdef inline int import_umath() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1012
 *         raise ImportError("numpy._core.multiarray failed to import")
 * 
 * cdef inline int import_umath() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         _import_umath()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("numpy.import_umath", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1018
 *         raise ImportError("numpy._core.umath failed to import")
 * 
 * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         _import_umath()
*/

static CYTHON_INLINE int __pyx_f_5numpy_import_ufunc(void) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  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("import_ufunc", 0);

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1019
 * 
 * cdef inline int import_ufunc() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1020
 * cdef inline int import_ufunc() except -1:
 *     try:
 *         _import_umath()             # <<<<<<<<<<<<<<
 *     except Exception:
 *         raise ImportError("numpy._core.umath failed to import")
*/
      __pyx_t_4 = _import_umath(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 1020, __pyx_L3_error)

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1019
 * 
 * cdef inline int import_ufunc() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1021
 *     try:
 *         _import_umath()
 *     except Exception:             # <<<<<<<<<<<<<<
 *         raise ImportError("numpy._core.umath failed to import")
 * 
*/
    __pyx_t_4 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_4) {
      __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(3, 1021, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);

      /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1022
 *         _import_umath()
 *     except Exception:
 *         raise ImportError("numpy._core.umath failed to import")             # <<<<<<<<<<<<<<
 * 
 * 
*/
      __pyx_t_9 = NULL;
      __pyx_t_10 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_mstate_global->__pyx_kp_u_numpy__core_umath_failed_to_impo};
        __pyx_t_8 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ImportError)), __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_8)) __PYX_ERR(3, 1022, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
      }
      __Pyx_Raise(__pyx_t_8, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __PYX_ERR(3, 1022, __pyx_L5_except_error)
    }
    goto __pyx_L5_except_error;

    /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1019
 * 
 * cdef inline int import_ufunc() except -1:
 *     try:             # <<<<<<<<<<<<<<
 *         _import_umath()
 *     except Exception:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1018
 *         raise ImportError("numpy._core.umath failed to import")
 * 
 * cdef inline int import_ufunc() except -1:             # <<<<<<<<<<<<<<
 *     try:
 *         _import_umath()
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("numpy.import_ufunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1025
 * 
 * 
 * cdef inline bint is_timedelta64_object(object obj) noexcept:             # <<<<<<<<<<<<<<
 *     """
 *     Cython equivalent of `isinstance(obj, np.timedelta64)`
*/

static CYTHON_INLINE int __pyx_f_5numpy_is_timedelta64_object(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1037
 *     bool
 *     """
 *     return PyObject_TypeCheck(obj, &PyTimedeltaArrType_Type)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyTimedeltaArrType_Type));
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1025
 * 
 * 
 * cdef inline bint is_timedelta64_object(object obj) noexcept:             # <<<<<<<<<<<<<<
 *     """
 *     Cython equivalent of `isinstance(obj, np.timedelta64)`
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1040
 * 
 * 
 * cdef inline bint is_datetime64_object(object obj) noexcept:             # <<<<<<<<<<<<<<
 *     """
 *     Cython equivalent of `isinstance(obj, np.datetime64)`
*/

static CYTHON_INLINE int __pyx_f_5numpy_is_datetime64_object(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1052
 *     bool
 *     """
 *     return PyObject_TypeCheck(obj, &PyDatetimeArrType_Type)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = PyObject_TypeCheck(__pyx_v_obj, (&PyDatetimeArrType_Type));
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1040
 * 
 * 
 * cdef inline bint is_datetime64_object(object obj) noexcept:             # <<<<<<<<<<<<<<
 *     """
 *     Cython equivalent of `isinstance(obj, np.datetime64)`
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1055
 * 
 * 
 * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the int64 value underlying scalar numpy datetime64 object
*/

static CYTHON_INLINE npy_datetime __pyx_f_5numpy_get_datetime64_value(PyObject *__pyx_v_obj) {
  npy_datetime __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1062
 *     also needed.  That can be found using `get_datetime64_unit`.
 *     """
 *     return (<PyDatetimeScalarObject*>obj).obval             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((PyDatetimeScalarObject *)__pyx_v_obj)->obval;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1055
 * 
 * 
 * cdef inline npy_datetime get_datetime64_value(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the int64 value underlying scalar numpy datetime64 object
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1065
 * 
 * 
 * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the int64 value underlying scalar numpy timedelta64 object
*/

static CYTHON_INLINE npy_timedelta __pyx_f_5numpy_get_timedelta64_value(PyObject *__pyx_v_obj) {
  npy_timedelta __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1069
 *     returns the int64 value underlying scalar numpy timedelta64 object
 *     """
 *     return (<PyTimedeltaScalarObject*>obj).obval             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((PyTimedeltaScalarObject *)__pyx_v_obj)->obval;
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1065
 * 
 * 
 * cdef inline npy_timedelta get_timedelta64_value(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the int64 value underlying scalar numpy timedelta64 object
*/

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

/* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1072
 * 
 * 
 * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the unit part of the dtype for a numpy datetime64 object.
*/

static CYTHON_INLINE NPY_DATETIMEUNIT __pyx_f_5numpy_get_datetime64_unit(PyObject *__pyx_v_obj) {
  NPY_DATETIMEUNIT __pyx_r;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1076
 *     returns the unit part of the dtype for a numpy datetime64 object.
 *     """
 *     return <NPY_DATETIMEUNIT>(<PyDatetimeScalarObject*>obj).obmeta.base             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((NPY_DATETIMEUNIT)((PyDatetimeScalarObject *)__pyx_v_obj)->obmeta.base);
  goto __pyx_L0;

  /* "../../../../../tmp/build-env-l6e_or8s/lib/python3.12/site-packages/numpy/__init__.cython-30.pxd":1072
 * 
 * 
 * cdef inline NPY_DATETIMEUNIT get_datetime64_unit(object obj) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """
 *     returns the unit part of the dtype for a numpy datetime64 object.
*/

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

/* "cpython/time.pxd":79
 * 
 * 
 * cdef inline double time() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_TimeRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

static CYTHON_INLINE double __pyx_f_7cpython_4time_time(void) {
  __Pyx_PyTime_t __pyx_v_tic;
  double __pyx_r;

  /* "cpython/time.pxd":80
 * 
 * cdef inline double time() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_TimeRaw()             # <<<<<<<<<<<<<<
 *     return PyTime_AsSecondsDouble(tic)
 * 
*/
  __pyx_v_tic = __Pyx_PyTime_TimeRaw();

  /* "cpython/time.pxd":81
 * cdef inline double time() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_TimeRaw()
 *     return PyTime_AsSecondsDouble(tic)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __Pyx_PyTime_AsSecondsDouble(__pyx_v_tic);
  goto __pyx_L0;

  /* "cpython/time.pxd":79
 * 
 * 
 * cdef inline double time() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_TimeRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

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

/* "cpython/time.pxd":84
 * 
 * 
 * cdef inline int64_t time_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_TimeRaw()
 * 
*/

static CYTHON_INLINE int64_t __pyx_f_7cpython_4time_time_ns(void) {
  int64_t __pyx_r;

  /* "cpython/time.pxd":85
 * 
 * cdef inline int64_t time_ns() noexcept nogil:
 *     return <int64_t> PyTime_TimeRaw()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((int64_t)__Pyx_PyTime_TimeRaw());
  goto __pyx_L0;

  /* "cpython/time.pxd":84
 * 
 * 
 * cdef inline int64_t time_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_TimeRaw()
 * 
*/

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

/* "cpython/time.pxd":88
 * 
 * 
 * cdef inline double perf_counter() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_PerfCounterRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

static CYTHON_INLINE double __pyx_f_7cpython_4time_perf_counter(void) {
  __Pyx_PyTime_t __pyx_v_tic;
  double __pyx_r;

  /* "cpython/time.pxd":89
 * 
 * cdef inline double perf_counter() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_PerfCounterRaw()             # <<<<<<<<<<<<<<
 *     return PyTime_AsSecondsDouble(tic)
 * 
*/
  __pyx_v_tic = __Pyx_PyTime_PerfCounterRaw();

  /* "cpython/time.pxd":90
 * cdef inline double perf_counter() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_PerfCounterRaw()
 *     return PyTime_AsSecondsDouble(tic)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __Pyx_PyTime_AsSecondsDouble(__pyx_v_tic);
  goto __pyx_L0;

  /* "cpython/time.pxd":88
 * 
 * 
 * cdef inline double perf_counter() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_PerfCounterRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

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

/* "cpython/time.pxd":93
 * 
 * 
 * cdef inline int64_t perf_counter_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_PerfCounterRaw()
 * 
*/

static CYTHON_INLINE int64_t __pyx_f_7cpython_4time_perf_counter_ns(void) {
  int64_t __pyx_r;

  /* "cpython/time.pxd":94
 * 
 * cdef inline int64_t perf_counter_ns() noexcept nogil:
 *     return <int64_t> PyTime_PerfCounterRaw()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((int64_t)__Pyx_PyTime_PerfCounterRaw());
  goto __pyx_L0;

  /* "cpython/time.pxd":93
 * 
 * 
 * cdef inline int64_t perf_counter_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_PerfCounterRaw()
 * 
*/

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

/* "cpython/time.pxd":97
 * 
 * 
 * cdef inline double monotonic() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_MonotonicRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

static CYTHON_INLINE double __pyx_f_7cpython_4time_monotonic(void) {
  __Pyx_PyTime_t __pyx_v_tic;
  double __pyx_r;

  /* "cpython/time.pxd":98
 * 
 * cdef inline double monotonic() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_MonotonicRaw()             # <<<<<<<<<<<<<<
 *     return PyTime_AsSecondsDouble(tic)
 * 
*/
  __pyx_v_tic = __Pyx_PyTime_MonotonicRaw();

  /* "cpython/time.pxd":99
 * cdef inline double monotonic() noexcept nogil:
 *     cdef PyTime_t tic = PyTime_MonotonicRaw()
 *     return PyTime_AsSecondsDouble(tic)             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __Pyx_PyTime_AsSecondsDouble(__pyx_v_tic);
  goto __pyx_L0;

  /* "cpython/time.pxd":97
 * 
 * 
 * cdef inline double monotonic() noexcept nogil:             # <<<<<<<<<<<<<<
 *     cdef PyTime_t tic = PyTime_MonotonicRaw()
 *     return PyTime_AsSecondsDouble(tic)
*/

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

/* "cpython/time.pxd":102
 * 
 * 
 * cdef inline int64_t monotonic_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_MonotonicRaw()
 * 
*/

static CYTHON_INLINE int64_t __pyx_f_7cpython_4time_monotonic_ns(void) {
  int64_t __pyx_r;

  /* "cpython/time.pxd":103
 * 
 * cdef inline int64_t monotonic_ns() noexcept nogil:
 *     return <int64_t> PyTime_MonotonicRaw()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((int64_t)__Pyx_PyTime_MonotonicRaw());
  goto __pyx_L0;

  /* "cpython/time.pxd":102
 * 
 * 
 * cdef inline int64_t monotonic_ns() noexcept nogil:             # <<<<<<<<<<<<<<
 *     return <int64_t> PyTime_MonotonicRaw()
 * 
*/

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

/* "cpython/time.pxd":106
 * 
 * 
 * cdef inline int _raise_from_errno() except -1 with gil:             # <<<<<<<<<<<<<<
 *     PyErr_SetFromErrno(RuntimeError)
 *     return <int> -1  # Let the C compiler know that this function always raises.
*/

static CYTHON_INLINE int __pyx_f_7cpython_4time__raise_from_errno(void) {
  int __pyx_r;
  PyObject *__pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();

  /* "cpython/time.pxd":107
 * 
 * cdef inline int _raise_from_errno() except -1 with gil:
 *     PyErr_SetFromErrno(RuntimeError)             # <<<<<<<<<<<<<<
 *     return <int> -1  # Let the C compiler know that this function always raises.
 * 
*/
  __pyx_t_1 = PyErr_SetFromErrno(((PyObject *)(((PyTypeObject*)PyExc_RuntimeError)))); if (unlikely(__pyx_t_1 == ((void *)NULL))) __PYX_ERR(4, 107, __pyx_L1_error)

  /* "cpython/time.pxd":108
 * cdef inline int _raise_from_errno() except -1 with gil:
 *     PyErr_SetFromErrno(RuntimeError)
 *     return <int> -1  # Let the C compiler know that this function always raises.             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = ((int)-1L);
  goto __pyx_L0;

  /* "cpython/time.pxd":106
 * 
 * 
 * cdef inline int _raise_from_errno() except -1 with gil:             # <<<<<<<<<<<<<<
 *     PyErr_SetFromErrno(RuntimeError)
 *     return <int> -1  # Let the C compiler know that this function always raises.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cpython.time._raise_from_errno", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  return __pyx_r;
}

/* "cpython/time.pxd":111
 * 
 * 
 * cdef inline tm localtime() except * nogil:             # <<<<<<<<<<<<<<
 *     """
 *     Analogue to the stdlib time.localtime.  The returned struct
*/

static CYTHON_INLINE struct tm __pyx_f_7cpython_4time_localtime(void) {
  time_t __pyx_v_tic;
  struct tm *__pyx_v_result;
  struct tm __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save;

  /* "cpython/time.pxd":117
 *     """
 *     cdef:
 *         time_t tic = <time_t>time()             # <<<<<<<<<<<<<<
 *         tm* result
 * 
*/
  __pyx_v_tic = ((time_t)__pyx_f_7cpython_4time_time());

  /* "cpython/time.pxd":120
 *         tm* result
 * 
 *     result = libc_localtime(&tic)             # <<<<<<<<<<<<<<
 *     if result is NULL:
 *         _raise_from_errno()
*/
  __pyx_v_result = localtime((&__pyx_v_tic));

  /* "cpython/time.pxd":121
 * 
 *     result = libc_localtime(&tic)
 *     if result is NULL:             # <<<<<<<<<<<<<<
 *         _raise_from_errno()
 *     # Fix 0-based date values (and the 1900-based year).
*/
  __pyx_t_1 = (__pyx_v_result == NULL);
  if (__pyx_t_1) {

    /* "cpython/time.pxd":122
 *     result = libc_localtime(&tic)
 *     if result is NULL:
 *         _raise_from_errno()             # <<<<<<<<<<<<<<
 *     # Fix 0-based date values (and the 1900-based year).
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
*/
    __pyx_t_2 = __pyx_f_7cpython_4time__raise_from_errno(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(4, 122, __pyx_L1_error)

    /* "cpython/time.pxd":121
 * 
 *     result = libc_localtime(&tic)
 *     if result is NULL:             # <<<<<<<<<<<<<<
 *         _raise_from_errno()
 *     # Fix 0-based date values (and the 1900-based year).
*/
  }

  /* "cpython/time.pxd":125
 *     # Fix 0-based date values (and the 1900-based year).
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     result.tm_year += 1900             # <<<<<<<<<<<<<<
 *     result.tm_mon += 1
 *     result.tm_wday = <int> ((result.tm_wday + 6) % 7)
*/
  __pyx_v_result->tm_year = (__pyx_v_result->tm_year + 0x76C);

  /* "cpython/time.pxd":126
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     result.tm_year += 1900
 *     result.tm_mon += 1             # <<<<<<<<<<<<<<
 *     result.tm_wday = <int> ((result.tm_wday + 6) % 7)
 *     result.tm_yday += 1
*/
  __pyx_v_result->tm_mon = (__pyx_v_result->tm_mon + 1);

  /* "cpython/time.pxd":127
 *     result.tm_year += 1900
 *     result.tm_mon += 1
 *     result.tm_wday = <int> ((result.tm_wday + 6) % 7)             # <<<<<<<<<<<<<<
 *     result.tm_yday += 1
 *     return result[0]
*/
  __pyx_v_result->tm_wday = ((int)__Pyx_mod_long((__pyx_v_result->tm_wday + 6), 7, 1));

  /* "cpython/time.pxd":128
 *     result.tm_mon += 1
 *     result.tm_wday = <int> ((result.tm_wday + 6) % 7)
 *     result.tm_yday += 1             # <<<<<<<<<<<<<<
 *     return result[0]
*/
  __pyx_v_result->tm_yday = (__pyx_v_result->tm_yday + 1);

  /* "cpython/time.pxd":129
 *     result.tm_wday = <int> ((result.tm_wday + 6) % 7)
 *     result.tm_yday += 1
 *     return result[0]             # <<<<<<<<<<<<<<
*/
  __pyx_r = (__pyx_v_result[0]);
  goto __pyx_L0;

  /* "cpython/time.pxd":111
 * 
 * 
 * cdef inline tm localtime() except * nogil:             # <<<<<<<<<<<<<<
 *     """
 *     Analogue to the stdlib time.localtime.  The returned struct
*/

  /* function exit code */
  __pyx_L1_error:;
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_AddTraceback("cpython.time.localtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":181
 * 
 * # Math -------------------------------------------------------------------------------------------------
 * cdef inline long long math_mod(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Compute module with Python semantics `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_mod(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_mod *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __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("math_mod", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":193
 *     >>> (num % div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_mod: division by zero.")
 *     if div == 1 or div == -1:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":194
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_mod: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == 1 or div == -1:
 *         return offset
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_mod_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 194, __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(5, 194, __pyx_L1_error)

    /* "utils.pxd":193
 *     >>> (num % div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_mod: division by zero.")
 *     if div == 1 or div == -1:
*/
  }

  /* "utils.pxd":195
 *     if div == 0:
 *         raise ZeroDivisionError("math_mod: division by zero.")
 *     if div == 1 or div == -1:             # <<<<<<<<<<<<<<
 *         return offset
 * 
*/
  switch (__pyx_v_div) {
    case 1:
    case -1LL:

    /* "utils.pxd":196
 *         raise ZeroDivisionError("math_mod: division by zero.")
 *     if div == 1 or div == -1:
 *         return offset             # <<<<<<<<<<<<<<
 * 
 *     cdef long long r
*/
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;

    /* "utils.pxd":195
 *     if div == 0:
 *         raise ZeroDivisionError("math_mod: division by zero.")
 *     if div == 1 or div == -1:             # <<<<<<<<<<<<<<
 *         return offset
 * 
*/
    break;
    default: break;
  }

  /* "utils.pxd":200
 *     cdef long long r
 *     with cython.cdivision(True):
 *         r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return offset
*/
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":201
 *     with cython.cdivision(True):
 *         r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return offset
 *     if (r ^ div) < 0:  # different signs  adjust
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":202
 *         r = num % div
 *     if r == 0:
 *         return offset             # <<<<<<<<<<<<<<
 *     if (r ^ div) < 0:  # different signs  adjust
 *         r += div
*/
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;

    /* "utils.pxd":201
 *     with cython.cdivision(True):
 *         r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return offset
 *     if (r ^ div) < 0:  # different signs  adjust
*/
  }

  /* "utils.pxd":203
 *     if r == 0:
 *         return offset
 *     if (r ^ div) < 0:  # different signs  adjust             # <<<<<<<<<<<<<<
 *         r += div
 *     return r + offset
*/
  __pyx_t_1 = ((__pyx_v_r ^ __pyx_v_div) < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":204
 *         return offset
 *     if (r ^ div) < 0:  # different signs  adjust
 *         r += div             # <<<<<<<<<<<<<<
 *     return r + offset
 * 
*/
    __pyx_v_r = (__pyx_v_r + __pyx_v_div);

    /* "utils.pxd":203
 *     if r == 0:
 *         return offset
 *     if (r ^ div) < 0:  # different signs  adjust             # <<<<<<<<<<<<<<
 *         r += div
 *     return r + offset
*/
  }

  /* "utils.pxd":205
 *     if (r ^ div) < 0:  # different signs  adjust
 *         r += div
 *     return r + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_even(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_r + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":181
 * 
 * # Math -------------------------------------------------------------------------------------------------
 * cdef inline long long math_mod(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Compute module with Python semantics `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_mod", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":207
 *     return r + offset
 * 
 * cdef inline long long math_div_even(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round to nearest, ties-to-even (bankers' rounding) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_even(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_even *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_abs_f;
  PY_LONG_LONG __pyx_v_abs_r;
  PY_LONG_LONG __pyx_v_half;
  PY_LONG_LONG __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_t_5;
  PY_LONG_LONG __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_even", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":220
 *     >>> round(num / div, 0) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_even: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":221
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_even: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_even: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_even_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 221, __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(5, 221, __pyx_L1_error)

    /* "utils.pxd":220
 *     >>> round(num / div, 0) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_even: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":222
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_even: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_even: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":223
 *         raise ZeroDivisionError("math_div_even: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_even: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q, r
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_even_result_does_not_fi};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 223, __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(5, 223, __pyx_L1_error)

    /* "utils.pxd":222
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_even: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_even: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":227
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return q + offset          # exact division
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":228
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset          # exact division
 * 
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":229
 *         q = num / div; r = num % div
 *     if r == 0:
 *         return q + offset          # exact division             # <<<<<<<<<<<<<<
 * 
 *     cdef:
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":228
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset          # exact division
 * 
*/
  }

  /* "utils.pxd":232
 * 
 *     cdef:
 *         long long abs_f = -div if div < 0 else div             # <<<<<<<<<<<<<<
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
*/
  __pyx_t_1 = (__pyx_v_div < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_div);
  } else {
    __pyx_t_6 = __pyx_v_div;
  }
  __pyx_v_abs_f = __pyx_t_6;

  /* "utils.pxd":233
 *     cdef:
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *         long long half  = abs_f - abs_r
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_r);
  } else {
    __pyx_t_6 = __pyx_v_r;
  }
  __pyx_v_abs_r = __pyx_t_6;

  /* "utils.pxd":234
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):
 *         if (num ^ div) < 0:
*/
  __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

  /* "utils.pxd":235
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  __pyx_t_5 = (__pyx_v_abs_r > __pyx_v_half);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_abs_r == __pyx_v_half);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_5 = ((__pyx_v_q & 1) != 0);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":236
 *         long long half  = abs_f - abs_r
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
    __pyx_t_1 = ((__pyx_v_num ^ __pyx_v_div) < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":237
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down             # <<<<<<<<<<<<<<
 *         else:
 *             q += 1  # same sign  bump up
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":236
 *         long long half  = abs_f - abs_r
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
      goto __pyx_L12;
    }

    /* "utils.pxd":239
 *             q -= 1  # different signs  bump down
 *         else:
 *             q += 1  # same sign  bump up             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
    /*else*/ {
      __pyx_v_q = (__pyx_v_q + 1);
    }
    __pyx_L12:;

    /* "utils.pxd":235
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  }

  /* "utils.pxd":240
 *         else:
 *             q += 1  # same sign  bump up
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_up(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":207
 *     return r + offset
 * 
 * cdef inline long long math_div_even(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round to nearest, ties-to-even (bankers' rounding) `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_even", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":242
 *     return q + offset
 * 
 * cdef inline long long math_div_up(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half away from zero (round-half-up) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_up(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_up *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_abs_f;
  PY_LONG_LONG __pyx_v_abs_r;
  PY_LONG_LONG __pyx_v_half;
  PY_LONG_LONG __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_t_5;
  PY_LONG_LONG __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_up", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":255
 *     >>> (Decimal(num) / Decimal(div)).to_integral_value(rounding=ROUND_HALF_UP) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_up: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":256
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_up: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_up: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_up_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 256, __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(5, 256, __pyx_L1_error)

    /* "utils.pxd":255
 *     >>> (Decimal(num) / Decimal(div)).to_integral_value(rounding=ROUND_HALF_UP) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_up: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":257
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_up: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_up: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":258
 *         raise ZeroDivisionError("math_div_up: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_up: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q, r
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_up_result_does_not_fit};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 258, __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(5, 258, __pyx_L1_error)

    /* "utils.pxd":257
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_up: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_up: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":262
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return q + offset        # exact division
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":263
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset        # exact division
 * 
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":264
 *         q = num / div; r = num % div
 *     if r == 0:
 *         return q + offset        # exact division             # <<<<<<<<<<<<<<
 * 
 *     cdef:
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":263
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset        # exact division
 * 
*/
  }

  /* "utils.pxd":267
 * 
 *     cdef:
 *         long long abs_f = -div if div < 0 else div             # <<<<<<<<<<<<<<
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
*/
  __pyx_t_1 = (__pyx_v_div < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_div);
  } else {
    __pyx_t_6 = __pyx_v_div;
  }
  __pyx_v_abs_f = __pyx_t_6;

  /* "utils.pxd":268
 *     cdef:
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *         long long half  = abs_f - abs_r
 *     if abs_r >= half:
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_r);
  } else {
    __pyx_t_6 = __pyx_v_r;
  }
  __pyx_v_abs_r = __pyx_t_6;

  /* "utils.pxd":269
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *     if abs_r >= half:
 *         if (num ^ div) < 0:
*/
  __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

  /* "utils.pxd":270
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r >= half:             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  __pyx_t_1 = (__pyx_v_abs_r >= __pyx_v_half);
  if (__pyx_t_1) {

    /* "utils.pxd":271
 *         long long half  = abs_f - abs_r
 *     if abs_r >= half:
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
    __pyx_t_1 = ((__pyx_v_num ^ __pyx_v_div) < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":272
 *     if abs_r >= half:
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down             # <<<<<<<<<<<<<<
 *         else:
 *             q += 1  # same sign  bump up
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":271
 *         long long half  = abs_f - abs_r
 *     if abs_r >= half:
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
      goto __pyx_L9;
    }

    /* "utils.pxd":274
 *             q -= 1  # different signs  bump down
 *         else:
 *             q += 1  # same sign  bump up             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
    /*else*/ {
      __pyx_v_q = (__pyx_v_q + 1);
    }
    __pyx_L9:;

    /* "utils.pxd":270
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r >= half:             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  }

  /* "utils.pxd":275
 *         else:
 *             q += 1  # same sign  bump up
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_down(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":242
 *     return q + offset
 * 
 * cdef inline long long math_div_up(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half away from zero (round-half-up) `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_up", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":277
 *     return q + offset
 * 
 * cdef inline long long math_div_down(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half toward zero (round-half-down) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_down(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_down *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_abs_f;
  PY_LONG_LONG __pyx_v_abs_r;
  PY_LONG_LONG __pyx_v_half;
  PY_LONG_LONG __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_t_5;
  PY_LONG_LONG __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_down", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":290
 *     >>> (Decimal(num) / Decimal(div)).to_integral_value(rounding=ROUND_HALF_DOWN) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_down: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":291
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_down: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_down: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_down_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 291, __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(5, 291, __pyx_L1_error)

    /* "utils.pxd":290
 *     >>> (Decimal(num) / Decimal(div)).to_integral_value(rounding=ROUND_HALF_DOWN) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_down: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":292
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_down: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_down: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":293
 *         raise ZeroDivisionError("math_div_down: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_down: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q, r
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_down_result_does_not_fi};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 293, __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(5, 293, __pyx_L1_error)

    /* "utils.pxd":292
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_down: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_down: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":297
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return q + offset        # exact division
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":298
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset        # exact division
 * 
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":299
 *         q = num / div; r = num % div
 *     if r == 0:
 *         return q + offset        # exact division             # <<<<<<<<<<<<<<
 * 
 *     cdef:
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":298
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset        # exact division
 * 
*/
  }

  /* "utils.pxd":302
 * 
 *     cdef:
 *         long long abs_f = -div if div < 0 else div             # <<<<<<<<<<<<<<
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
*/
  __pyx_t_1 = (__pyx_v_div < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_div);
  } else {
    __pyx_t_6 = __pyx_v_div;
  }
  __pyx_v_abs_f = __pyx_t_6;

  /* "utils.pxd":303
 *     cdef:
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *         long long half  = abs_f - abs_r
 *     if abs_r > half:
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {
    __pyx_t_6 = (-__pyx_v_r);
  } else {
    __pyx_t_6 = __pyx_v_r;
  }
  __pyx_v_abs_r = __pyx_t_6;

  /* "utils.pxd":304
 *         long long abs_f = -div if div < 0 else div
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *     if abs_r > half:
 *         if (num ^ div) < 0:
*/
  __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

  /* "utils.pxd":305
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r > half:             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  __pyx_t_1 = (__pyx_v_abs_r > __pyx_v_half);
  if (__pyx_t_1) {

    /* "utils.pxd":306
 *         long long half  = abs_f - abs_r
 *     if abs_r > half:
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
    __pyx_t_1 = ((__pyx_v_num ^ __pyx_v_div) < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":307
 *     if abs_r > half:
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down             # <<<<<<<<<<<<<<
 *         else:
 *             q += 1  # same sign  bump up
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":306
 *         long long half  = abs_f - abs_r
 *     if abs_r > half:
 *         if (num ^ div) < 0:             # <<<<<<<<<<<<<<
 *             q -= 1  # different signs  bump down
 *         else:
*/
      goto __pyx_L9;
    }

    /* "utils.pxd":309
 *             q -= 1  # different signs  bump down
 *         else:
 *             q += 1  # same sign  bump up             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
    /*else*/ {
      __pyx_v_q = (__pyx_v_q + 1);
    }
    __pyx_L9:;

    /* "utils.pxd":305
 *         long long abs_r = -r if r < 0 else r
 *         long long half  = abs_f - abs_r
 *     if abs_r > half:             # <<<<<<<<<<<<<<
 *         if (num ^ div) < 0:
 *             q -= 1  # different signs  bump down
*/
  }

  /* "utils.pxd":310
 *         else:
 *             q += 1  # same sign  bump up
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_ceil(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":277
 *     return q + offset
 * 
 * cdef inline long long math_div_down(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then round half toward zero (round-half-down) `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_down", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":312
 *     return q + offset
 * 
 * cdef inline long long math_div_ceil(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical ceiling `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_ceil(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_ceil *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __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_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_ceil", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":325
 *     >>> math.ceil(num / div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":326
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_ceil: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_ceil_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 326, __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(5, 326, __pyx_L1_error)

    /* "utils.pxd":325
 *     >>> math.ceil(num / div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":327
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_ceil: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":328
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_ceil: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q, r
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_ceil_result_does_not_fi};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 328, __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(5, 328, __pyx_L1_error)

    /* "utils.pxd":327
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_ceil: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_ceil: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":332
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return q + offset         # exact division
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":333
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset         # exact division
 * 
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":334
 *         q = num / div; r = num % div
 *     if r == 0:
 *         return q + offset         # exact division             # <<<<<<<<<<<<<<
 * 
 *     if (num ^ div) >= 0:  # same sign  bump up
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":333
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset         # exact division
 * 
*/
  }

  /* "utils.pxd":336
 *         return q + offset         # exact division
 * 
 *     if (num ^ div) >= 0:  # same sign  bump up             # <<<<<<<<<<<<<<
 *         q += 1
 *     return q + offset
*/
  __pyx_t_1 = ((__pyx_v_num ^ __pyx_v_div) >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":337
 * 
 *     if (num ^ div) >= 0:  # same sign  bump up
 *         q += 1             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
    __pyx_v_q = (__pyx_v_q + 1);

    /* "utils.pxd":336
 *         return q + offset         # exact division
 * 
 *     if (num ^ div) >= 0:  # same sign  bump up             # <<<<<<<<<<<<<<
 *         q += 1
 *     return q + offset
*/
  }

  /* "utils.pxd":338
 *     if (num ^ div) >= 0:  # same sign  bump up
 *         q += 1
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_floor(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":312
 *     return q + offset
 * 
 * cdef inline long long math_div_ceil(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical ceiling `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_ceil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":340
 *     return q + offset
 * 
 * cdef inline long long math_div_floor(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical floor `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_floor(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_floor *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __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_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_floor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":353
 *     >>> math.floor(num / div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_floor: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":354
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_floor: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_floor: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_floor_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 354, __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(5, 354, __pyx_L1_error)

    /* "utils.pxd":353
 *     >>> math.floor(num / div) + offset
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_floor: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":355
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_floor: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_floor: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":356
 *         raise ZeroDivisionError("math_div_floor: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_floor: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q, r
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_floor_result_does_not_f};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 356, __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(5, 356, __pyx_L1_error)

    /* "utils.pxd":355
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_floor: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_floor: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":360
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div             # <<<<<<<<<<<<<<
 *     if r == 0:
 *         return q + offset         # exact division
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);
  __pyx_v_r = (__pyx_v_num % __pyx_v_div);

  /* "utils.pxd":361
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset         # exact division
 * 
*/
  __pyx_t_1 = (__pyx_v_r == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":362
 *         q = num / div; r = num % div
 *     if r == 0:
 *         return q + offset         # exact division             # <<<<<<<<<<<<<<
 * 
 *     if (num ^ div) < 0:        # different sign  bump down
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":361
 *     with cython.cdivision(True):
 *         q = num / div; r = num % div
 *     if r == 0:             # <<<<<<<<<<<<<<
 *         return q + offset         # exact division
 * 
*/
  }

  /* "utils.pxd":364
 *         return q + offset         # exact division
 * 
 *     if (num ^ div) < 0:        # different sign  bump down             # <<<<<<<<<<<<<<
 *         q -= 1
 *     return q + offset
*/
  __pyx_t_1 = ((__pyx_v_num ^ __pyx_v_div) < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":365
 * 
 *     if (num ^ div) < 0:        # different sign  bump down
 *         q -= 1             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
    __pyx_v_q = (__pyx_v_q - 1);

    /* "utils.pxd":364
 *         return q + offset         # exact division
 * 
 *     if (num ^ div) < 0:        # different sign  bump down             # <<<<<<<<<<<<<<
 *         q -= 1
 *     return q + offset
*/
  }

  /* "utils.pxd":366
 *     if (num ^ div) < 0:        # different sign  bump down
 *         q -= 1
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long math_div_trunc(long long num, long long div, long long offset=0) except *:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":340
 *     return q + offset
 * 
 * cdef inline long long math_div_floor(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide then take the mathematical floor `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_floor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":368
 *     return q + offset
 * 
 * cdef inline long long math_div_trunc(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide and truncate toward zero (C/CPython style) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_math_div_trunc(PY_LONG_LONG __pyx_v_num, PY_LONG_LONG __pyx_v_div, struct __pyx_opt_args_7cytimes_5utils_math_div_trunc *__pyx_optional_args) {
  PY_LONG_LONG __pyx_v_offset = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __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_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("math_div_trunc", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":378
 *     :raises `<'OverflowError'>`: When the result does not fit in signed 64-bit.
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  __pyx_t_1 = (__pyx_v_div == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":379
 *     """
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")             # <<<<<<<<<<<<<<
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_trunc: result does not fit in signed 64-bit")
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_trunc_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 379, __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(5, 379, __pyx_L1_error)

    /* "utils.pxd":378
 *     :raises `<'OverflowError'>`: When the result does not fit in signed 64-bit.
 *     """
 *     if div == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
*/
  }

  /* "utils.pxd":380
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_trunc: result does not fit in signed 64-bit")
 * 
*/
  __pyx_t_5 = (__pyx_v_div == -1LL);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_num == LLONG_MIN);
  __pyx_t_1 = __pyx_t_5;
  __pyx_L5_bool_binop_done:;
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":381
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")
 *     if div == -1 and num == LLONG_MIN:
 *         raise OverflowError("math_div_trunc: result does not fit in signed 64-bit")             # <<<<<<<<<<<<<<
 * 
 *     cdef long long q
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_math_div_trunc_result_does_not_f};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 381, __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(5, 381, __pyx_L1_error)

    /* "utils.pxd":380
 *     if div == 0:
 *         raise ZeroDivisionError("math_div_trunc: division by zero.")
 *     if div == -1 and num == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         raise OverflowError("math_div_trunc: result does not fit in signed 64-bit")
 * 
*/
  }

  /* "utils.pxd":385
 *     cdef long long q
 *     with cython.cdivision(True):
 *         q = num / div          # truncates toward zero             # <<<<<<<<<<<<<<
 *     return q + offset
 * 
*/
  __pyx_v_q = (__pyx_v_num / __pyx_v_div);

  /* "utils.pxd":386
 *     with cython.cdivision(True):
 *         q = num / div          # truncates toward zero
 *     return q + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline unsigned long long abs_diff_ull(long long a, long long b) noexcept nogil:
*/
  __pyx_r = (__pyx_v_q + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":368
 *     return q + offset
 * 
 * cdef inline long long math_div_trunc(long long num, long long div, long long offset=0) except *:             # <<<<<<<<<<<<<<
 *     """Divide and truncate toward zero (C/CPython style) `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.math_div_trunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":388
 *     return q + offset
 * 
 * cdef inline unsigned long long abs_diff_ull(long long a, long long b) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return |a - b| as uint64 using unsigned arithmetic `<'int'>`.
 * 
*/

static CYTHON_INLINE unsigned PY_LONG_LONG __pyx_f_7cytimes_5utils_abs_diff_ull(PY_LONG_LONG __pyx_v_a, PY_LONG_LONG __pyx_v_b) {
  unsigned PY_LONG_LONG __pyx_v_ua;
  unsigned PY_LONG_LONG __pyx_v_ub;
  unsigned PY_LONG_LONG __pyx_r;
  unsigned PY_LONG_LONG __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":393
 *     Safe for all long long pairs (avoids signed overflow/UB near LLONG_MIN/LLONG_MAX).
 *     """
 *     cdef unsigned long long ua = <unsigned long long> a             # <<<<<<<<<<<<<<
 *     cdef unsigned long long ub = <unsigned long long> b
 *     return ua - ub if a >= b else ub - ua
*/
  __pyx_v_ua = ((unsigned PY_LONG_LONG)__pyx_v_a);

  /* "utils.pxd":394
 *     """
 *     cdef unsigned long long ua = <unsigned long long> a
 *     cdef unsigned long long ub = <unsigned long long> b             # <<<<<<<<<<<<<<
 *     return ua - ub if a >= b else ub - ua
 * 
*/
  __pyx_v_ub = ((unsigned PY_LONG_LONG)__pyx_v_b);

  /* "utils.pxd":395
 *     cdef unsigned long long ua = <unsigned long long> a
 *     cdef unsigned long long ub = <unsigned long long> b
 *     return ua - ub if a >= b else ub - ua             # <<<<<<<<<<<<<<
 * 
 * # Parser -----------------------------------------------------------------------------------------------
*/
  __pyx_t_2 = (__pyx_v_a >= __pyx_v_b);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_ua - __pyx_v_ub);
  } else {
    __pyx_t_1 = (__pyx_v_ub - __pyx_v_ua);
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":388
 *     return q + offset
 * 
 * cdef inline unsigned long long abs_diff_ull(long long a, long long b) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return |a - b| as uint64 using unsigned arithmetic `<'int'>`.
 * 
*/

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

/* "utils.pxd":399
 * # Parser -----------------------------------------------------------------------------------------------
 * # . check: character
 * cdef inline bint is_dot(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a dot `'.'` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dot(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;

  /* "utils.pxd":404
 *     - Dot: `'.'` (46)
 *     """
 *     return ch == 46             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_comma(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_r = (__pyx_v_ch == 46);
  goto __pyx_L0;

  /* "utils.pxd":399
 * # Parser -----------------------------------------------------------------------------------------------
 * # . check: character
 * cdef inline bint is_dot(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a dot `'.'` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":406
 *     return ch == 46
 * 
 * cdef inline bint is_comma(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a comma `','` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_comma(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;

  /* "utils.pxd":411
 *     - Comma: `','` (44)
 *     """
 *     return ch == 44             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_plus_sign(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_r = (__pyx_v_ch == 44);
  goto __pyx_L0;

  /* "utils.pxd":406
 *     return ch == 46
 * 
 * cdef inline bint is_comma(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a comma `','` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":413
 *     return ch == 44
 * 
 * cdef inline bint is_plus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a plus sign `'+'` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_plus_sign(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;

  /* "utils.pxd":418
 *     - Plus sign: `'+'` (43)
 *     """
 *     return ch == 43             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_minus_sign(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_r = (__pyx_v_ch == 43);
  goto __pyx_L0;

  /* "utils.pxd":413
 *     return ch == 44
 * 
 * cdef inline bint is_plus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a plus sign `'+'` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":420
 *     return ch == 43
 * 
 * cdef inline bint is_minus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a minus sign `'-'` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_minus_sign(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;

  /* "utils.pxd":425
 *     - Minus sign: `'-'` (45)
 *     """
 *     return ch == 45             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_plus_or_minus_sign(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_r = (__pyx_v_ch == 45);
  goto __pyx_L0;

  /* "utils.pxd":420
 *     return ch == 43
 * 
 * cdef inline bint is_minus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a minus sign `'-'` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":427
 *     return ch == 45
 * 
 * cdef inline bint is_plus_or_minus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a plus or minus sign `'-'` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_plus_or_minus_sign(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":433
 *     - Minus sign: `'-'` (45)
 *     """
 *     return is_plus_sign(ch) or is_minus_sign(ch)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_iso_sep(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_plus_sign(__pyx_v_ch);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_minus_sign(__pyx_v_ch);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":427
 *     return ch == 45
 * 
 * cdef inline bint is_plus_or_minus_sign(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a plus or minus sign `'-'` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":435
 *     return is_plus_sign(ch) or is_minus_sign(ch)
 * 
 * cdef inline bint is_iso_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ISO 8601 date-time separator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_iso_sep(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":440
 *     - Date / Time separators: `' '` (32) or `'T'` (case-insensitive: 84 & 116).
 *     """
 *     return ch == 32 or ch == 84 or ch == 116             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_date_sep(Py_UCS4 ch) noexcept nogil:
*/
  switch (__pyx_v_ch) {
    case 32:
    case 84:
    case 0x74:
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":435
 *     return is_plus_sign(ch) or is_minus_sign(ch)
 * 
 * cdef inline bint is_iso_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ISO 8601 date-time separator `<'bool'>`.
 * 
*/

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

/* "utils.pxd":442
 *     return ch == 32 or ch == 84 or ch == 116
 * 
 * cdef inline bint is_date_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a date-field seperator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_date_sep(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":447
 *     - Date-field separators: `'-'` (45), `'.'` (46) or `'/'` (47)
 *     """
 *     return 45 <= ch <= 47             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_time_sep(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_1 = (45 <= __pyx_v_ch);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_ch <= 47);
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":442
 *     return ch == 32 or ch == 84 or ch == 116
 * 
 * cdef inline bint is_date_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a date-field seperator `<'bool'>`.
 * 
*/

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

/* "utils.pxd":449
 *     return 45 <= ch <= 47
 * 
 * cdef inline bint is_time_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is the time-field separator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_time_sep(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;

  /* "utils.pxd":454
 *     - Time-field seperator: `':'` (58)
 *     """
 *     return ch == 58             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_isoweek_sep(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_r = (__pyx_v_ch == 58);
  goto __pyx_L0;

  /* "utils.pxd":449
 *     return 45 <= ch <= 47
 * 
 * cdef inline bint is_time_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is the time-field separator `<'bool'>`.
 * 
*/

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

/* "utils.pxd":456
 *     return ch == 58
 * 
 * cdef inline bint is_isoweek_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is the ISO week designator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_isoweek_sep(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":461
 *     - ISO week designator: `'W'` (case-insensitive: 87 & 119).
 *     """
 *     return ch == 87 or ch == 119             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_ctl(Py_UCS4 ch) noexcept nogil:
*/
  switch (__pyx_v_ch) {
    case 87:
    case 0x77:
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":456
 *     return ch == 58
 * 
 * cdef inline bint is_isoweek_sep(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is the ISO week designator `<'bool'>`.
 * 
*/

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

/* "utils.pxd":463
 *     return ch == 87 or ch == 119
 * 
 * cdef inline bint is_ascii_ctl(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a control charactor `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_ctl(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":468
 *     - ASCII control characters (0-31) and (127)
 *     """
 *     return ch <= 31 or ch == 127             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_ctl_or_space(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_2 = (__pyx_v_ch <= 31);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_ch == 0x7F);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":463
 *     return ch == 87 or ch == 119
 * 
 * cdef inline bint is_ascii_ctl(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a control charactor `<'bool'>`.
 * 
*/

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

/* "utils.pxd":470
 *     return ch <= 31 or ch == 127
 * 
 * cdef inline bint is_ascii_ctl_or_space(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a control or space charactor `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":476
 *     - ASCII space character: (32)
 *     """
 *     return ch <= 32 or ch == 127             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_digit(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_2 = (__pyx_v_ch <= 32);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_ch == 0x7F);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":470
 *     return ch <= 31 or ch == 127
 * 
 * cdef inline bint is_ascii_ctl_or_space(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a control or space charactor `<'bool'>`.
 * 
*/

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

/* "utils.pxd":478
 *     return ch <= 32 or ch == 127
 * 
 * cdef inline bint is_ascii_digit(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ASCII digit `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_digit(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":483
 *     - ASSCI digits: `'0'` (48) ... `'9'` (57)
 *     """
 *     return 48 <= ch <= 57             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_letter_upper(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_1 = (48 <= __pyx_v_ch);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_ch <= 57);
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":478
 *     return ch <= 32 or ch == 127
 * 
 * cdef inline bint is_ascii_digit(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ASCII digit `<'bool'>`.
 * 
*/

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

/* "utils.pxd":485
 *     return 48 <= ch <= 57
 * 
 * cdef inline bint is_ascii_letter_upper(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an uppercase ASCII letter `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter_upper(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":490
 *     - Uppercase ASCII letters: `'A'` (65) ... `'Z'` (90)
 *     """
 *     return 65 <= ch <= 90             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_letter_lower(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_1 = (65 <= __pyx_v_ch);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_ch <= 90);
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":485
 *     return 48 <= ch <= 57
 * 
 * cdef inline bint is_ascii_letter_upper(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an uppercase ASCII letter `<'bool'>`.
 * 
*/

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

/* "utils.pxd":492
 *     return 65 <= ch <= 90
 * 
 * cdef inline bint is_ascii_letter_lower(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a lowercase ASCII letter `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter_lower(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":497
 *     - Lowercase ASCII letters: `'a'` (97) ... `'z'` (122)
 *     """
 *     return 97 <= ch <= 122             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_ascii_letter(Py_UCS4 ch) noexcept nogil:
*/
  __pyx_t_1 = (97 <= __pyx_v_ch);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_ch <= 0x7A);
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":492
 *     return 65 <= ch <= 90
 * 
 * cdef inline bint is_ascii_letter_lower(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is a lowercase ASCII letter `<'bool'>`.
 * 
*/

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

/* "utils.pxd":499
 *     return 97 <= ch <= 122
 * 
 * cdef inline bint is_ascii_letter(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ASCII letter (case-insensitive) `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_ascii_letter(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":505
 *     - Lowercase ASCII letters: `'a'` (97) ... `'z'` (122)
 *     """
 *     return is_ascii_letter_lower(ch) or is_ascii_letter_upper(ch)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_alpha(Py_UCS4 ch) noexcept:
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_ascii_letter_lower(__pyx_v_ch);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_ascii_letter_upper(__pyx_v_ch);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":499
 *     return 97 <= ch <= 122
 * 
 * cdef inline bint is_ascii_letter(Py_UCS4 ch) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an ASCII letter (case-insensitive) `<'bool'>`.
 * 
*/

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

/* "utils.pxd":507
 *     return is_ascii_letter_lower(ch) or is_ascii_letter_upper(ch)
 * 
 * cdef inline bint is_alpha(Py_UCS4 ch) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an alphabetic character `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_alpha(Py_UCS4 __pyx_v_ch) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;

  /* "utils.pxd":512
 *     - Uses Unicode definition of alphabetic characters.
 *     """
 *     return True if is_ascii_letter(ch) else ch.isalpha()             # <<<<<<<<<<<<<<
 * 
 * # . check: string
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_ascii_letter(__pyx_v_ch);
  if (__pyx_t_2) {
    __pyx_t_1 = 1;
  } else {
    __pyx_t_3 = __Pyx_Py_UNICODE_ISALPHA(__pyx_v_ch); 
    __pyx_t_1 = __pyx_t_3;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":507
 *     return is_ascii_letter_lower(ch) or is_ascii_letter_upper(ch)
 * 
 * cdef inline bint is_alpha(Py_UCS4 ch) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether `ch` is an alphabetic character `<'bool'>`.
 * 
*/

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

/* "utils.pxd":515
 * 
 * # . check: string
 * cdef inline bint is_str_dot(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character dot `'.'` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_dot(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_dot *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":524
 *     :returns `<'bool'>`: True if `token` is a single-character dot `'.'`; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":525
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":524
 *     :returns `<'bool'>`: True if `token` is a single-character dot `'.'`; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":526
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":527
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":526
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":528
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_dot(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":529
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_dot(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":528
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_dot(str_read(token, 0))
*/
  }

  /* "utils.pxd":530
 *     if token_len != 1:
 *         return False
 *     return is_dot(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_comma(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 530, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_dot(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":515
 * 
 * # . check: string
 * cdef inline bint is_str_dot(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character dot `'.'` `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_dot", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":532
 *     return is_dot(str_read(token, 0))
 * 
 * cdef inline bint is_str_comma(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character comma `','` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_comma(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_comma *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":541
 *     :returns `<'bool'>`: True if `token` is a single-character comma `'.,`; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":542
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":541
 *     :returns `<'bool'>`: True if `token` is a single-character comma `'.,`; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":543
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":544
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":543
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":545
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_comma(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":546
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_comma(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":545
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_comma(str_read(token, 0))
*/
  }

  /* "utils.pxd":547
 *     if token_len != 1:
 *         return False
 *     return is_comma(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_iso_sep(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 547, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_comma(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":532
 *     return is_dot(str_read(token, 0))
 * 
 * cdef inline bint is_str_comma(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character comma `','` `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_comma", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":549
 *     return is_comma(str_read(token, 0))
 * 
 * cdef inline bint is_str_iso_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO 8601 date-time separator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_iso_sep(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_iso_sep *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":560
 *     :returns `<'bool'>`: True if `token` is a single-character ISO date-time separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":561
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":560
 *     :returns `<'bool'>`: True if `token` is a single-character ISO date-time separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":562
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":563
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":562
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":564
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_iso_sep(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":565
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_iso_sep(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":564
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_iso_sep(str_read(token, 0))
*/
  }

  /* "utils.pxd":566
 *     if token_len != 1:
 *         return False
 *     return is_iso_sep(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_date_sep(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 566, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_iso_sep(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":549
 *     return is_comma(str_read(token, 0))
 * 
 * cdef inline bint is_str_iso_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO 8601 date-time separator `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_iso_sep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":568
 *     return is_iso_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_date_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character date-field seperator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_date_sep(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_date_sep *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":579
 *     :returns `<'bool'>`: True if `token` is a single-character date-field separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":580
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":579
 *     :returns `<'bool'>`: True if `token` is a single-character date-field separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":581
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":582
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":581
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":583
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_date_sep(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":584
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_date_sep(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":583
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_date_sep(str_read(token, 0))
*/
  }

  /* "utils.pxd":585
 *     if token_len != 1:
 *         return False
 *     return is_date_sep(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_time_sep(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 585, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_date_sep(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":568
 *     return is_iso_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_date_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character date-field seperator `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_date_sep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":587
 *     return is_date_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_time_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character time-field seperator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_time_sep(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_time_sep *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":598
 *     :returns `<'bool'>`: True if `token` is a single-character time-field separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":599
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":598
 *     :returns `<'bool'>`: True if `token` is a single-character time-field separator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":600
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":601
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":600
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":602
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_time_sep(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":603
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_time_sep(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":602
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_time_sep(str_read(token, 0))
*/
  }

  /* "utils.pxd":604
 *     if token_len != 1:
 *         return False
 *     return is_time_sep(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_isoweek_sep(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 604, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_time_sep(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":587
 *     return is_date_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_time_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character time-field seperator `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_time_sep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":606
 *     return is_time_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_isoweek_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO week designator `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_isoweek_sep(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_isoweek_sep *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":617
 *     :returns `<'bool'>`: True if `token` is a single-character ISO week designator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":618
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":617
 *     :returns `<'bool'>`: True if `token` is a single-character ISO week designator; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":619
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":620
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":619
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":621
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_isoweek_sep(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":622
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_isoweek_sep(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":621
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_isoweek_sep(str_read(token, 0))
*/
  }

  /* "utils.pxd":623
 *     if token_len != 1:
 *         return False
 *     return is_isoweek_sep(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_ctl(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 623, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_isoweek_sep(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":606
 *     return is_time_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_isoweek_sep(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single-character ISO week designator `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_isoweek_sep", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":625
 *     return is_isoweek_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control charactor `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_ctl(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":636
 *     :returns `<'bool'>`: True if `token` is a single control character; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":637
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":636
 *     :returns `<'bool'>`: True if `token` is a single control character; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":638
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":639
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":638
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":640
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_ascii_ctl(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":641
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_ascii_ctl(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":640
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_ascii_ctl(str_read(token, 0))
*/
  }

  /* "utils.pxd":642
 *     if token_len != 1:
 *         return False
 *     return is_ascii_ctl(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_ctl_or_space(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 642, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_ascii_ctl(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":625
 *     return is_isoweek_sep(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control charactor `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_ctl", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":644
 *     return is_ascii_ctl(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl_or_space(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control or space charactor `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_ctl_or_space *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":656
 *     :returns `<'bool'>`: True if `token` is a single control or space character; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":657
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":656
 *     :returns `<'bool'>`: True if `token` is a single control or space character; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":658
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":659
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len != 1:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":658
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len != 1:
*/
  }

  /* "utils.pxd":660
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_ascii_ctl_or_space(str_read(token, 0))
*/
  __pyx_t_1 = (__pyx_v_token_len != 1);
  if (__pyx_t_1) {

    /* "utils.pxd":661
 *         token_len = str_len(token)
 *     if token_len != 1:
 *         return False             # <<<<<<<<<<<<<<
 *     return is_ascii_ctl_or_space(str_read(token, 0))
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":660
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len != 1:             # <<<<<<<<<<<<<<
 *         return False
 *     return is_ascii_ctl_or_space(str_read(token, 0))
*/
  }

  /* "utils.pxd":662
 *     if token_len != 1:
 *         return False
 *     return is_ascii_ctl_or_space(str_read(token, 0))             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_digits(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 662, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(__pyx_t_2);
  goto __pyx_L0;

  /* "utils.pxd":644
 *     return is_ascii_ctl(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_ctl_or_space(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` is a single control or space charactor `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_ctl_or_space", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":664
 *     return is_ascii_ctl_or_space(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_digits(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains ASCII digits `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_digits(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_i;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":675
 *     :returns `<'bool'>`: True if `token` only contains ASCII digits; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":676
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":675
 *     :returns `<'bool'>`: True if `token` only contains ASCII digits; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":677
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":678
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":677
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":679
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":680
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":679
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  }

  /* "utils.pxd":682
 *         return False
 *     cdef Py_ssize_t i
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         if not is_ascii_digit(str_read(token, i)):
 *             return False
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":683
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_digit(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 683, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_t_5));
    if (__pyx_t_1) {

      /* "utils.pxd":684
 *     for i in range(token_len):
 *         if not is_ascii_digit(str_read(token, i)):
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":683
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_digit(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":685
 *         if not is_ascii_digit(str_read(token, i)):
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_letters_upper(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":664
 *     return is_ascii_ctl_or_space(str_read(token, 0))
 * 
 * cdef inline bint is_str_ascii_digits(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains ASCII digits `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_digits", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":687
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_upper(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains uppercase ASCII letters `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_letters_upper(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_upper *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_i;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":698
 *     :returns `<'bool'>`: True if `token` only contains uppercase ASCII letters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":699
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":698
 *     :returns `<'bool'>`: True if `token` only contains uppercase ASCII letters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":700
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":701
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":700
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":702
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":703
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":702
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  }

  /* "utils.pxd":705
 *         return False
 *     cdef Py_ssize_t i
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         if not is_ascii_letter_upper(str_read(token, i)):
 *             return False
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":706
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter_upper(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 706, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_letter_upper(__pyx_t_5));
    if (__pyx_t_1) {

      /* "utils.pxd":707
 *     for i in range(token_len):
 *         if not is_ascii_letter_upper(str_read(token, i)):
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":706
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter_upper(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":708
 *         if not is_ascii_letter_upper(str_read(token, i)):
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_letters_lower(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":687
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_upper(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains uppercase ASCII letters `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_letters_upper", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":710
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_lower(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains lowercase ASCII letters `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_letters_lower(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters_lower *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_i;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":721
 *     :returns `<'bool'>`: True if `token` only contains lowercase ASCII letters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":722
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":721
 *     :returns `<'bool'>`: True if `token` only contains lowercase ASCII letters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":723
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":724
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":723
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":725
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":726
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":725
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  }

  /* "utils.pxd":728
 *         return False
 *     cdef Py_ssize_t i
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         if not is_ascii_letter_lower(str_read(token, i)):
 *             return False
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":729
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter_lower(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 729, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_letter_lower(__pyx_t_5));
    if (__pyx_t_1) {

      /* "utils.pxd":730
 *     for i in range(token_len):
 *         if not is_ascii_letter_lower(str_read(token, i)):
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":729
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter_lower(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":731
 *         if not is_ascii_letter_lower(str_read(token, i)):
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_ascii_letters(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":710
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters_lower(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains lowercase ASCII letters `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_letters_lower", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":733
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains letters (case-insensitive) `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_ascii_letters(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_letters *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_i;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":744
 *     :returns `<'bool'>`: True if `token` only contains letters (case-insensitive); False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":745
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":744
 *     :returns `<'bool'>`: True if `token` only contains letters (case-insensitive); False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":746
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":747
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":746
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":748
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":749
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":748
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  }

  /* "utils.pxd":751
 *         return False
 *     cdef Py_ssize_t i
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         if not is_ascii_letter(str_read(token, i)):
 *             return False
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":752
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 752, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_letter(__pyx_t_5));
    if (__pyx_t_1) {

      /* "utils.pxd":753
 *     for i in range(token_len):
 *         if not is_ascii_letter(str_read(token, i)):
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":752
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_ascii_letter(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":754
 *         if not is_ascii_letter(str_read(token, i)):
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_str_alphas(str token, Py_ssize_t token_len=-1) except -1:
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":733
 *     return True
 * 
 * cdef inline bint is_str_ascii_letters(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains letters (case-insensitive) `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_ascii_letters", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":756
 *     return True
 * 
 * cdef inline bint is_str_alphas(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains alphabetic characters `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_str_alphas(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_is_str_alphas *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_i;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":767
 *     :returns `<'bool'>`: True if `token` only contains alphabetic characters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":768
 *     """
 *     if token is None:
 *         return False             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":767
 *     :returns `<'bool'>`: True if `token` only contains alphabetic characters; False otherwise.
 *     """
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return False
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":769
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":770
 *         return False
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return False
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":769
 *     if token is None:
 *         return False
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":771
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":772
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":771
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef Py_ssize_t i
*/
  }

  /* "utils.pxd":774
 *         return False
 *     cdef Py_ssize_t i
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         if not is_alpha(str_read(token, i)):
 *             return False
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":775
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_alpha(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 775, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_alpha(__pyx_t_5));
    if (__pyx_t_1) {

      /* "utils.pxd":776
 *     for i in range(token_len):
 *         if not is_alpha(str_read(token, i)):
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":775
 *     cdef Py_ssize_t i
 *     for i in range(token_len):
 *         if not is_alpha(str_read(token, i)):             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":777
 *         if not is_alpha(str_read(token, i)):
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . parse
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":756
 *     return True
 * 
 * cdef inline bint is_str_alphas(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check whether `token` only contains alphabetic characters `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.is_str_alphas", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":780
 * 
 * # . parse
 * cdef inline int parse_numeric_kind(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Classify `token` string as certain numeric kind `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_numeric_kind(PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_has_num;
  int __pyx_v_has_dot;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_ch;
  int __pyx_r;
  int __pyx_t_1;
  Py_ssize_t __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  Py_UCS4 __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":794
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return 0
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":795
 *     # Validate
 *     if token is None:
 *         return 0             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":794
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return 0
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":796
 *     if token is None:
 *         return 0
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":797
 *         return 0
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len == 0:
 *         return 0
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":796
 *     if token is None:
 *         return 0
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if token_len == 0:
*/
  }

  /* "utils.pxd":798
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return 0
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":799
 *         token_len = str_len(token)
 *     if token_len == 0:
 *         return 0             # <<<<<<<<<<<<<<
 * 
 *     cdef:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":798
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if token_len == 0:             # <<<<<<<<<<<<<<
 *         return 0
 * 
*/
  }

  /* "utils.pxd":802
 * 
 *     cdef:
 *         bint has_num = False             # <<<<<<<<<<<<<<
 *         bint has_dot = False
 *         Py_ssize_t i
*/
  __pyx_v_has_num = 0;

  /* "utils.pxd":803
 *     cdef:
 *         bint has_num = False
 *         bint has_dot = False             # <<<<<<<<<<<<<<
 *         Py_ssize_t i
 *         Py_UCS4 ch
*/
  __pyx_v_has_dot = 0;

  /* "utils.pxd":807
 *         Py_UCS4 ch
 * 
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
*/
  __pyx_t_2 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":808
 * 
 *     for i in range(token_len):
 *         ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *         if is_ascii_digit(ch):
 *             has_num = True
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 808, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_5;

    /* "utils.pxd":809
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             has_num = True
 *         elif ch == 46:  # '.'
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
    if (__pyx_t_1) {

      /* "utils.pxd":810
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             has_num = True             # <<<<<<<<<<<<<<
 *         elif ch == 46:  # '.'
 *             if has_dot:
*/
      __pyx_v_has_num = 1;

      /* "utils.pxd":809
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             has_num = True
 *         elif ch == 46:  # '.'
*/
      goto __pyx_L8;
    }

    /* "utils.pxd":811
 *         if is_ascii_digit(ch):
 *             has_num = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 return 0
*/
    __pyx_t_1 = (__pyx_v_ch == 46);
    if (__pyx_t_1) {

      /* "utils.pxd":812
 *             has_num = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 return 0
 *             has_dot = True
*/
      if (__pyx_v_has_dot) {

        /* "utils.pxd":813
 *         elif ch == 46:  # '.'
 *             if has_dot:
 *                 return 0             # <<<<<<<<<<<<<<
 *             has_dot = True
 *         else:
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "utils.pxd":812
 *             has_num = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 return 0
 *             has_dot = True
*/
      }

      /* "utils.pxd":814
 *             if has_dot:
 *                 return 0
 *             has_dot = True             # <<<<<<<<<<<<<<
 *         else:
 *             return 0
*/
      __pyx_v_has_dot = 1;

      /* "utils.pxd":811
 *         if is_ascii_digit(ch):
 *             has_num = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 return 0
*/
      goto __pyx_L8;
    }

    /* "utils.pxd":816
 *             has_dot = True
 *         else:
 *             return 0             # <<<<<<<<<<<<<<
 * 
 *     if not has_num:
*/
    /*else*/ {
      __pyx_r = 0;
      goto __pyx_L0;
    }
    __pyx_L8:;
  }

  /* "utils.pxd":818
 *             return 0
 * 
 *     if not has_num:             # <<<<<<<<<<<<<<
 *         return 0
 *     return 2 if has_dot else 1
*/
  __pyx_t_1 = (!__pyx_v_has_num);
  if (__pyx_t_1) {

    /* "utils.pxd":819
 * 
 *     if not has_num:
 *         return 0             # <<<<<<<<<<<<<<
 *     return 2 if has_dot else 1
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":818
 *             return 0
 * 
 *     if not has_num:             # <<<<<<<<<<<<<<
 *         return 0
 *     return 2 if has_dot else 1
*/
  }

  /* "utils.pxd":820
 *     if not has_num:
 *         return 0
 *     return 2 if has_dot else 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isoyear(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  if (__pyx_v_has_dot) {
    __pyx_t_6 = 2;
  } else {
    __pyx_t_6 = 1;
  }
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "utils.pxd":780
 * 
 * # . parse
 * cdef inline int parse_numeric_kind(str token, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Classify `token` string as certain numeric kind `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_numeric_kind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":822
 *     return 2 if has_dot else 1
 * 
 * cdef inline int parse_isoyear(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format year component (YYYY) from a string,
 *     returns `-1` for invalid ISO years `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoyear(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isoyear *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  Py_UCS4 __pyx_v_c2;
  Py_UCS4 __pyx_v_c3;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":839
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":840
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":839
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":841
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 4:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":842
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 4:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":841
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 4:
*/
  }

  /* "utils.pxd":843
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 4:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 4);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":844
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 4:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":843
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 4:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":847
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 847, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":848
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":849
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":848
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":850
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 850, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":851
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":852
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":851
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
*/
  }

  /* "utils.pxd":853
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c2):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 2)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 853, __pyx_L1_error)
  __pyx_v_c2 = __pyx_t_3;

  /* "utils.pxd":854
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c2));
  if (__pyx_t_1) {

    /* "utils.pxd":855
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
 *     if not is_ascii_digit(c3):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":854
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
*/
  }

  /* "utils.pxd":856
 *     if not is_ascii_digit(c2):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c3):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 3)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 856, __pyx_L1_error)
  __pyx_v_c3 = __pyx_t_3;

  /* "utils.pxd":857
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
 *     if not is_ascii_digit(c3):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c3));
  if (__pyx_t_1) {

    /* "utils.pxd":858
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
 *     if not is_ascii_digit(c3):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":857
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c3 = str_read(token, pos + 3)
 *     if not is_ascii_digit(c3):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":864
 *         (ord(c0) - 48) * 1000 +
 *         (ord(c1) - 48) *  100 +
 *         (ord(c2) - 48) *   10 +             # <<<<<<<<<<<<<<
 *         (ord(c3) - 48)
 *     )
*/
  __pyx_v_out = (((((__Pyx_long_cast(__pyx_v_c0) - 48) * 0x3E8) + ((__Pyx_long_cast(__pyx_v_c1) - 48) * 0x64)) + ((__Pyx_long_cast(__pyx_v_c2) - 48) * 10)) + (__Pyx_long_cast(__pyx_v_c3) - 48));

  /* "utils.pxd":867
 *         (ord(c3) - 48)
 *     )
 *     return out if out > 0 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isomonth(str token, Py_ssize_t pos, Py_ssize_t token_len=-1)  except -2:
*/
  __pyx_t_1 = (__pyx_v_out > 0);
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":822
 *     return 2 if has_dot else 1
 * 
 * cdef inline int parse_isoyear(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format year component (YYYY) from a string,
 *     returns `-1` for invalid ISO years `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isoyear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":869
 *     return out if out > 0 else -1
 * 
 * cdef inline int parse_isomonth(str token, Py_ssize_t pos, Py_ssize_t token_len=-1)  except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format month component (MM) from a string,
 *     returns `-1` for invalid ISO months `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isomonth(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isomonth *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":886
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":887
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":886
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":888
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":889
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":888
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  }

  /* "utils.pxd":890
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":891
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":890
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":894
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 894, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":895
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":896
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":895
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":897
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 897, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":898
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":899
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":898
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":903
 *     # Convert to integer
 *     cdef int out = (
 *         (ord(c0) - 48) * 10 +             # <<<<<<<<<<<<<<
 *         (ord(c1) - 48)
 *     )
*/
  __pyx_v_out = (((__Pyx_long_cast(__pyx_v_c0) - 48) * 10) + (__Pyx_long_cast(__pyx_v_c1) - 48));

  /* "utils.pxd":906
 *         (ord(c1) - 48)
 *     )
 *     return out if 1 <= out <= 12 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isoday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (1 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 12);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":869
 *     return out if out > 0 else -1
 * 
 * cdef inline int parse_isomonth(str token, Py_ssize_t pos, Py_ssize_t token_len=-1)  except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format month component (MM) from a string,
 *     returns `-1` for invalid ISO months `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isomonth", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":908
 *     return out if 1 <= out <= 12 else -1
 * 
 * cdef inline int parse_isoday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format day component (DD) from a string,
 *     returns `-1` for invalid ISO days `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoday(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isoday *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":925
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":926
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":925
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":927
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":928
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":927
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  }

  /* "utils.pxd":929
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":930
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":929
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":933
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 933, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":934
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":935
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":934
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":936
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 936, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":937
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":938
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":937
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":942
 *     # Convert to integer
 *     cdef int out = (
 *         (ord(c0) - 48) * 10 +             # <<<<<<<<<<<<<<
 *         (ord(c1) - 48)
 *     )
*/
  __pyx_v_out = (((__Pyx_long_cast(__pyx_v_c0) - 48) * 10) + (__Pyx_long_cast(__pyx_v_c1) - 48));

  /* "utils.pxd":945
 *         (ord(c1) - 48)
 *     )
 *     return out if 1 <= out <= 31 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isoweek(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (1 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 31);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":908
 *     return out if 1 <= out <= 12 else -1
 * 
 * cdef inline int parse_isoday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse ISO format day component (DD) from a string,
 *     returns `-1` for invalid ISO days `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isoday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":947
 *     return out if 1 <= out <= 31 else -1
 * 
 * cdef inline int parse_isoweek(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format week number component (WW) from a string,
 *     returns `-1` for invalid ISO week number `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoweek(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isoweek *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":964
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":965
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":964
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":966
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":967
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":966
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  }

  /* "utils.pxd":968
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":969
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":968
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":972
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 972, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":973
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":974
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":973
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":975
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 975, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":976
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":977
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":976
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":981
 *     # Convert to integer
 *     cdef int out = (
 *         (ord(c0) - 48) * 10 +             # <<<<<<<<<<<<<<
 *         (ord(c1) - 48)
 *     )
*/
  __pyx_v_out = (((__Pyx_long_cast(__pyx_v_c0) - 48) * 10) + (__Pyx_long_cast(__pyx_v_c1) - 48));

  /* "utils.pxd":984
 *         (ord(c1) - 48)
 *     )
 *     return out if 1 <= out <= 53 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isoweekday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (1 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 53);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":947
 *     return out if 1 <= out <= 31 else -1
 * 
 * cdef inline int parse_isoweek(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format week number component (WW) from a string,
 *     returns `-1` for invalid ISO week number `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isoweek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":986
 *     return out if 1 <= out <= 53 else -1
 * 
 * cdef inline int parse_isoweekday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format weekday component (D) from a string,
 *     returns `-1` for invalid ISO weekdays `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isoweekday(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_ch;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1002
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1003
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1002
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1004
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1005
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 1:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1004
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  }

  /* "utils.pxd":1006
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1007
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1006
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1010
 * 
 *     # Parse value
 *     cdef Py_UCS4 ch = str_read(token, pos)             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1010, __pyx_L1_error)
  __pyx_v_ch = __pyx_t_3;

  /* "utils.pxd":1013
 * 
 *     # Convert to integer
 *     cdef int out = ord(ch) - 48             # <<<<<<<<<<<<<<
 *     return out if 1 <= out <= 7 else -1
 * 
*/
  __pyx_v_out = (__Pyx_long_cast(__pyx_v_ch) - 48);

  /* "utils.pxd":1014
 *     # Convert to integer
 *     cdef int out = ord(ch) - 48
 *     return out if 1 <= out <= 7 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isodoy(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (1 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 7);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":986
 *     return out if 1 <= out <= 53 else -1
 * 
 * cdef inline int parse_isoweekday(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format weekday component (D) from a string,
 *     returns `-1` for invalid ISO weekdays `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isoweekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1016
 *     return out if 1 <= out <= 7 else -1
 * 
 * cdef inline int parse_isodoy(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format day-of-year component (DDD) from a string,
 *     returns `-1` for invalid ISO day of the year `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isodoy(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isodoy *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  Py_UCS4 __pyx_v_c2;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1033
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1034
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1033
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1035
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 3:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1036
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 3:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1035
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 3:
*/
  }

  /* "utils.pxd":1037
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 3:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 3);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1038
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 3:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1037
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 3:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1041
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1041, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":1042
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":1043
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1042
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":1044
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1044, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":1045
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":1046
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1045
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
*/
  }

  /* "utils.pxd":1047
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c2):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 2)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1047, __pyx_L1_error)
  __pyx_v_c2 = __pyx_t_3;

  /* "utils.pxd":1048
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c2));
  if (__pyx_t_1) {

    /* "utils.pxd":1049
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1048
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c2 = str_read(token, pos + 2)
 *     if not is_ascii_digit(c2):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1054
 *     cdef int out = (
 *         (ord(c0) - 48) * 100 +
 *         (ord(c1) - 48) * 10  +             # <<<<<<<<<<<<<<
 *         (ord(c2) - 48)
 *     )
*/
  __pyx_v_out = ((((__Pyx_long_cast(__pyx_v_c0) - 48) * 0x64) + ((__Pyx_long_cast(__pyx_v_c1) - 48) * 10)) + (__Pyx_long_cast(__pyx_v_c2) - 48));

  /* "utils.pxd":1057
 *         (ord(c2) - 48)
 *     )
 *     return out if 1 <= out <= 366 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isohour(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (1 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 0x16E);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":1016
 *     return out if 1 <= out <= 7 else -1
 * 
 * cdef inline int parse_isodoy(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format day-of-year component (DDD) from a string,
 *     returns `-1` for invalid ISO day of the year `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isodoy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1059
 *     return out if 1 <= out <= 366 else -1
 * 
 * cdef inline int parse_isohour(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format hour (HH) component from a string,
 *     returns `-1` for invalid ISO hours `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isohour(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isohour *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1076
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1077
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1076
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1078
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1079
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1078
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  }

  /* "utils.pxd":1080
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1081
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1080
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1084
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1084, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":1085
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":1086
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1085
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":1087
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1087, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":1088
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":1089
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1088
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1093
 *     # Convert to integer
 *     cdef int out = (
 *         (ord(c0) - 48) * 10 +             # <<<<<<<<<<<<<<
 *         (ord(c1) - 48)
 *     )
*/
  __pyx_v_out = (((__Pyx_long_cast(__pyx_v_c0) - 48) * 10) + (__Pyx_long_cast(__pyx_v_c1) - 48));

  /* "utils.pxd":1096
 *         (ord(c1) - 48)
 *     )
 *     return out if 0 <= out <= 23 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isominute(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (0 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 23);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":1059
 *     return out if 1 <= out <= 366 else -1
 * 
 * cdef inline int parse_isohour(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format hour (HH) component from a string,
 *     returns `-1` for invalid ISO hours `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isohour", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1098
 *     return out if 0 <= out <= 23 else -1
 * 
 * cdef inline int parse_isominute(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format minute (MM) component from a string,
 *     returns `-1` for invalid ISO minutes `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isominute(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isominute *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_UCS4 __pyx_v_c0;
  Py_UCS4 __pyx_v_c1;
  int __pyx_v_out;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1115
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1116
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1115
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1117
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1118
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1117
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
*/
  }

  /* "utils.pxd":1119
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 2);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1120
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1119
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 2:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1123
 * 
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1123, __pyx_L1_error)
  __pyx_v_c0 = __pyx_t_3;

  /* "utils.pxd":1124
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c0));
  if (__pyx_t_1) {

    /* "utils.pxd":1125
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1124
 *     # Parse value
 *     cdef Py_UCS4 c0 = str_read(token, pos)
 *     if not is_ascii_digit(c0):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
*/
  }

  /* "utils.pxd":1126
 *     if not is_ascii_digit(c0):
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)             # <<<<<<<<<<<<<<
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid
*/
  __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, (__pyx_v_pos + 1)); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1126, __pyx_L1_error)
  __pyx_v_c1 = __pyx_t_3;

  /* "utils.pxd":1127
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_c1));
  if (__pyx_t_1) {

    /* "utils.pxd":1128
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Convert to integer
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1127
 *         return -1  # exit: invalid
 *     cdef Py_UCS4 c1 = str_read(token, pos + 1)
 *     if not is_ascii_digit(c1):             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1132
 *     # Convert to integer
 *     cdef int out = (
 *         (ord(c0) - 48) * 10 +             # <<<<<<<<<<<<<<
 *         (ord(c1) - 48)
 *     )
*/
  __pyx_v_out = (((__Pyx_long_cast(__pyx_v_c0) - 48) * 10) + (__Pyx_long_cast(__pyx_v_c1) - 48));

  /* "utils.pxd":1135
 *         (ord(c1) - 48)
 *     )
 *     return out if 0 <= out <= 59 else -1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isosecond(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_1 = (0 <= __pyx_v_out);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_out <= 59);
  }
  if (__pyx_t_1) {
    __pyx_t_4 = __pyx_v_out;
  } else {
    __pyx_t_4 = -1;
  }
  __pyx_r = __pyx_t_4;
  goto __pyx_L0;

  /* "utils.pxd":1098
 *     return out if 0 <= out <= 23 else -1
 * 
 * cdef inline int parse_isominute(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format minute (MM) component from a string,
 *     returns `-1` for invalid ISO minutes `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isominute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1137
 *     return out if 0 <= out <= 59 else -1
 * 
 * cdef inline int parse_isosecond(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format second (SS) component from a string,
 *     returns `-1` for invalid ISO seconds `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isosecond(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isosecond *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_r;
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_parse_isominute __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1153
 *     :returns `<'int'>`: The parsed ISO second `[0..59]`, or `-1` if invalid.
 *     """
 *     return parse_isominute(token, pos, token_len)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int parse_isofraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.token_len = __pyx_v_token_len;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token, __pyx_v_pos, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(5, 1153, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":1137
 *     return out if 0 <= out <= 59 else -1
 * 
 * cdef inline int parse_isosecond(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO format second (SS) component from a string,
 *     returns `-1` for invalid ISO seconds `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isosecond", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1155
 *     return parse_isominute(token, pos, token_len)
 * 
 * cdef inline int parse_isofraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO fractional time component (fractions of a second) from a string,
 *     returns `-1` for invalid ISO fraction `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_parse_isofraction(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_isofraction *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_f_size;
  int __pyx_v_out;
  Py_UCS4 __pyx_v_ch;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1172
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1173
 *     # Validate
 *     if token is None:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1172
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1174
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1175
 *         return -1  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 1:
 *         return -1  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1174
 *     if token is None:
 *         return -1  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  }

  /* "utils.pxd":1176
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1177
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
 *         return -1  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":1176
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         return -1  # exit: invalid
 * 
*/
  }

  /* "utils.pxd":1181
 *     # Parse value
 *     cdef:
 *         int f_size = 0             # <<<<<<<<<<<<<<
 *         int out = 0
 *         Py_UCS4 ch
*/
  __pyx_v_f_size = 0;

  /* "utils.pxd":1182
 *     cdef:
 *         int f_size = 0
 *         int out = 0             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 *     while pos < token_len and f_size < 6:
*/
  __pyx_v_out = 0;

  /* "utils.pxd":1184
 *         int out = 0
 *         Py_UCS4 ch
 *     while pos < token_len and f_size < 6:             # <<<<<<<<<<<<<<
 *         ch = str_read(token, pos)
 *         if not is_ascii_digit(ch):
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_pos < __pyx_v_token_len);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_f_size < 6);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L10_bool_binop_done:;
    if (!__pyx_t_1) break;

    /* "utils.pxd":1185
 *         Py_UCS4 ch
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)             # <<<<<<<<<<<<<<
 *         if not is_ascii_digit(ch):
 *             break
*/
    __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1185, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_3;

    /* "utils.pxd":1186
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)
 *         if not is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             break
 *         out = out * 10 + (ord(ch) - 48)
*/
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch));
    if (__pyx_t_1) {

      /* "utils.pxd":1187
 *         ch = str_read(token, pos)
 *         if not is_ascii_digit(ch):
 *             break             # <<<<<<<<<<<<<<
 *         out = out * 10 + (ord(ch) - 48)
 *         pos += 1; f_size += 1
*/
      goto __pyx_L9_break;

      /* "utils.pxd":1186
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)
 *         if not is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             break
 *         out = out * 10 + (ord(ch) - 48)
*/
    }

    /* "utils.pxd":1188
 *         if not is_ascii_digit(ch):
 *             break
 *         out = out * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *         pos += 1; f_size += 1
 * 
*/
    __pyx_v_out = ((__pyx_v_out * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

    /* "utils.pxd":1189
 *             break
 *         out = out * 10 + (ord(ch) - 48)
 *         pos += 1; f_size += 1             # <<<<<<<<<<<<<<
 * 
 *     # Compensate missing digits (pad with zeros)
*/
    __pyx_v_pos = (__pyx_v_pos + 1);
    __pyx_v_f_size = (__pyx_v_f_size + 1);
  }
  __pyx_L9_break:;

  /* "utils.pxd":1192
 * 
 *     # Compensate missing digits (pad with zeros)
 *     return scale_fraction_to_us(out, f_size)             # <<<<<<<<<<<<<<
 * 
 * cdef inline sf parse_second_and_fraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except *:
*/
  __pyx_r = __pyx_f_7cytimes_5utils_scale_fraction_to_us(__pyx_v_out, __pyx_v_f_size);
  goto __pyx_L0;

  /* "utils.pxd":1155
 *     return parse_isominute(token, pos, token_len)
 * 
 * cdef inline int parse_isofraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except -2:             # <<<<<<<<<<<<<<
 *     """Parse an ISO fractional time component (fractions of a second) from a string,
 *     returns `-1` for invalid ISO fraction `<'int'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_isofraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1194
 *     return scale_fraction_to_us(out, f_size)
 * 
 * cdef inline sf parse_second_and_fraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Parse a `seconds` token with an optional fractional part into (second, microsecond) `<'struct:sf'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_sf __pyx_f_7cytimes_5utils_parse_second_and_fraction(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_5utils_parse_second_and_fraction *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  __pyx_t_7cytimes_5utils_sf __pyx_v_out;
  unsigned PY_LONG_LONG __pyx_v_i_part;
  unsigned PY_LONG_LONG __pyx_v_f_part;
  int __pyx_v_f_size;
  int __pyx_v_has_dot;
  int __pyx_v_has_digit;
  Py_UCS4 __pyx_v_ch;
  __pyx_t_7cytimes_5utils_sf __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  Py_UCS4 __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1225
 *     # Validate
 *     cdef sf out
 *     if token is None:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":1226
 *     cdef sf out
 *     if token is None:
 *         out.second = out.microsecond = -1             # <<<<<<<<<<<<<<
 *         return out  # exit: invalid
 *     if token_len <= 0:
*/
    __pyx_v_out.second = -1;
    __pyx_v_out.microsecond = -1;

    /* "utils.pxd":1227
 *     if token is None:
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":1225
 *     # Validate
 *     cdef sf out
 *     if token is None:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
*/
  }

  /* "utils.pxd":1228
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1229
 *         return out  # exit: invalid
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if pos < 0 or token_len - pos < 1:
 *         out.second = out.microsecond = -1
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1228
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
*/
  }

  /* "utils.pxd":1230
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
*/
  __pyx_t_2 = (__pyx_v_pos < 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_token_len - __pyx_v_pos) < 1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1231
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:
 *         out.second = out.microsecond = -1             # <<<<<<<<<<<<<<
 *         return out  # exit: invalid
 * 
*/
    __pyx_v_out.second = -1;
    __pyx_v_out.microsecond = -1;

    /* "utils.pxd":1232
 *     if pos < 0 or token_len - pos < 1:
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     # Parse value
*/
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":1230
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     if pos < 0 or token_len - pos < 1:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *         return out  # exit: invalid
*/
  }

  /* "utils.pxd":1236
 *     # Parse value
 *     cdef:
 *         unsigned long long i_part = 0             # <<<<<<<<<<<<<<
 *         unsigned long long f_part = 0
 *         int f_size = 0
*/
  __pyx_v_i_part = 0;

  /* "utils.pxd":1237
 *     cdef:
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0             # <<<<<<<<<<<<<<
 *         int f_size = 0
 *         bint has_dot = False
*/
  __pyx_v_f_part = 0;

  /* "utils.pxd":1238
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0
 *         int f_size = 0             # <<<<<<<<<<<<<<
 *         bint has_dot = False
 *         bint has_digit = False
*/
  __pyx_v_f_size = 0;

  /* "utils.pxd":1239
 *         unsigned long long f_part = 0
 *         int f_size = 0
 *         bint has_dot = False             # <<<<<<<<<<<<<<
 *         bint has_digit = False
 *         Py_UCS4 ch
*/
  __pyx_v_has_dot = 0;

  /* "utils.pxd":1240
 *         int f_size = 0
 *         bint has_dot = False
 *         bint has_digit = False             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 * 
*/
  __pyx_v_has_digit = 0;

  /* "utils.pxd":1243
 *         Py_UCS4 ch
 * 
 *     while pos < token_len and f_size < 6:             # <<<<<<<<<<<<<<
 *         ch = str_read(token, pos)
 *         if is_ascii_digit(ch):
*/
  while (1) {
    __pyx_t_2 = (__pyx_v_pos < __pyx_v_token_len);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_2 = (__pyx_v_f_size < 6);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L10_bool_binop_done:;
    if (!__pyx_t_1) break;

    /* "utils.pxd":1244
 * 
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)             # <<<<<<<<<<<<<<
 *         if is_ascii_digit(ch):
 *             if not has_dot:
*/
    __pyx_t_3 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_pos); if (unlikely(__pyx_t_3 == ((Py_UCS4)-1))) __PYX_ERR(5, 1244, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_3;

    /* "utils.pxd":1245
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
    if (__pyx_t_1) {

      /* "utils.pxd":1246
 *         ch = str_read(token, pos)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
      __pyx_t_1 = (!__pyx_v_has_dot);
      if (__pyx_t_1) {

        /* "utils.pxd":1247
 *         if is_ascii_digit(ch):
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
*/
        __pyx_v_i_part = ((__pyx_v_i_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1246
 *         ch = str_read(token, pos)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
        goto __pyx_L13;
      }

      /* "utils.pxd":1249
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *                 f_size += 1
 *             has_digit = True
*/
      /*else*/ {
        __pyx_v_f_part = ((__pyx_v_f_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1250
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_size += 1             # <<<<<<<<<<<<<<
 *             has_digit = True
 *             pos += 1
*/
        __pyx_v_f_size = (__pyx_v_f_size + 1);
      }
      __pyx_L13:;

      /* "utils.pxd":1251
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_size += 1
 *             has_digit = True             # <<<<<<<<<<<<<<
 *             pos += 1
 *         elif ch == 46:  # '.'
*/
      __pyx_v_has_digit = 1;

      /* "utils.pxd":1252
 *                 f_size += 1
 *             has_digit = True
 *             pos += 1             # <<<<<<<<<<<<<<
 *         elif ch == 46:  # '.'
 *             if has_dot:
*/
      __pyx_v_pos = (__pyx_v_pos + 1);

      /* "utils.pxd":1245
 *     while pos < token_len and f_size < 6:
 *         ch = str_read(token, pos)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
      goto __pyx_L12;
    }

    /* "utils.pxd":1253
 *             has_digit = True
 *             pos += 1
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 break
*/
    __pyx_t_1 = (__pyx_v_ch == 46);
    if (__pyx_t_1) {

      /* "utils.pxd":1254
 *             pos += 1
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 break
 *             has_dot = True
*/
      if (__pyx_v_has_dot) {

        /* "utils.pxd":1255
 *         elif ch == 46:  # '.'
 *             if has_dot:
 *                 break             # <<<<<<<<<<<<<<
 *             has_dot = True
 *             pos += 1
*/
        goto __pyx_L9_break;

        /* "utils.pxd":1254
 *             pos += 1
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 break
 *             has_dot = True
*/
      }

      /* "utils.pxd":1256
 *             if has_dot:
 *                 break
 *             has_dot = True             # <<<<<<<<<<<<<<
 *             pos += 1
 *         else:
*/
      __pyx_v_has_dot = 1;

      /* "utils.pxd":1257
 *                 break
 *             has_dot = True
 *             pos += 1             # <<<<<<<<<<<<<<
 *         else:
 *             break
*/
      __pyx_v_pos = (__pyx_v_pos + 1);

      /* "utils.pxd":1253
 *             has_digit = True
 *             pos += 1
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 break
*/
      goto __pyx_L12;
    }

    /* "utils.pxd":1259
 *             pos += 1
 *         else:
 *             break             # <<<<<<<<<<<<<<
 * 
 *     # No digits / second out of range: invalid
*/
    /*else*/ {
      goto __pyx_L9_break;
    }
    __pyx_L12:;
  }
  __pyx_L9_break:;

  /* "utils.pxd":1262
 * 
 *     # No digits / second out of range: invalid
 *     if not has_digit or i_part > 59:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *     # Pure integer: second only
*/
  __pyx_t_2 = (!__pyx_v_has_digit);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L16_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_i_part > 59);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L16_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":1263
 *     # No digits / second out of range: invalid
 *     if not has_digit or i_part > 59:
 *         out.second = out.microsecond = -1             # <<<<<<<<<<<<<<
 *     # Pure integer: second only
 *     elif not has_dot:
*/
    __pyx_v_out.second = -1;
    __pyx_v_out.microsecond = -1;

    /* "utils.pxd":1262
 * 
 *     # No digits / second out of range: invalid
 *     if not has_digit or i_part > 59:             # <<<<<<<<<<<<<<
 *         out.second = out.microsecond = -1
 *     # Pure integer: second only
*/
    goto __pyx_L15;
  }

  /* "utils.pxd":1265
 *         out.second = out.microsecond = -1
 *     # Pure integer: second only
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         out.second = i_part
 *         out.microsecond = -1
*/
  __pyx_t_1 = (!__pyx_v_has_dot);
  if (__pyx_t_1) {

    /* "utils.pxd":1266
 *     # Pure integer: second only
 *     elif not has_dot:
 *         out.second = i_part             # <<<<<<<<<<<<<<
 *         out.microsecond = -1
 *     # Float: second & microsecond
*/
    __pyx_v_out.second = __pyx_v_i_part;

    /* "utils.pxd":1267
 *     elif not has_dot:
 *         out.second = i_part
 *         out.microsecond = -1             # <<<<<<<<<<<<<<
 *     # Float: second & microsecond
 *     else:
*/
    __pyx_v_out.microsecond = -1;

    /* "utils.pxd":1265
 *         out.second = out.microsecond = -1
 *     # Pure integer: second only
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         out.second = i_part
 *         out.microsecond = -1
*/
    goto __pyx_L15;
  }

  /* "utils.pxd":1270
 *     # Float: second & microsecond
 *     else:
 *         out.second = i_part             # <<<<<<<<<<<<<<
 *         out.microsecond = scale_fraction_to_us(f_part, f_size)
 *     return out
*/
  /*else*/ {
    __pyx_v_out.second = __pyx_v_i_part;

    /* "utils.pxd":1271
 *     else:
 *         out.second = i_part
 *         out.microsecond = scale_fraction_to_us(f_part, f_size)             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    __pyx_v_out.microsecond = __pyx_f_7cytimes_5utils_scale_fraction_to_us(__pyx_v_f_part, __pyx_v_f_size);
  }
  __pyx_L15:;

  /* "utils.pxd":1272
 *         out.second = i_part
 *         out.microsecond = scale_fraction_to_us(f_part, f_size)
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline int scale_fraction_to_us(int fraction, int fraction_size) noexcept:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1194
 *     return scale_fraction_to_us(out, f_size)
 * 
 * cdef inline sf parse_second_and_fraction(str token, Py_ssize_t pos, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Parse a `seconds` token with an optional fractional part into (second, microsecond) `<'struct:sf'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.parse_second_and_fraction", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1274
 *     return out
 * 
 * cdef inline int scale_fraction_to_us(int fraction, int fraction_size) noexcept:             # <<<<<<<<<<<<<<
 *     """Scale a fractional time component to microseconds based on its size `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_scale_fraction_to_us(int __pyx_v_fraction, int __pyx_v_fraction_size) {
  int __pyx_r;

  /* "utils.pxd":1291
 *         # 123 milliseconds  123000 microseconds
 *     """
 *     if fraction_size == 6:             # <<<<<<<<<<<<<<
 *         return fraction
 *     elif fraction_size == 5:
*/
  switch (__pyx_v_fraction_size) {
    case 6:

    /* "utils.pxd":1292
 *     """
 *     if fraction_size == 6:
 *         return fraction             # <<<<<<<<<<<<<<
 *     elif fraction_size == 5:
 *         return fraction * 10
*/
    __pyx_r = __pyx_v_fraction;
    goto __pyx_L0;

    /* "utils.pxd":1291
 *         # 123 milliseconds  123000 microseconds
 *     """
 *     if fraction_size == 6:             # <<<<<<<<<<<<<<
 *         return fraction
 *     elif fraction_size == 5:
*/
    break;
    case 5:

    /* "utils.pxd":1294
 *         return fraction
 *     elif fraction_size == 5:
 *         return fraction * 10             # <<<<<<<<<<<<<<
 *     elif fraction_size == 4:
 *         return fraction * 100
*/
    __pyx_r = (__pyx_v_fraction * 10);
    goto __pyx_L0;

    /* "utils.pxd":1293
 *     if fraction_size == 6:
 *         return fraction
 *     elif fraction_size == 5:             # <<<<<<<<<<<<<<
 *         return fraction * 10
 *     elif fraction_size == 4:
*/
    break;
    case 4:

    /* "utils.pxd":1296
 *         return fraction * 10
 *     elif fraction_size == 4:
 *         return fraction * 100             # <<<<<<<<<<<<<<
 *     elif fraction_size == 3:
 *         return fraction * 1_000
*/
    __pyx_r = (__pyx_v_fraction * 0x64);
    goto __pyx_L0;

    /* "utils.pxd":1295
 *     elif fraction_size == 5:
 *         return fraction * 10
 *     elif fraction_size == 4:             # <<<<<<<<<<<<<<
 *         return fraction * 100
 *     elif fraction_size == 3:
*/
    break;
    case 3:

    /* "utils.pxd":1298
 *         return fraction * 100
 *     elif fraction_size == 3:
 *         return fraction * 1_000             # <<<<<<<<<<<<<<
 *     elif fraction_size == 2:
 *         return fraction * 10_000
*/
    __pyx_r = (__pyx_v_fraction * 0x3E8);
    goto __pyx_L0;

    /* "utils.pxd":1297
 *     elif fraction_size == 4:
 *         return fraction * 100
 *     elif fraction_size == 3:             # <<<<<<<<<<<<<<
 *         return fraction * 1_000
 *     elif fraction_size == 2:
*/
    break;
    case 2:

    /* "utils.pxd":1300
 *         return fraction * 1_000
 *     elif fraction_size == 2:
 *         return fraction * 10_000             # <<<<<<<<<<<<<<
 *     elif fraction_size == 1:
 *         return fraction * 100_000
*/
    __pyx_r = (__pyx_v_fraction * 0x2710);
    goto __pyx_L0;

    /* "utils.pxd":1299
 *     elif fraction_size == 3:
 *         return fraction * 1_000
 *     elif fraction_size == 2:             # <<<<<<<<<<<<<<
 *         return fraction * 10_000
 *     elif fraction_size == 1:
*/
    break;
    case 1:

    /* "utils.pxd":1302
 *         return fraction * 10_000
 *     elif fraction_size == 1:
 *         return fraction * 100_000             # <<<<<<<<<<<<<<
 *     else:
 *         return -1
*/
    __pyx_r = (__pyx_v_fraction * 0x186A0);
    goto __pyx_L0;

    /* "utils.pxd":1301
 *     elif fraction_size == 2:
 *         return fraction * 10_000
 *     elif fraction_size == 1:             # <<<<<<<<<<<<<<
 *         return fraction * 100_000
 *     else:
*/
    break;
    default:

    /* "utils.pxd":1304
 *         return fraction * 100_000
 *     else:
 *         return -1             # <<<<<<<<<<<<<<
 * 
 * # . slice and convert
*/
    __pyx_r = -1;
    goto __pyx_L0;
    break;
  }

  /* "utils.pxd":1274
 *     return out
 * 
 * cdef inline int scale_fraction_to_us(int fraction, int fraction_size) noexcept:             # <<<<<<<<<<<<<<
 *     """Scale a fractional time component to microseconds based on its size `<'int'>`.
 * 
*/

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

/* "utils.pxd":1307
 * 
 * # . slice and convert
 * cdef inline unsigned long long slice_to_uint(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to an unsigned integer `<'int'>`.
 * 
*/

static CYTHON_INLINE unsigned PY_LONG_LONG __pyx_f_7cytimes_5utils_slice_to_uint(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_size, struct __pyx_opt_args_7cytimes_5utils_slice_to_uint *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_end;
  unsigned PY_LONG_LONG __pyx_v_out;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_ch;
  unsigned PY_LONG_LONG __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8[7];
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  Py_ssize_t __pyx_t_12;
  Py_UCS4 __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("slice_to_uint", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1331
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'token' cannot be None")
 *     if start < 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1332
 *     # Validate
 *     if token is None:
 *         raise ValueError("slice_to_uint: 'token' cannot be None")             # <<<<<<<<<<<<<<
 *     if start < 0:
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_slice_to_uint_token_cannot_be_No};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 1332, __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(5, 1332, __pyx_L1_error)

    /* "utils.pxd":1331
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'token' cannot be None")
 *     if start < 0:
*/
  }

  /* "utils.pxd":1333
 *     if token is None:
 *         raise ValueError("slice_to_uint: 'token' cannot be None")
 *     if start < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
*/
  __pyx_t_1 = (__pyx_v_start < 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1334
 *         raise ValueError("slice_to_uint: 'token' cannot be None")
 *     if start < 0:
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)             # <<<<<<<<<<<<<<
 *     if size <= 0:
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
*/
    __pyx_t_3 = NULL;
    __pyx_t_5 = PyLong_FromSsize_t(__pyx_v_start); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_slice_to_uint_start_must_be_0_in, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1334, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1334, __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(5, 1334, __pyx_L1_error)

    /* "utils.pxd":1333
 *     if token is None:
 *         raise ValueError("slice_to_uint: 'token' cannot be None")
 *     if start < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
*/
  }

  /* "utils.pxd":1335
 *     if start < 0:
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_size <= 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1336
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_t_6 = NULL;
    __pyx_t_3 = PyLong_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_slice_to_uint_size_must_be_0_ins, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1336, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_2)) __PYX_ERR(5, 1336, __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(5, 1336, __pyx_L1_error)

    /* "utils.pxd":1335
 *     if start < 0:
 *         raise ValueError("slice_to_uint: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1337
 *     if size <= 0:
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1338
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1337
 *     if size <= 0:
 *         raise ValueError("slice_to_uint: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
*/
  }

  /* "utils.pxd":1339
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size             # <<<<<<<<<<<<<<
 *     if end > token_len:
 *         raise ValueError("slice_to_uint: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
*/
  __pyx_v_end = (__pyx_v_start + __pyx_v_size);

  /* "utils.pxd":1340
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
 * 
*/
  __pyx_t_1 = (__pyx_v_end > __pyx_v_token_len);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1341
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:
 *         raise ValueError("slice_to_uint: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))             # <<<<<<<<<<<<<<
 * 
 *     # Slice and convert
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_start, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_token_len, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_slice_to_uint_out_of_range_start;
    __pyx_t_8[1] = __pyx_t_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_size;
    __pyx_t_8[3] = __pyx_t_3;
    __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_token_len;
    __pyx_t_8[5] = __pyx_t_7;
    __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 35 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 6 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127);
    if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_2)) __PYX_ERR(5, 1341, __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(5, 1341, __pyx_L1_error)

    /* "utils.pxd":1340
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_uint: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
 * 
*/
  }

  /* "utils.pxd":1345
 *     # Slice and convert
 *     cdef:
 *         unsigned long long out = 0             # <<<<<<<<<<<<<<
 *         Py_ssize_t i
 *         Py_UCS4 ch
*/
  __pyx_v_out = 0;

  /* "utils.pxd":1349
 *         Py_UCS4 ch
 * 
 *     for i in range(start, end):             # <<<<<<<<<<<<<<
 *         ch = str_read(token, i)
 *         if not is_ascii_digit(ch):
*/
  __pyx_t_10 = __pyx_v_end;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = __pyx_v_start; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;

    /* "utils.pxd":1350
 * 
 *     for i in range(start, end):
 *         ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *         if not is_ascii_digit(ch):
 *             raise ValueError(
*/
    __pyx_t_13 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_13 == ((Py_UCS4)-1))) __PYX_ERR(5, 1350, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_13;

    /* "utils.pxd":1351
 *     for i in range(start, end):
 *         ch = str_read(token, i)
 *         if not is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 "Cannot convert '%s' to unsigned integer. Contains invalid character '%s' "
*/
    __pyx_t_1 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch));
    if (unlikely(__pyx_t_1)) {

      /* "utils.pxd":1352
 *         ch = str_read(token, i)
 *         if not is_ascii_digit(ch):
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Cannot convert '%s' to unsigned integer. Contains invalid character '%s' "
 *                 "at position %d." % (token[start: end], str_chr(ch), i)
*/
      __pyx_t_9 = NULL;

      /* "utils.pxd":1354
 *             raise ValueError(
 *                 "Cannot convert '%s' to unsigned integer. Contains invalid character '%s' "
 *                 "at position %d." % (token[start: end], str_chr(ch), i)             # <<<<<<<<<<<<<<
 *             )
 *         out = out * 10 + (ord(ch) - 48)
*/
      if (unlikely(__pyx_v_token == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(5, 1354, __pyx_L1_error)
      }
      __pyx_t_5 = __Pyx_PyUnicode_Substring(__pyx_v_token, __pyx_v_start, __pyx_v_end); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1354, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert;
      __pyx_t_8[1] = __pyx_t_5;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_to_unsigned_integer_Contains_in;
      __pyx_t_8[3] = __pyx_t_3;
      __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_at_position;
      __pyx_t_8[5] = __pyx_t_7;
      __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u__2;

      /* "utils.pxd":1353
 *         if not is_ascii_digit(ch):
 *             raise ValueError(
 *                 "Cannot convert '%s' to unsigned integer. Contains invalid character '%s' "             # <<<<<<<<<<<<<<
 *                 "at position %d." % (token[start: end], str_chr(ch), i)
 *             )
*/
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 51 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
      if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1353, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_6};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1352, __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(5, 1352, __pyx_L1_error)

      /* "utils.pxd":1351
 *     for i in range(start, end):
 *         ch = str_read(token, i)
 *         if not is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 "Cannot convert '%s' to unsigned integer. Contains invalid character '%s' "
*/
    }

    /* "utils.pxd":1356
 *                 "at position %d." % (token[start: end], str_chr(ch), i)
 *             )
 *         out = out * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    __pyx_v_out = ((__pyx_v_out * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));
  }

  /* "utils.pxd":1357
 *             )
 *         out = out * 10 + (ord(ch) - 48)
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline double slice_to_ufloat(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except *:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1307
 * 
 * # . slice and convert
 * cdef inline unsigned long long slice_to_uint(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to an unsigned integer `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.slice_to_uint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1359
 *     return out
 * 
 * cdef inline double slice_to_ufloat(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to a non-negative double-precision float `<'float'>`.
 * 
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_slice_to_ufloat(PyObject *__pyx_v_token, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_size, struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  Py_ssize_t __pyx_v_end;
  unsigned PY_LONG_LONG __pyx_v_i_part;
  unsigned PY_LONG_LONG __pyx_v_f_part;
  double __pyx_v_f_scale;
  int __pyx_v_has_dot;
  int __pyx_v_has_digit;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_ch;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8[7];
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  Py_ssize_t __pyx_t_12;
  Py_UCS4 __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("slice_to_ufloat", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "utils.pxd":1383
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")
 *     if start < 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1384
 *     # Validate
 *     if token is None:
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")             # <<<<<<<<<<<<<<
 *     if start < 0:
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_slice_to_ufloat_token_cannot_be};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 1384, __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(5, 1384, __pyx_L1_error)

    /* "utils.pxd":1383
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")
 *     if start < 0:
*/
  }

  /* "utils.pxd":1385
 *     if token is None:
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")
 *     if start < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
*/
  __pyx_t_1 = (__pyx_v_start < 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1386
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")
 *     if start < 0:
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)             # <<<<<<<<<<<<<<
 *     if size <= 0:
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
*/
    __pyx_t_3 = NULL;
    __pyx_t_5 = PyLong_FromSsize_t(__pyx_v_start); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_slice_to_ufloat_start_must_be_0, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_6};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1386, __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(5, 1386, __pyx_L1_error)

    /* "utils.pxd":1385
 *     if token is None:
 *         raise ValueError("slice_to_ufloat: 'token' cannot be None")
 *     if start < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
*/
  }

  /* "utils.pxd":1387
 *     if start < 0:
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_size <= 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1388
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         token_len = str_len(token)
*/
    __pyx_t_6 = NULL;
    __pyx_t_3 = PyLong_FromSsize_t(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_slice_to_ufloat_size_must_be_0_i, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1388, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_2)) __PYX_ERR(5, 1388, __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(5, 1388, __pyx_L1_error)

    /* "utils.pxd":1387
 *     if start < 0:
 *         raise ValueError("slice_to_ufloat: 'start' must be >= 0, instead got %d" % start)
 *     if size <= 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
*/
  }

  /* "utils.pxd":1389
 *     if size <= 0:
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1390
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:
 *         token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "utils.pxd":1389
 *     if size <= 0:
 *         raise ValueError("slice_to_ufloat: 'size' must be > 0, instead got %d" % size)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
*/
  }

  /* "utils.pxd":1391
 *     if token_len <= 0:
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size             # <<<<<<<<<<<<<<
 *     if end > token_len:
 *         raise ValueError("slice_to_ufloat: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
*/
  __pyx_v_end = (__pyx_v_start + __pyx_v_size);

  /* "utils.pxd":1392
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
 * 
*/
  __pyx_t_1 = (__pyx_v_end > __pyx_v_token_len);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1393
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:
 *         raise ValueError("slice_to_ufloat: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))             # <<<<<<<<<<<<<<
 * 
 *     # Slice and convert
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_start, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_token_len, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_slice_to_ufloat_out_of_range_sta;
    __pyx_t_8[1] = __pyx_t_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_size;
    __pyx_t_8[3] = __pyx_t_3;
    __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_token_len;
    __pyx_t_8[5] = __pyx_t_7;
    __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u_;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 37 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 6 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 11 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127);
    if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_2)) __PYX_ERR(5, 1393, __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(5, 1393, __pyx_L1_error)

    /* "utils.pxd":1392
 *         token_len = str_len(token)
 *     cdef Py_ssize_t end = start + size
 *     if end > token_len:             # <<<<<<<<<<<<<<
 *         raise ValueError("slice_to_ufloat: out of range (start=%d size=%d token_len=%d)" % (start, size, token_len))
 * 
*/
  }

  /* "utils.pxd":1397
 *     # Slice and convert
 *     cdef:
 *         unsigned long long i_part = 0             # <<<<<<<<<<<<<<
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0
*/
  __pyx_v_i_part = 0;

  /* "utils.pxd":1398
 *     cdef:
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0             # <<<<<<<<<<<<<<
 *         double f_scale = 1.0
 *         bint has_dot = False
*/
  __pyx_v_f_part = 0;

  /* "utils.pxd":1399
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0             # <<<<<<<<<<<<<<
 *         bint has_dot = False
 *         bint has_digit = False
*/
  __pyx_v_f_scale = 1.0;

  /* "utils.pxd":1400
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0
 *         bint has_dot = False             # <<<<<<<<<<<<<<
 *         bint has_digit = False
 *         Py_ssize_t i
*/
  __pyx_v_has_dot = 0;

  /* "utils.pxd":1401
 *         double f_scale = 1.0
 *         bint has_dot = False
 *         bint has_digit = False             # <<<<<<<<<<<<<<
 *         Py_ssize_t i
 *         Py_UCS4 ch
*/
  __pyx_v_has_digit = 0;

  /* "utils.pxd":1405
 *         Py_UCS4 ch
 * 
 *     for i in range(start, end):             # <<<<<<<<<<<<<<
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
*/
  __pyx_t_10 = __pyx_v_end;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = __pyx_v_start; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;

    /* "utils.pxd":1406
 * 
 *     for i in range(start, end):
 *         ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *         if is_ascii_digit(ch):
 *             if not has_dot:
*/
    __pyx_t_13 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_13 == ((Py_UCS4)-1))) __PYX_ERR(5, 1406, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_13;

    /* "utils.pxd":1407
 *     for i in range(start, end):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
    if (__pyx_t_1) {

      /* "utils.pxd":1408
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
      __pyx_t_1 = (!__pyx_v_has_dot);
      if (__pyx_t_1) {

        /* "utils.pxd":1409
 *         if is_ascii_digit(ch):
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
*/
        __pyx_v_i_part = ((__pyx_v_i_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1408
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
        goto __pyx_L11;
      }

      /* "utils.pxd":1411
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *                 f_scale *= 0.1
 *             has_digit = True
*/
      /*else*/ {
        __pyx_v_f_part = ((__pyx_v_f_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1412
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_scale *= 0.1             # <<<<<<<<<<<<<<
 *             has_digit = True
 *         elif ch == 46:  # '.'
*/
        __pyx_v_f_scale = (__pyx_v_f_scale * 0.1);
      }
      __pyx_L11:;

      /* "utils.pxd":1413
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_scale *= 0.1
 *             has_digit = True             # <<<<<<<<<<<<<<
 *         elif ch == 46:  # '.'
 *             if has_dot:
*/
      __pyx_v_has_digit = 1;

      /* "utils.pxd":1407
 *     for i in range(start, end):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
      goto __pyx_L10;
    }

    /* "utils.pxd":1414
 *                 f_scale *= 0.1
 *             has_digit = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 46);
    if (likely(__pyx_t_1)) {

      /* "utils.pxd":1415
 *             has_digit = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot convert '%s' to non-negative float: "
*/
      if (unlikely(__pyx_v_has_dot)) {

        /* "utils.pxd":1416
 *         elif ch == 46:  # '.'
 *             if has_dot:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot convert '%s' to non-negative float: "
 *                     "contains more than one decimal point." % (token[start: end])
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1418
 *                 raise ValueError(
 *                     "Cannot convert '%s' to non-negative float: "
 *                     "contains more than one decimal point." % (token[start: end])             # <<<<<<<<<<<<<<
 *                 )
 *             has_dot = True
*/
        if (unlikely(__pyx_v_token == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
          __PYX_ERR(5, 1418, __pyx_L1_error)
        }
        __pyx_t_5 = __Pyx_PyUnicode_Substring(__pyx_v_token, __pyx_v_start, __pyx_v_end); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_7 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_convert_s_to_non_negative, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_7};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1416, __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(5, 1416, __pyx_L1_error)

        /* "utils.pxd":1415
 *             has_digit = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot convert '%s' to non-negative float: "
*/
      }

      /* "utils.pxd":1420
 *                     "contains more than one decimal point." % (token[start: end])
 *                 )
 *             has_dot = True             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError(
*/
      __pyx_v_has_dot = 1;

      /* "utils.pxd":1414
 *                 f_scale *= 0.1
 *             has_digit = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 raise ValueError(
*/
      goto __pyx_L10;
    }

    /* "utils.pxd":1422
 *             has_dot = True
 *         else:
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Cannot convert '%s' to non-negative float: contains invalid character '%s' "
 *                 "at position %d." % (token[start: end], str_chr(ch), i)
*/
    /*else*/ {
      __pyx_t_7 = NULL;

      /* "utils.pxd":1424
 *             raise ValueError(
 *                 "Cannot convert '%s' to non-negative float: contains invalid character '%s' "
 *                 "at position %d." % (token[start: end], str_chr(ch), i)             # <<<<<<<<<<<<<<
 *             )
 * 
*/
      if (unlikely(__pyx_v_token == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(5, 1424, __pyx_L1_error)
      }
      __pyx_t_9 = __Pyx_PyUnicode_Substring(__pyx_v_token, __pyx_v_start, __pyx_v_end); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_5 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1424, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert;
      __pyx_t_8[1] = __pyx_t_9;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_to_non_negative_float_contains;
      __pyx_t_8[3] = __pyx_t_3;
      __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_at_position;
      __pyx_t_8[5] = __pyx_t_5;
      __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u__2;

      /* "utils.pxd":1423
 *         else:
 *             raise ValueError(
 *                 "Cannot convert '%s' to non-negative float: contains invalid character '%s' "             # <<<<<<<<<<<<<<
 *                 "at position %d." % (token[start: end], str_chr(ch), i)
 *             )
*/
      __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 53 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
      if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 1423, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1422, __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(5, 1422, __pyx_L1_error)
    }
    __pyx_L10:;
  }

  /* "utils.pxd":1427
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert '%s' to non-negative float: "
*/
  __pyx_t_1 = (!__pyx_v_has_digit);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1428
 * 
 *     if not has_digit:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot convert '%s' to non-negative float: "
 *             "no digits found." % (token[start: end])
*/
    __pyx_t_6 = NULL;

    /* "utils.pxd":1430
 *         raise ValueError(
 *             "Cannot convert '%s' to non-negative float: "
 *             "no digits found." % (token[start: end])             # <<<<<<<<<<<<<<
 *         )
 *     elif not has_dot:
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(5, 1430, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_PyUnicode_Substring(__pyx_v_token, __pyx_v_start, __pyx_v_end); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_convert_s_to_non_negative_2, __pyx_t_7); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__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_2)) __PYX_ERR(5, 1428, __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(5, 1428, __pyx_L1_error)

    /* "utils.pxd":1427
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert '%s' to non-negative float: "
*/
  }

  /* "utils.pxd":1432
 *             "no digits found." % (token[start: end])
 *         )
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         return (<double> i_part)
 *     else:
*/
  __pyx_t_1 = (!__pyx_v_has_dot);
  if (__pyx_t_1) {

    /* "utils.pxd":1433
 *         )
 *     elif not has_dot:
 *         return (<double> i_part)             # <<<<<<<<<<<<<<
 *     else:
 *         return (<double> i_part) + (<double> f_part) * f_scale
*/
    __pyx_r = ((double)__pyx_v_i_part);
    goto __pyx_L0;

    /* "utils.pxd":1432
 *             "no digits found." % (token[start: end])
 *         )
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         return (<double> i_part)
 *     else:
*/
  }

  /* "utils.pxd":1435
 *         return (<double> i_part)
 *     else:
 *         return (<double> i_part) + (<double> f_part) * f_scale             # <<<<<<<<<<<<<<
 * 
 * # . parse and convert
*/
  /*else*/ {
    __pyx_r = (((double)__pyx_v_i_part) + (((double)__pyx_v_f_part) * __pyx_v_f_scale));
    goto __pyx_L0;
  }

  /* "utils.pxd":1359
 *     return out
 * 
 * cdef inline double slice_to_ufloat(str token, Py_ssize_t start, Py_ssize_t size, Py_ssize_t token_len=-1) except *:             # <<<<<<<<<<<<<<
 *     """Slice a substring from a string and convert to a non-negative double-precision float `<'float'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.slice_to_ufloat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1438
 * 
 * # . parse and convert
 * cpdef inline long long parse_to_int(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `long long` `<'int'>`.
 * 
*/

static PyObject *__pyx_pw_7cytimes_5utils_1parse_to_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 CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_parse_to_int(PyObject *__pyx_v_token, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_token_len;
  PY_LONG_LONG __pyx_v_out;
  int __pyx_v_has_digit;
  int __pyx_v_has_pos;
  int __pyx_v_neg;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_ch;
  PY_LONG_LONG __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12[7];
  PyObject *__pyx_t_13 = NULL;
  PY_LONG_LONG __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_to_int", 0);

  /* "utils.pxd":1459
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("parse_to_int: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1460
 *     # Validate
 *     if token is None:
 *         raise ValueError("parse_to_int: 'token' cannot be None")             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_parse_to_int_token_cannot_be_Non};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 1460, __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(5, 1460, __pyx_L1_error)

    /* "utils.pxd":1459
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("parse_to_int: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
*/
  }

  /* "utils.pxd":1461
 *     if token is None:
 *         raise ValueError("parse_to_int: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         return 0  # empty string  0
*/
  __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

  /* "utils.pxd":1462
 *         raise ValueError("parse_to_int: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         return 0  # empty string  0
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1463
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:
 *         return 0  # empty string  0             # <<<<<<<<<<<<<<
 * 
 *     # Slice and convert
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":1462
 *         raise ValueError("parse_to_int: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         return 0  # empty string  0
 * 
*/
  }

  /* "utils.pxd":1467
 *     # Slice and convert
 *     cdef:
 *         long long out = 0             # <<<<<<<<<<<<<<
 *         bint has_digit = False
 *         bint has_pos = False
*/
  __pyx_v_out = 0;

  /* "utils.pxd":1468
 *     cdef:
 *         long long out = 0
 *         bint has_digit = False             # <<<<<<<<<<<<<<
 *         bint has_pos = False
 *         bint neg = False
*/
  __pyx_v_has_digit = 0;

  /* "utils.pxd":1469
 *         long long out = 0
 *         bint has_digit = False
 *         bint has_pos = False             # <<<<<<<<<<<<<<
 *         bint neg = False
 *         Py_ssize_t i
*/
  __pyx_v_has_pos = 0;

  /* "utils.pxd":1470
 *         bint has_digit = False
 *         bint has_pos = False
 *         bint neg = False             # <<<<<<<<<<<<<<
 *         Py_ssize_t i
 *         Py_UCS4 ch
*/
  __pyx_v_neg = 0;

  /* "utils.pxd":1474
 *         Py_UCS4 ch
 * 
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
*/
  __pyx_t_5 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":1475
 * 
 *     for i in range(token_len):
 *         ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *         if is_ascii_digit(ch):
 *             out = out * 10 + (ord(ch) - 48)
*/
    __pyx_t_8 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_8 == ((Py_UCS4)-1))) __PYX_ERR(5, 1475, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_8;

    /* "utils.pxd":1476
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             out = out * 10 + (ord(ch) - 48)
 *             has_digit = True
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
    if (__pyx_t_1) {

      /* "utils.pxd":1477
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             out = out * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *             has_digit = True
 *         elif ch == 45:  # '-'
*/
      __pyx_v_out = ((__pyx_v_out * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

      /* "utils.pxd":1478
 *         if is_ascii_digit(ch):
 *             out = out * 10 + (ord(ch) - 48)
 *             has_digit = True             # <<<<<<<<<<<<<<
 *         elif ch == 45:  # '-'
 *             if has_digit:
*/
      __pyx_v_has_digit = 1;

      /* "utils.pxd":1476
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             out = out * 10 + (ord(ch) - 48)
 *             has_digit = True
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1479
 *             out = out * 10 + (ord(ch) - 48)
 *             has_digit = True
 *         elif ch == 45:  # '-'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 45);
    if (__pyx_t_1) {

      /* "utils.pxd":1480
 *             has_digit = True
 *         elif ch == 45:  # '-'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_has_digit)) {

        /* "utils.pxd":1481
 *         elif ch == 45:  # '-'
 *             if has_digit:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "negative sign found after digits." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1483
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "negative sign found after digits." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if neg:
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_negati, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1483, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1481, __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(5, 1481, __pyx_L1_error)

        /* "utils.pxd":1480
 *             has_digit = True
 *         elif ch == 45:  # '-'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1485
 *                     "negative sign found after digits." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_neg)) {

        /* "utils.pxd":1486
 *                 )
 *             if neg:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "contains more than one negative sign." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1488
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "contains more than one negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_pos:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_contai, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1488, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1486, __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(5, 1486, __pyx_L1_error)

        /* "utils.pxd":1485
 *                     "negative sign found after digits." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1490
 *                     "contains more than one negative sign." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_has_pos)) {

        /* "utils.pxd":1491
 *                 )
 *             if has_pos:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "contains mixed positive and negative sign." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1493
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "contains mixed positive and negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             neg = True
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_contai_2, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1493, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1491, __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(5, 1491, __pyx_L1_error)

        /* "utils.pxd":1490
 *                     "contains more than one negative sign." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1495
 *                     "contains mixed positive and negative sign." % token
 *                 )
 *             neg = True             # <<<<<<<<<<<<<<
 *         elif ch == 43:  # '+'
 *             if has_digit:
*/
      __pyx_v_neg = 1;

      /* "utils.pxd":1479
 *             out = out * 10 + (ord(ch) - 48)
 *             has_digit = True
 *         elif ch == 45:  # '-'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1496
 *                 )
 *             neg = True
 *         elif ch == 43:  # '+'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 43);
    if (__pyx_t_1) {

      /* "utils.pxd":1497
 *             neg = True
 *         elif ch == 43:  # '+'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_has_digit)) {

        /* "utils.pxd":1498
 *         elif ch == 43:  # '+'
 *             if has_digit:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "positive sign found after digits." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1500
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "positive sign found after digits." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_pos:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_positi, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1500, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1498, __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(5, 1498, __pyx_L1_error)

        /* "utils.pxd":1497
 *             neg = True
 *         elif ch == 43:  # '+'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1502
 *                     "positive sign found after digits." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_has_pos)) {

        /* "utils.pxd":1503
 *                 )
 *             if has_pos:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "contains more than one positive sign." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1505
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "contains more than one positive sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if neg:
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_contai_3, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1505, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1503, __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(5, 1503, __pyx_L1_error)

        /* "utils.pxd":1502
 *                     "positive sign found after digits." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1507
 *                     "contains more than one positive sign." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      if (unlikely(__pyx_v_neg)) {

        /* "utils.pxd":1508
 *                 )
 *             if neg:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to integer: "
 *                     "contains mixed positive and negative sign." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1510
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
 *                     "contains mixed positive and negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             has_pos = True
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_contai_2, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1510, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1508, __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(5, 1508, __pyx_L1_error)

        /* "utils.pxd":1507
 *                     "contains more than one positive sign." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to integer: "
*/
      }

      /* "utils.pxd":1512
 *                     "contains mixed positive and negative sign." % token
 *                 )
 *             has_pos = True             # <<<<<<<<<<<<<<
 *         elif not has_digit:
 *             continue
*/
      __pyx_v_has_pos = 1;

      /* "utils.pxd":1496
 *                 )
 *             neg = True
 *         elif ch == 43:  # '+'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1513
 *                 )
 *             has_pos = True
 *         elif not has_digit:             # <<<<<<<<<<<<<<
 *             continue
 *         else:
*/
    __pyx_t_1 = (!__pyx_v_has_digit);
    if (likely(__pyx_t_1)) {

      /* "utils.pxd":1514
 *             has_pos = True
 *         elif not has_digit:
 *             continue             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError(
*/
      goto __pyx_L5_continue;

      /* "utils.pxd":1513
 *                 )
 *             has_pos = True
 *         elif not has_digit:             # <<<<<<<<<<<<<<
 *             continue
 *         else:
*/
    }

    /* "utils.pxd":1516
 *             continue
 *         else:
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Cannot parse '%s' to integer. Contains invalid character '%s' "
 *                 "at position %d." % (token, str_chr(ch), i)
*/
    /*else*/ {
      __pyx_t_3 = NULL;

      /* "utils.pxd":1518
 *             raise ValueError(
 *                 "Cannot parse '%s' to integer. Contains invalid character '%s' "
 *                 "at position %d." % (token, str_chr(ch), i)             # <<<<<<<<<<<<<<
 *             )
 * 
*/
      __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 1518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 1518, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_parse;
      __pyx_t_12[1] = __pyx_t_9;
      __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_to_integer_Contains_invalid_cha;
      __pyx_t_12[3] = __pyx_t_11;
      __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u_at_position;
      __pyx_t_12[5] = __pyx_t_10;
      __pyx_t_12[6] = __pyx_mstate_global->__pyx_kp_u__2;

      /* "utils.pxd":1517
 *         else:
 *             raise ValueError(
 *                 "Cannot parse '%s' to integer. Contains invalid character '%s' "             # <<<<<<<<<<<<<<
 *                 "at position %d." % (token, str_chr(ch), i)
 *             )
*/
      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 7, 14 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 42 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
      if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 1517, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_13};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1516, __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(5, 1516, __pyx_L1_error)
    }
    __pyx_L7:;
    __pyx_L5_continue:;
  }

  /* "utils.pxd":1521
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot parse '%s' to integer: no digits found." % token
*/
  __pyx_t_1 = (!__pyx_v_has_digit);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1522
 * 
 *     if not has_digit:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot parse '%s' to integer: no digits found." % token
 *         )
*/
    __pyx_t_13 = NULL;

    /* "utils.pxd":1523
 *     if not has_digit:
 *         raise ValueError(
 *             "Cannot parse '%s' to integer: no digits found." % token             # <<<<<<<<<<<<<<
 *         )
 *     return -out if neg else out
*/
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_integer_no_dig, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1523, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1522, __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(5, 1522, __pyx_L1_error)

    /* "utils.pxd":1521
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot parse '%s' to integer: no digits found." % token
*/
  }

  /* "utils.pxd":1525
 *             "Cannot parse '%s' to integer: no digits found." % token
 *         )
 *     return -out if neg else out             # <<<<<<<<<<<<<<
 * 
 * cpdef inline double parse_to_float(str token) except *:
*/
  if (__pyx_v_neg) {
    __pyx_t_14 = (-__pyx_v_out);
  } else {
    __pyx_t_14 = __pyx_v_out;
  }
  __pyx_r = __pyx_t_14;
  goto __pyx_L0;

  /* "utils.pxd":1438
 * 
 * # . parse and convert
 * cpdef inline long long parse_to_int(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `long long` `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cytimes.utils.parse_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_5utils_1parse_to_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*/
PyDoc_STRVAR(__pyx_doc_7cytimes_5utils_parse_to_int, "Parse the first numeric token from a string into a `long long` `<'int'>`.\n\n    The parser scans `token` left-to-right and **ignores any characters before the\n    first digit**. Once the first ASCII digit is encountered, it parses a base-10\n    integer consisting of:\n\n    - an optional sign (`+` or `-`) **that must appear before any digits**, and\n    - ASCII digits (`0`-`9`) for the integer part.\n\n    After at least one digit has been consumed, any non-digit character is considered\n    invalid and raises an error.\n\n    Notice overflow is not checked for the integer accumulator and may lead to\n    undefined behavior for large inputs.\n\n    :param token `<'str'>`: Input string to parse. Must not be `None`.\n    :return `<'int'>`: Parsed integer value, or `0` for empty strings.\n    :raises `<'ValueError'>`: When the input cannot be parsed as a valid integer.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_5utils_1parse_to_int = {"parse_to_int", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_5utils_1parse_to_int, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_5utils_parse_to_int};
static PyObject *__pyx_pw_7cytimes_5utils_1parse_to_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_token = 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("parse_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_token,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, 1438, __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, 1438, __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, "parse_to_int", 0) < (0)) __PYX_ERR(5, 1438, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse_to_int", 1, 1, 1, i); __PYX_ERR(5, 1438, __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, 1438, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_to_int", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 1438, __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("cytimes.utils.parse_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(5, 1438, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_5utils_parse_to_int(__pyx_self, __pyx_v_token);

  /* 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_7cytimes_5utils_parse_to_int(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PY_LONG_LONG __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_to_int", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_to_int(__pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 1438, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.parse_to_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1527
 *     return -out if neg else out
 * 
 * cpdef inline double parse_to_float(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `double` `<'float'>`.
 * 
*/

static PyObject *__pyx_pw_7cytimes_5utils_3parse_to_float(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 CYTHON_INLINE double __pyx_f_7cytimes_5utils_parse_to_float(PyObject *__pyx_v_token, CYTHON_UNUSED int __pyx_skip_dispatch) {
  Py_ssize_t __pyx_v_token_len;
  unsigned PY_LONG_LONG __pyx_v_i_part;
  unsigned PY_LONG_LONG __pyx_v_f_part;
  double __pyx_v_f_scale;
  int __pyx_v_has_dot;
  int __pyx_v_has_digit;
  int __pyx_v_has_pos;
  int __pyx_v_neg;
  Py_ssize_t __pyx_v_i;
  Py_UCS4 __pyx_v_ch;
  double __pyx_v_out;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  Py_ssize_t __pyx_t_5;
  Py_ssize_t __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12[7];
  PyObject *__pyx_t_13 = NULL;
  double __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_to_float", 0);

  /* "utils.pxd":1550
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("parse_to_float: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1551
 *     # Validate
 *     if token is None:
 *         raise ValueError("parse_to_float: 'token' cannot be None")             # <<<<<<<<<<<<<<
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_parse_to_float_token_cannot_be_N};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 1551, __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(5, 1551, __pyx_L1_error)

    /* "utils.pxd":1550
 *     """
 *     # Validate
 *     if token is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("parse_to_float: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
*/
  }

  /* "utils.pxd":1552
 *     if token is None:
 *         raise ValueError("parse_to_float: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)             # <<<<<<<<<<<<<<
 *     if token_len <= 0:
 *         return 0.0  # empty string  0.0
*/
  __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

  /* "utils.pxd":1553
 *         raise ValueError("parse_to_float: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         return 0.0  # empty string  0.0
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1554
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:
 *         return 0.0  # empty string  0.0             # <<<<<<<<<<<<<<
 * 
 *     # Slice and convert
*/
    __pyx_r = 0.0;
    goto __pyx_L0;

    /* "utils.pxd":1553
 *         raise ValueError("parse_to_float: 'token' cannot be None")
 *     cdef Py_ssize_t token_len = str_len(token)
 *     if token_len <= 0:             # <<<<<<<<<<<<<<
 *         return 0.0  # empty string  0.0
 * 
*/
  }

  /* "utils.pxd":1558
 *     # Slice and convert
 *     cdef:
 *         unsigned long long i_part = 0             # <<<<<<<<<<<<<<
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0
*/
  __pyx_v_i_part = 0;

  /* "utils.pxd":1559
 *     cdef:
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0             # <<<<<<<<<<<<<<
 *         double f_scale = 1.0
 *         bint has_dot = False
*/
  __pyx_v_f_part = 0;

  /* "utils.pxd":1560
 *         unsigned long long i_part = 0
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0             # <<<<<<<<<<<<<<
 *         bint has_dot = False
 *         bint has_digit = False
*/
  __pyx_v_f_scale = 1.0;

  /* "utils.pxd":1561
 *         unsigned long long f_part = 0
 *         double f_scale = 1.0
 *         bint has_dot = False             # <<<<<<<<<<<<<<
 *         bint has_digit = False
 *         bint has_pos = False
*/
  __pyx_v_has_dot = 0;

  /* "utils.pxd":1562
 *         double f_scale = 1.0
 *         bint has_dot = False
 *         bint has_digit = False             # <<<<<<<<<<<<<<
 *         bint has_pos = False
 *         bint neg = False
*/
  __pyx_v_has_digit = 0;

  /* "utils.pxd":1563
 *         bint has_dot = False
 *         bint has_digit = False
 *         bint has_pos = False             # <<<<<<<<<<<<<<
 *         bint neg = False
 *         Py_ssize_t i
*/
  __pyx_v_has_pos = 0;

  /* "utils.pxd":1564
 *         bint has_digit = False
 *         bint has_pos = False
 *         bint neg = False             # <<<<<<<<<<<<<<
 *         Py_ssize_t i
 *         Py_UCS4 ch
*/
  __pyx_v_neg = 0;

  /* "utils.pxd":1569
 *         double out
 * 
 *     for i in range(token_len):             # <<<<<<<<<<<<<<
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
*/
  __pyx_t_5 = __pyx_v_token_len;
  __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;

    /* "utils.pxd":1570
 * 
 *     for i in range(token_len):
 *         ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *         if is_ascii_digit(ch):
 *             if not has_dot:
*/
    __pyx_t_8 = PyUnicode_ReadChar(__pyx_v_token, __pyx_v_i); if (unlikely(__pyx_t_8 == ((Py_UCS4)-1))) __PYX_ERR(5, 1570, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_8;

    /* "utils.pxd":1571
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
    if (__pyx_t_1) {

      /* "utils.pxd":1572
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
      __pyx_t_1 = (!__pyx_v_has_dot);
      if (__pyx_t_1) {

        /* "utils.pxd":1573
 *         if is_ascii_digit(ch):
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
*/
        __pyx_v_i_part = ((__pyx_v_i_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1572
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):
 *             if not has_dot:             # <<<<<<<<<<<<<<
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
*/
        goto __pyx_L8;
      }

      /* "utils.pxd":1575
 *                 i_part = i_part * 10 + (ord(ch) - 48)
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *                 f_scale *= 0.1
 *             has_digit = True
*/
      /*else*/ {
        __pyx_v_f_part = ((__pyx_v_f_part * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "utils.pxd":1576
 *             else:
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_scale *= 0.1             # <<<<<<<<<<<<<<
 *             has_digit = True
 *         elif ch == 46:  # '.'
*/
        __pyx_v_f_scale = (__pyx_v_f_scale * 0.1);
      }
      __pyx_L8:;

      /* "utils.pxd":1577
 *                 f_part = f_part * 10 + (ord(ch) - 48)
 *                 f_scale *= 0.1
 *             has_digit = True             # <<<<<<<<<<<<<<
 *         elif ch == 46:  # '.'
 *             if has_dot:
*/
      __pyx_v_has_digit = 1;

      /* "utils.pxd":1571
 *     for i in range(token_len):
 *         ch = str_read(token, i)
 *         if is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *             if not has_dot:
 *                 i_part = i_part * 10 + (ord(ch) - 48)
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1578
 *                 f_scale *= 0.1
 *             has_digit = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 46);
    if (__pyx_t_1) {

      /* "utils.pxd":1579
 *             has_digit = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_dot)) {

        /* "utils.pxd":1580
 *         elif ch == 46:  # '.'
 *             if has_dot:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one decimal point." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1582
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one decimal point." % token             # <<<<<<<<<<<<<<
 *                 )
 *             has_dot = True
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_contains, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1582, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1580, __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(5, 1580, __pyx_L1_error)

        /* "utils.pxd":1579
 *             has_digit = True
 *         elif ch == 46:  # '.'
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1584
 *                     "contains more than one decimal point." % token
 *                 )
 *             has_dot = True             # <<<<<<<<<<<<<<
 *         elif ch == 45:  # '-'
 *             if has_digit:
*/
      __pyx_v_has_dot = 1;

      /* "utils.pxd":1578
 *                 f_scale *= 0.1
 *             has_digit = True
 *         elif ch == 46:  # '.'             # <<<<<<<<<<<<<<
 *             if has_dot:
 *                 raise ValueError(
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1585
 *                 )
 *             has_dot = True
 *         elif ch == 45:  # '-'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 45);
    if (__pyx_t_1) {

      /* "utils.pxd":1586
 *             has_dot = True
 *         elif ch == 45:  # '-'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_digit)) {

        /* "utils.pxd":1587
 *         elif ch == 45:  # '-'
 *             if has_digit:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "negative sign found after digits." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1589
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "negative sign found after digits." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_dot:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_negative, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1589, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1587, __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(5, 1587, __pyx_L1_error)

        /* "utils.pxd":1586
 *             has_dot = True
 *         elif ch == 45:  # '-'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1591
 *                     "negative sign found after digits." % token
 *                 )
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_dot)) {

        /* "utils.pxd":1592
 *                 )
 *             if has_dot:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "negative sign found after decimal point." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1594
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "negative sign found after decimal point." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if neg:
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_negative_2, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1594, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1592, __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(5, 1592, __pyx_L1_error)

        /* "utils.pxd":1591
 *                     "negative sign found after digits." % token
 *                 )
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1596
 *                     "negative sign found after decimal point." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_neg)) {

        /* "utils.pxd":1597
 *                 )
 *             if neg:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one negative sign." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1599
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_pos:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_contains_2, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1599, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1597, __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(5, 1597, __pyx_L1_error)

        /* "utils.pxd":1596
 *                     "negative sign found after decimal point." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1601
 *                     "contains more than one negative sign." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_pos)) {

        /* "utils.pxd":1602
 *                 )
 *             if has_pos:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "contains mixed positive and negative sign." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1604
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "contains mixed positive and negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             neg = True
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_contains_3, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1604, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1602, __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(5, 1602, __pyx_L1_error)

        /* "utils.pxd":1601
 *                     "contains more than one negative sign." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1606
 *                     "contains mixed positive and negative sign." % token
 *                 )
 *             neg = True             # <<<<<<<<<<<<<<
 *         elif ch == 43:  # '+'
 *             if has_digit:
*/
      __pyx_v_neg = 1;

      /* "utils.pxd":1585
 *                 )
 *             has_dot = True
 *         elif ch == 45:  # '-'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1607
 *                 )
 *             neg = True
 *         elif ch == 43:  # '+'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
    __pyx_t_1 = (__pyx_v_ch == 43);
    if (__pyx_t_1) {

      /* "utils.pxd":1608
 *             neg = True
 *         elif ch == 43:  # '+'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_digit)) {

        /* "utils.pxd":1609
 *         elif ch == 43:  # '+'
 *             if has_digit:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "positive sign found after digits." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1611
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "positive sign found after digits." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_dot:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_positive, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1611, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1609, __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(5, 1609, __pyx_L1_error)

        /* "utils.pxd":1608
 *             neg = True
 *         elif ch == 43:  # '+'
 *             if has_digit:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1613
 *                     "positive sign found after digits." % token
 *                 )
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_dot)) {

        /* "utils.pxd":1614
 *                 )
 *             if has_dot:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "positive sign found after decimal point." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1616
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "positive sign found after decimal point." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if has_pos:
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_positive_2, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1616, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1614, __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(5, 1614, __pyx_L1_error)

        /* "utils.pxd":1613
 *                     "positive sign found after digits." % token
 *                 )
 *             if has_dot:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1618
 *                     "positive sign found after decimal point." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_has_pos)) {

        /* "utils.pxd":1619
 *                 )
 *             if has_pos:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one positive sign." % token
*/
        __pyx_t_9 = NULL;

        /* "utils.pxd":1621
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "contains more than one positive sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             if neg:
*/
        __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_contains_4, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1621, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_3};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1619, __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(5, 1619, __pyx_L1_error)

        /* "utils.pxd":1618
 *                     "positive sign found after decimal point." % token
 *                 )
 *             if has_pos:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1623
 *                     "contains more than one positive sign." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      if (unlikely(__pyx_v_neg)) {

        /* "utils.pxd":1624
 *                 )
 *             if neg:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Cannot parse '%s' to float: "
 *                     "contains mixed positive and negative sign." % token
*/
        __pyx_t_3 = NULL;

        /* "utils.pxd":1626
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
 *                     "contains mixed positive and negative sign." % token             # <<<<<<<<<<<<<<
 *                 )
 *             has_pos = True
*/
        __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_contains_3, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1626, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_4 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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;
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1624, __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(5, 1624, __pyx_L1_error)

        /* "utils.pxd":1623
 *                     "contains more than one positive sign." % token
 *                 )
 *             if neg:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Cannot parse '%s' to float: "
*/
      }

      /* "utils.pxd":1628
 *                     "contains mixed positive and negative sign." % token
 *                 )
 *             has_pos = True             # <<<<<<<<<<<<<<
 *         elif not has_digit:
 *             continue
*/
      __pyx_v_has_pos = 1;

      /* "utils.pxd":1607
 *                 )
 *             neg = True
 *         elif ch == 43:  # '+'             # <<<<<<<<<<<<<<
 *             if has_digit:
 *                 raise ValueError(
*/
      goto __pyx_L7;
    }

    /* "utils.pxd":1629
 *                 )
 *             has_pos = True
 *         elif not has_digit:             # <<<<<<<<<<<<<<
 *             continue
 *         else:
*/
    __pyx_t_1 = (!__pyx_v_has_digit);
    if (likely(__pyx_t_1)) {

      /* "utils.pxd":1630
 *             has_pos = True
 *         elif not has_digit:
 *             continue             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError(
*/
      goto __pyx_L5_continue;

      /* "utils.pxd":1629
 *                 )
 *             has_pos = True
 *         elif not has_digit:             # <<<<<<<<<<<<<<
 *             continue
 *         else:
*/
    }

    /* "utils.pxd":1632
 *             continue
 *         else:
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Cannot parse '%s' to float: contains invalid character '%s' "
 *                 "at position %d." % (token, str_chr(ch), i)
*/
    /*else*/ {
      __pyx_t_9 = NULL;

      /* "utils.pxd":1634
 *             raise ValueError(
 *                 "Cannot parse '%s' to float: contains invalid character '%s' "
 *                 "at position %d." % (token, str_chr(ch), i)             # <<<<<<<<<<<<<<
 *             )
 * 
*/
      __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_10 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11 = __Pyx_PyUnicode_Unicode(__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 1634, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_parse;
      __pyx_t_12[1] = __pyx_t_3;
      __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u_to_float_contains_invalid_chara;
      __pyx_t_12[3] = __pyx_t_11;
      __pyx_t_12[4] = __pyx_mstate_global->__pyx_kp_u_at_position;
      __pyx_t_12[5] = __pyx_t_10;
      __pyx_t_12[6] = __pyx_mstate_global->__pyx_kp_u__2;

      /* "utils.pxd":1633
 *         else:
 *             raise ValueError(
 *                 "Cannot parse '%s' to float: contains invalid character '%s' "             # <<<<<<<<<<<<<<
 *                 "at position %d." % (token, str_chr(ch), i)
 *             )
*/
      __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 7, 14 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 40 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
      if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 1633, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_13};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1632, __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(5, 1632, __pyx_L1_error)
    }
    __pyx_L7:;
    __pyx_L5_continue:;
  }

  /* "utils.pxd":1637
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot parse '%s' to float: no digits found." % token
*/
  __pyx_t_1 = (!__pyx_v_has_digit);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1638
 * 
 *     if not has_digit:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot parse '%s' to float: no digits found." % token
 *         )
*/
    __pyx_t_13 = NULL;

    /* "utils.pxd":1639
 *     if not has_digit:
 *         raise ValueError(
 *             "Cannot parse '%s' to float: no digits found." % token             # <<<<<<<<<<<<<<
 *         )
 *     elif not has_dot:
*/
    __pyx_t_9 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Cannot_parse_s_to_float_no_digit, __pyx_v_token); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 1639, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_t_9};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_4, (2-__pyx_t_4) | (__pyx_t_4*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1638, __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(5, 1638, __pyx_L1_error)

    /* "utils.pxd":1637
 *             )
 * 
 *     if not has_digit:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot parse '%s' to float: no digits found." % token
*/
  }

  /* "utils.pxd":1641
 *             "Cannot parse '%s' to float: no digits found." % token
 *         )
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         out = (<double> i_part)
 *     else:
*/
  __pyx_t_1 = (!__pyx_v_has_dot);
  if (__pyx_t_1) {

    /* "utils.pxd":1642
 *         )
 *     elif not has_dot:
 *         out = (<double> i_part)             # <<<<<<<<<<<<<<
 *     else:
 *         out = (<double> i_part) + (<double> f_part) * f_scale
*/
    __pyx_v_out = ((double)__pyx_v_i_part);

    /* "utils.pxd":1641
 *             "Cannot parse '%s' to float: no digits found." % token
 *         )
 *     elif not has_dot:             # <<<<<<<<<<<<<<
 *         out = (<double> i_part)
 *     else:
*/
    goto __pyx_L18;
  }

  /* "utils.pxd":1644
 *         out = (<double> i_part)
 *     else:
 *         out = (<double> i_part) + (<double> f_part) * f_scale             # <<<<<<<<<<<<<<
 *     return -out if neg else out
 * 
*/
  /*else*/ {
    __pyx_v_out = (((double)__pyx_v_i_part) + (((double)__pyx_v_f_part) * __pyx_v_f_scale));
  }
  __pyx_L18:;

  /* "utils.pxd":1645
 *     else:
 *         out = (<double> i_part) + (<double> f_part) * f_scale
 *     return -out if neg else out             # <<<<<<<<<<<<<<
 * 
 * # Time -------------------------------------------------------------------------------------------------
*/
  if (__pyx_v_neg) {
    __pyx_t_14 = (-__pyx_v_out);
  } else {
    __pyx_t_14 = __pyx_v_out;
  }
  __pyx_r = __pyx_t_14;
  goto __pyx_L0;

  /* "utils.pxd":1527
 *     return -out if neg else out
 * 
 * cpdef inline double parse_to_float(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `double` `<'float'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cytimes.utils.parse_to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_5utils_3parse_to_float(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_7cytimes_5utils_2parse_to_float, "Parse the first numeric token from a string into a `double` `<'float'>`.\n\n    The parser scans `token` left-to-right and **ignores any characters before the\n    first digit**. Once the first ASCII digit is encountered, it parses a decimal\n    number consisting of:\n\n    - an optional sign (`+` or `-`) **that must appear before any digits and before\n      the decimal point**, and\n    - an optional decimal point (`.`), and\n    - ASCII digits (`0`-`9`) for the integer and/or fractional part.\n\n    After at least one digit has been consumed, any non-digit character other than\n    a single decimal point is considered invalid and raises an error.\n\n    Notice overflow is not checked at both integer and fraction parts\n    and may lead to undefined behavior.\n\n    :param token `<'str'>`: Input string to parse. Must not be `None`.\n    :return `<'float'>`: Parsed floating-point value, or `0.0` for empty strings.\n    :raises `<'ValueError'>`: When the input cannot be parsed as a valid float.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_5utils_3parse_to_float = {"parse_to_float", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_5utils_3parse_to_float, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_5utils_2parse_to_float};
static PyObject *__pyx_pw_7cytimes_5utils_3parse_to_float(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_token = 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("parse_to_float (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_token,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, 1527, __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, 1527, __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, "parse_to_float", 0) < (0)) __PYX_ERR(5, 1527, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse_to_float", 1, 1, 1, i); __PYX_ERR(5, 1527, __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, 1527, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_to_float", 1, 1, 1, __pyx_nargs); __PYX_ERR(5, 1527, __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("cytimes.utils.parse_to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 1, "token", 1))) __PYX_ERR(5, 1527, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_5utils_2parse_to_float(__pyx_self, __pyx_v_token);

  /* 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_7cytimes_5utils_2parse_to_float(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  double __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_to_float", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_to_float(__pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(5, 1527, __pyx_L1_error)
  __pyx_t_2 = PyFloat_FromDouble(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.parse_to_float", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1649
 * # Time -------------------------------------------------------------------------------------------------
 * # . gmtime
 * cdef inline tm tm_gmtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a Unix timestamp to UTC calendar time `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_gmtime(double __pyx_v_ts) {
  time_t __pyx_v_tic;
  struct tm *__pyx_v_t;
  struct tm __pyx_v_out;
  struct tm __pyx_r;
  __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("tm_gmtime", 0);

  /* "utils.pxd":1670
 *     """
 *     cdef:
 *         time.time_t tic = <time.time_t> math.floor(ts)             # <<<<<<<<<<<<<<
 *         tm* t = time.gmtime(&tic)
 *     if t is NULL:
*/
  __pyx_v_tic = ((time_t)floor(__pyx_v_ts));

  /* "utils.pxd":1671
 *     cdef:
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.gmtime(&tic)             # <<<<<<<<<<<<<<
 *     if t is NULL:
 *         raise RuntimeError("Fail to convert timestamp '%s' to UTC calendar time." % ts)
*/
  __pyx_v_t = gmtime((&__pyx_v_tic));

  /* "utils.pxd":1672
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.gmtime(&tic)
 *     if t is NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Fail to convert timestamp '%s' to UTC calendar time." % ts)
 * 
*/
  __pyx_t_1 = (__pyx_v_t == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1673
 *         tm* t = time.gmtime(&tic)
 *     if t is NULL:
 *         raise RuntimeError("Fail to convert timestamp '%s' to UTC calendar time." % ts)             # <<<<<<<<<<<<<<
 * 
 *     # Fix 0-based date values (and the 1900-based year).
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_ts); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Fail_to_convert_timestamp_s_to_U, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1673, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(5, 1673, __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(5, 1673, __pyx_L1_error)

    /* "utils.pxd":1672
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.gmtime(&tic)
 *     if t is NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Fail to convert timestamp '%s' to UTC calendar time." % ts)
 * 
*/
  }

  /* "utils.pxd":1677
 *     # Fix 0-based date values (and the 1900-based year).
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     cdef tm out = t[0]                   # copy struct             # <<<<<<<<<<<<<<
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
*/
  __pyx_v_out = (__pyx_v_t[0]);

  /* "utils.pxd":1678
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     cdef tm out = t[0]                   # copy struct
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year             # <<<<<<<<<<<<<<
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds
*/
  __pyx_v_out.tm_year = (__pyx_v_out.tm_year + 0x76C);

  /* "utils.pxd":1679
 *     cdef tm out = t[0]                   # copy struct
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12             # <<<<<<<<<<<<<<
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59
*/
  __pyx_v_out.tm_mon = (__pyx_v_out.tm_mon + 1);

  /* "utils.pxd":1680
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds             # <<<<<<<<<<<<<<
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
*/
  __pyx_t_1 = (__pyx_v_out.tm_sec > 59);
  if (__pyx_t_1) {

    /* "utils.pxd":1681
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59             # <<<<<<<<<<<<<<
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
*/
    __pyx_v_out.tm_sec = 59;

    /* "utils.pxd":1680
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds             # <<<<<<<<<<<<<<
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
*/
  }

  /* "utils.pxd":1682
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)             # <<<<<<<<<<<<<<
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
 *     return out
*/
  __pyx_v_out.tm_wday = __Pyx_mod_long((__pyx_v_out.tm_wday + 6), 7, 1);

  /* "utils.pxd":1683
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_yday = (__pyx_v_out.tm_yday + 1);

  /* "utils.pxd":1684
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long ts_gmtime(double ts) except *:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1649
 * # Time -------------------------------------------------------------------------------------------------
 * # . gmtime
 * cdef inline tm tm_gmtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a Unix timestamp to UTC calendar time `<'struct:tm'>`.
 * 
*/

  /* 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("cytimes.utils.tm_gmtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1686
 *     return out
 * 
 * cdef inline long long ts_gmtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a timestamp to UTC seconds ticks since the Unix Epoch `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ts_gmtime(double __pyx_v_ts) {
  struct tm __pyx_v_t;
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  PY_LONG_LONG __pyx_v_ss;
  PY_LONG_LONG __pyx_r;
  struct tm __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":1694
 *     """
 *     cdef:
 *         tm t = tm_gmtime(ts)             # <<<<<<<<<<<<<<
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_tm_gmtime(__pyx_v_ts); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 1694, __pyx_L1_error)
  __pyx_v_t = __pyx_t_1;

  /* "utils.pxd":1695
 *     cdef:
 *         tm t = tm_gmtime(ts)
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)             # <<<<<<<<<<<<<<
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_t.tm_year, __pyx_v_t.tm_mon, __pyx_v_t.tm_mday);

  /* "utils.pxd":1696
 *         tm t = tm_gmtime(ts)
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour             # <<<<<<<<<<<<<<
 *         long long mi = t.tm_min
 *         long long ss = t.tm_sec
*/
  __pyx_t_2 = __pyx_v_t.tm_hour;
  __pyx_v_hh = __pyx_t_2;

  /* "utils.pxd":1697
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min             # <<<<<<<<<<<<<<
 *         long long ss = t.tm_sec
 * 
*/
  __pyx_t_2 = __pyx_v_t.tm_min;
  __pyx_v_mi = __pyx_t_2;

  /* "utils.pxd":1698
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min
 *         long long ss = t.tm_sec             # <<<<<<<<<<<<<<
 * 
 *     return (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
*/
  __pyx_t_2 = __pyx_v_t.tm_sec;
  __pyx_v_ss = __pyx_t_2;

  /* "utils.pxd":1700
 *         long long ss = t.tm_sec
 * 
 *     return (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss             # <<<<<<<<<<<<<<
 * 
 * # . localtime
*/
  __pyx_r = (((((__pyx_v_ord - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_SS_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_SS_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_SS_MINUTE)) + __pyx_v_ss);
  goto __pyx_L0;

  /* "utils.pxd":1686
 *     return out
 * 
 * cdef inline long long ts_gmtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a timestamp to UTC seconds ticks since the Unix Epoch `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.ts_gmtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1703
 * 
 * # . localtime
 * cdef inline tm tm_localtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a Unix timestamp to local calendar time `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_localtime(double __pyx_v_ts) {
  time_t __pyx_v_tic;
  struct tm *__pyx_v_t;
  struct tm __pyx_v_out;
  struct tm __pyx_r;
  __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("tm_localtime", 0);

  /* "utils.pxd":1724
 *     """
 *     cdef:
 *         time.time_t tic = <time.time_t> math.floor(ts)             # <<<<<<<<<<<<<<
 *         tm* t = time.localtime(&tic)
 *     if t is NULL:
*/
  __pyx_v_tic = ((time_t)floor(__pyx_v_ts));

  /* "utils.pxd":1725
 *     cdef:
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.localtime(&tic)             # <<<<<<<<<<<<<<
 *     if t is NULL:
 *         raise RuntimeError("Fail to convert timestamp '%s' to local calendar time." % ts)
*/
  __pyx_v_t = localtime((&__pyx_v_tic));

  /* "utils.pxd":1726
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.localtime(&tic)
 *     if t is NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Fail to convert timestamp '%s' to local calendar time." % ts)
 * 
*/
  __pyx_t_1 = (__pyx_v_t == NULL);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1727
 *         tm* t = time.localtime(&tic)
 *     if t is NULL:
 *         raise RuntimeError("Fail to convert timestamp '%s' to local calendar time." % ts)             # <<<<<<<<<<<<<<
 * 
 *     # Fix 0-based date values (and the 1900-based year).
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_ts); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Fail_to_convert_timestamp_s_to_l, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1727, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_RuntimeError)), __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(5, 1727, __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(5, 1727, __pyx_L1_error)

    /* "utils.pxd":1726
 *         time.time_t tic = <time.time_t> math.floor(ts)
 *         tm* t = time.localtime(&tic)
 *     if t is NULL:             # <<<<<<<<<<<<<<
 *         raise RuntimeError("Fail to convert timestamp '%s' to local calendar time." % ts)
 * 
*/
  }

  /* "utils.pxd":1731
 *     # Fix 0-based date values (and the 1900-based year).
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     cdef tm out = t[0]                   # copy struct             # <<<<<<<<<<<<<<
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
*/
  __pyx_v_out = (__pyx_v_t[0]);

  /* "utils.pxd":1732
 *     # See tmtotuple() in https://github.com/python/cpython/blob/master/Modules/timemodule.c
 *     cdef tm out = t[0]                   # copy struct
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year             # <<<<<<<<<<<<<<
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds
*/
  __pyx_v_out.tm_year = (__pyx_v_out.tm_year + 0x76C);

  /* "utils.pxd":1733
 *     cdef tm out = t[0]                   # copy struct
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12             # <<<<<<<<<<<<<<
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59
*/
  __pyx_v_out.tm_mon = (__pyx_v_out.tm_mon + 1);

  /* "utils.pxd":1734
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds             # <<<<<<<<<<<<<<
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
*/
  __pyx_t_1 = (__pyx_v_out.tm_sec > 59);
  if (__pyx_t_1) {

    /* "utils.pxd":1735
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59             # <<<<<<<<<<<<<<
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
*/
    __pyx_v_out.tm_sec = 59;

    /* "utils.pxd":1734
 *     out.tm_year += 1900                  # years since 1900  Gregorian absolute year
 *     out.tm_mon += 1                      # 0..11 (0-based month)  1..12
 *     if out.tm_sec > 59:                  # clamp leap seconds             # <<<<<<<<<<<<<<
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
*/
  }

  /* "utils.pxd":1736
 *     if out.tm_sec > 59:                  # clamp leap seconds
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)             # <<<<<<<<<<<<<<
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
 *     return out
*/
  __pyx_v_out.tm_wday = __Pyx_mod_long((__pyx_v_out.tm_wday + 6), 7, 1);

  /* "utils.pxd":1737
 *         out.tm_sec = 59
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_yday = (__pyx_v_out.tm_yday + 1);

  /* "utils.pxd":1738
 *     out.tm_wday = (out.tm_wday + 6) % 7  # 0..6 (Sun..Sat)  0..6 (Mon..Sun)
 *     out.tm_yday += 1                     # 0..365 (0-based day of year)  1..366
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long ts_localtime(double ts) except *:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1703
 * 
 * # . localtime
 * cdef inline tm tm_localtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a Unix timestamp to local calendar time `<'struct:tm'>`.
 * 
*/

  /* 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("cytimes.utils.tm_localtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1740
 *     return out
 * 
 * cdef inline long long ts_localtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a timestamp to local seconds ticks since the Unix Epoch `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ts_localtime(double __pyx_v_ts) {
  struct tm __pyx_v_t;
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  PY_LONG_LONG __pyx_v_ss;
  PY_LONG_LONG __pyx_r;
  struct tm __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":1748
 *     """
 *     cdef:
 *         tm t = tm_localtime(ts)             # <<<<<<<<<<<<<<
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_tm_localtime(__pyx_v_ts); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 1748, __pyx_L1_error)
  __pyx_v_t = __pyx_t_1;

  /* "utils.pxd":1749
 *     cdef:
 *         tm t = tm_localtime(ts)
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)             # <<<<<<<<<<<<<<
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_t.tm_year, __pyx_v_t.tm_mon, __pyx_v_t.tm_mday);

  /* "utils.pxd":1750
 *         tm t = tm_localtime(ts)
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour             # <<<<<<<<<<<<<<
 *         long long mi = t.tm_min
 *         long long ss = t.tm_sec
*/
  __pyx_t_2 = __pyx_v_t.tm_hour;
  __pyx_v_hh = __pyx_t_2;

  /* "utils.pxd":1751
 *         long long ord = ymd_to_ord(t.tm_year, t.tm_mon, t.tm_mday)
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min             # <<<<<<<<<<<<<<
 *         long long ss = t.tm_sec
 * 
*/
  __pyx_t_2 = __pyx_v_t.tm_min;
  __pyx_v_mi = __pyx_t_2;

  /* "utils.pxd":1752
 *         long long hh = t.tm_hour
 *         long long mi = t.tm_min
 *         long long ss = t.tm_sec             # <<<<<<<<<<<<<<
 * 
 *     return (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
*/
  __pyx_t_2 = __pyx_v_t.tm_sec;
  __pyx_v_ss = __pyx_t_2;

  /* "utils.pxd":1754
 *         long long ss = t.tm_sec
 * 
 *     return (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss             # <<<<<<<<<<<<<<
 * 
 * # . conversion
*/
  __pyx_r = (((((__pyx_v_ord - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_SS_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_SS_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_SS_MINUTE)) + __pyx_v_ss);
  goto __pyx_L0;

  /* "utils.pxd":1740
 *     return out
 * 
 * cdef inline long long ts_localtime(double ts) except *:             # <<<<<<<<<<<<<<
 *     """Convert a timestamp to local seconds ticks since the Unix Epoch `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.ts_localtime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1757
 * 
 * # . conversion
 * cdef inline long long sec_to_us(double value) except *:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) to microseconds (int) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_sec_to_us(double __pyx_v_value) {
  PyObject *__pyx_v_s = 0;
  int __pyx_v_neg;
  Py_ssize_t __pyx_v_start;
  Py_ssize_t __pyx_v_dot;
  PY_LONG_LONG __pyx_v_sec;
  PY_LONG_LONG __pyx_v_us;
  PY_LONG_LONG __pyx_r;
  __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;
  Py_UCS4 __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  unsigned PY_LONG_LONG __pyx_t_9;
  PY_LONG_LONG __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("sec_to_us", 0);

  /* "utils.pxd":1774
 *     ```
 *     """
 *     if not math.isfinite(value):             # <<<<<<<<<<<<<<
 *         raise OverflowError("Seconds value must be finite, got '%s'" % value)
 * 
*/
  __pyx_t_1 = (!isfinite(__pyx_v_value));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1775
 *     """
 *     if not math.isfinite(value):
 *         raise OverflowError("Seconds value must be finite, got '%s'" % value)             # <<<<<<<<<<<<<<
 * 
 *     cdef:
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 1775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Seconds_value_must_be_finite_got, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1775, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 1775, __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(5, 1775, __pyx_L1_error)

    /* "utils.pxd":1774
 *     ```
 *     """
 *     if not math.isfinite(value):             # <<<<<<<<<<<<<<
 *         raise OverflowError("Seconds value must be finite, got '%s'" % value)
 * 
*/
  }

  /* "utils.pxd":1778
 * 
 *     cdef:
 *         str s = "%.7f" % value             # <<<<<<<<<<<<<<
 *         bint neg = str_read(s, 0) == "-"
 *         Py_ssize_t start = 1 if neg else 0
*/
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_7f, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 1778, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_s = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "utils.pxd":1779
 *     cdef:
 *         str s = "%.7f" % value
 *         bint neg = str_read(s, 0) == "-"             # <<<<<<<<<<<<<<
 *         Py_ssize_t start = 1 if neg else 0
 *         Py_ssize_t dot = str_len(s) - 8
*/
  __pyx_t_7 = PyUnicode_ReadChar(__pyx_v_s, 0); if (unlikely(__pyx_t_7 == ((Py_UCS4)-1))) __PYX_ERR(5, 1779, __pyx_L1_error)
  __pyx_v_neg = (__pyx_t_7 == 45);

  /* "utils.pxd":1780
 *         str s = "%.7f" % value
 *         bint neg = str_read(s, 0) == "-"
 *         Py_ssize_t start = 1 if neg else 0             # <<<<<<<<<<<<<<
 *         Py_ssize_t dot = str_len(s) - 8
 *         long long sec = slice_to_uint(s, start, dot - start)
*/
  if (__pyx_v_neg) {
    __pyx_t_8 = 1;
  } else {
    __pyx_t_8 = 0;
  }
  __pyx_v_start = __pyx_t_8;

  /* "utils.pxd":1781
 *         bint neg = str_read(s, 0) == "-"
 *         Py_ssize_t start = 1 if neg else 0
 *         Py_ssize_t dot = str_len(s) - 8             # <<<<<<<<<<<<<<
 *         long long sec = slice_to_uint(s, start, dot - start)
 *         long long us = slice_to_uint(s, dot + 1, 6)
*/
  __pyx_v_dot = (PyUnicode_GET_LENGTH(__pyx_v_s) - 8);

  /* "utils.pxd":1782
 *         Py_ssize_t start = 1 if neg else 0
 *         Py_ssize_t dot = str_len(s) - 8
 *         long long sec = slice_to_uint(s, start, dot - start)             # <<<<<<<<<<<<<<
 *         long long us = slice_to_uint(s, dot + 1, 6)
 * 
*/
  __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_s, __pyx_v_start, (__pyx_v_dot - __pyx_v_start), NULL); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(5, 1782, __pyx_L1_error)
  __pyx_v_sec = __pyx_t_9;

  /* "utils.pxd":1783
 *         Py_ssize_t dot = str_len(s) - 8
 *         long long sec = slice_to_uint(s, start, dot - start)
 *         long long us = slice_to_uint(s, dot + 1, 6)             # <<<<<<<<<<<<<<
 * 
 *     us = sec * US_SECOND + us
*/
  __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_s, (__pyx_v_dot + 1), 6, NULL); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(5, 1783, __pyx_L1_error)
  __pyx_v_us = __pyx_t_9;

  /* "utils.pxd":1785
 *         long long us = slice_to_uint(s, dot + 1, 6)
 * 
 *     us = sec * US_SECOND + us             # <<<<<<<<<<<<<<
 *     return -us if neg else us
 * 
*/
  __pyx_v_us = ((__pyx_v_sec * __pyx_v_7cytimes_5utils_US_SECOND) + __pyx_v_us);

  /* "utils.pxd":1786
 * 
 *     us = sec * US_SECOND + us
 *     return -us if neg else us             # <<<<<<<<<<<<<<
 * 
 * cdef inline str tm_strformat(tm t, str fmt):
*/
  if (__pyx_v_neg) {
    __pyx_t_10 = (-__pyx_v_us);
  } else {
    __pyx_t_10 = __pyx_v_us;
  }
  __pyx_r = __pyx_t_10;
  goto __pyx_L0;

  /* "utils.pxd":1757
 * 
 * # . conversion
 * cdef inline long long sec_to_us(double value) except *:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) to microseconds (int) `<'int'>`.
 * 
*/

  /* 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("cytimes.utils.sec_to_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1788
 *     return -us if neg else us
 * 
 * cdef inline str tm_strformat(tm t, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a calendar time `tm` using C `strftime`
 *     and return a Unicode string `<'str'>`.
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tm_strformat(struct tm __pyx_v_t, PyObject *__pyx_v_fmt) {
  char const *__pyx_v_cfmt;
  size_t __pyx_v_cap;
  size_t __pyx_v_cap_max;
  char *__pyx_v_buf;
  size_t __pyx_v_n;
  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;
  char const *__pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  char const *__pyx_t_8;
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tm_strformat", 0);

  /* "utils.pxd":1816
 *     """
 *     # Validate format
 *     if fmt is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")
 *     if str_len(fmt) == 0:
*/
  __pyx_t_1 = (__pyx_v_fmt == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":1817
 *     # Validate format
 *     if fmt is None:
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")             # <<<<<<<<<<<<<<
 *     if str_len(fmt) == 0:
 *         return fmt
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_tm_strformat_fmt_cannot_be_None};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 1817, __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(5, 1817, __pyx_L1_error)

    /* "utils.pxd":1816
 *     """
 *     # Validate format
 *     if fmt is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")
 *     if str_len(fmt) == 0:
*/
  }

  /* "utils.pxd":1818
 *     if fmt is None:
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")
 *     if str_len(fmt) == 0:             # <<<<<<<<<<<<<<
 *         return fmt
 * 
*/
  __pyx_t_1 = (PyUnicode_GET_LENGTH(__pyx_v_fmt) == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1819
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")
 *     if str_len(fmt) == 0:
 *         return fmt             # <<<<<<<<<<<<<<
 * 
 *     # Normalize fields back to POSIX conventions
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_fmt);
    __pyx_r = __pyx_v_fmt;
    goto __pyx_L0;

    /* "utils.pxd":1818
 *     if fmt is None:
 *         raise ValueError("tm_strformat: 'fmt' cannot be None")
 *     if str_len(fmt) == 0:             # <<<<<<<<<<<<<<
 *         return fmt
 * 
*/
  }

  /* "utils.pxd":1822
 * 
 *     # Normalize fields back to POSIX conventions
 *     t.tm_year -= 1900             # <<<<<<<<<<<<<<
 *     t.tm_mon -= 1
 *     t.tm_wday = (t.tm_wday + 1) % 7
*/
  __pyx_v_t.tm_year = (__pyx_v_t.tm_year - 0x76C);

  /* "utils.pxd":1823
 *     # Normalize fields back to POSIX conventions
 *     t.tm_year -= 1900
 *     t.tm_mon -= 1             # <<<<<<<<<<<<<<
 *     t.tm_wday = (t.tm_wday + 1) % 7
 *     t.tm_yday -= 1
*/
  __pyx_v_t.tm_mon = (__pyx_v_t.tm_mon - 1);

  /* "utils.pxd":1824
 *     t.tm_year -= 1900
 *     t.tm_mon -= 1
 *     t.tm_wday = (t.tm_wday + 1) % 7             # <<<<<<<<<<<<<<
 *     t.tm_yday -= 1
 * 
*/
  __pyx_v_t.tm_wday = __Pyx_mod_long((__pyx_v_t.tm_wday + 1), 7, 1);

  /* "utils.pxd":1825
 *     t.tm_mon -= 1
 *     t.tm_wday = (t.tm_wday + 1) % 7
 *     t.tm_yday -= 1             # <<<<<<<<<<<<<<
 * 
 *     # Perform strftime
*/
  __pyx_v_t.tm_yday = (__pyx_v_t.tm_yday - 1);

  /* "utils.pxd":1829
 *     # Perform strftime
 *     cdef:
 *         const char* cfmt = PyUnicode_AsUTF8(fmt)             # <<<<<<<<<<<<<<
 *         size_t cap = <size_t> 256            # Initial buffer size
 *         size_t cap_max = <size_t> (1 << 15)  # Maximum buffer size: 32 KiB
*/
  __pyx_t_5 = PyUnicode_AsUTF8(__pyx_v_fmt); if (unlikely(__pyx_t_5 == ((void *)NULL))) __PYX_ERR(5, 1829, __pyx_L1_error)
  __pyx_v_cfmt = __pyx_t_5;

  /* "utils.pxd":1830
 *     cdef:
 *         const char* cfmt = PyUnicode_AsUTF8(fmt)
 *         size_t cap = <size_t> 256            # Initial buffer size             # <<<<<<<<<<<<<<
 *         size_t cap_max = <size_t> (1 << 15)  # Maximum buffer size: 32 KiB
 *         char* buf
*/
  __pyx_v_cap = ((size_t)0x100);

  /* "utils.pxd":1831
 *         const char* cfmt = PyUnicode_AsUTF8(fmt)
 *         size_t cap = <size_t> 256            # Initial buffer size
 *         size_t cap_max = <size_t> (1 << 15)  # Maximum buffer size: 32 KiB             # <<<<<<<<<<<<<<
 *         char* buf
 *         size_t n
*/
  __pyx_v_cap_max = ((size_t)0x8000);

  /* "utils.pxd":1835
 *         size_t n
 * 
 *     while True:             # <<<<<<<<<<<<<<
 *         # Allocate buffer
 *         buf = <char*> stdlib.malloc(cap)
*/
  while (1) {

    /* "utils.pxd":1837
 *     while True:
 *         # Allocate buffer
 *         buf = <char*> stdlib.malloc(cap)             # <<<<<<<<<<<<<<
 *         if buf == NULL:
 *             raise MemoryError("tm_strformat: failed to allocate buffer")
*/
    __pyx_v_buf = ((char *)malloc(__pyx_v_cap));

    /* "utils.pxd":1838
 *         # Allocate buffer
 *         buf = <char*> stdlib.malloc(cap)
 *         if buf == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError("tm_strformat: failed to allocate buffer")
 * 
*/
    __pyx_t_1 = (__pyx_v_buf == NULL);
    if (unlikely(__pyx_t_1)) {

      /* "utils.pxd":1839
 *         buf = <char*> stdlib.malloc(cap)
 *         if buf == NULL:
 *             raise MemoryError("tm_strformat: failed to allocate buffer")             # <<<<<<<<<<<<<<
 * 
 *         # Returns 0 if buffer too small (or other failure)
*/
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_tm_strformat_failed_to_allocate};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_MemoryError)), __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(5, 1839, __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(5, 1839, __pyx_L1_error)

      /* "utils.pxd":1838
 *         # Allocate buffer
 *         buf = <char*> stdlib.malloc(cap)
 *         if buf == NULL:             # <<<<<<<<<<<<<<
 *             raise MemoryError("tm_strformat: failed to allocate buffer")
 * 
*/
    }

    /* "utils.pxd":1842
 * 
 *         # Returns 0 if buffer too small (or other failure)
 *         n = time.strftime(buf, cap, cfmt, &t)             # <<<<<<<<<<<<<<
 *         if n > 0:
 *             # Decode as UTF-8 (assumes UTF-8 C locale)
*/
    __pyx_v_n = strftime(__pyx_v_buf, __pyx_v_cap, __pyx_v_cfmt, (&__pyx_v_t));

    /* "utils.pxd":1843
 *         # Returns 0 if buffer too small (or other failure)
 *         n = time.strftime(buf, cap, cfmt, &t)
 *         if n > 0:             # <<<<<<<<<<<<<<
 *             # Decode as UTF-8 (assumes UTF-8 C locale)
 *             try:
*/
    __pyx_t_1 = (__pyx_v_n > 0);
    if (__pyx_t_1) {

      /* "utils.pxd":1845
 *         if n > 0:
 *             # Decode as UTF-8 (assumes UTF-8 C locale)
 *             try:             # <<<<<<<<<<<<<<
 *                 return PyUnicode_DecodeUTF8(buf, n, NULL)
 *             finally:
*/
      /*try:*/ {

        /* "utils.pxd":1846
 *             # Decode as UTF-8 (assumes UTF-8 C locale)
 *             try:
 *                 return PyUnicode_DecodeUTF8(buf, n, NULL)             # <<<<<<<<<<<<<<
 *             finally:
 *                 stdlib.free(buf)
*/
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_2 = PyUnicode_DecodeUTF8(__pyx_v_buf, __pyx_v_n, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1846, __pyx_L12_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_r = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;
        goto __pyx_L11_return;
      }

      /* "utils.pxd":1848
 *                 return PyUnicode_DecodeUTF8(buf, n, NULL)
 *             finally:
 *                 stdlib.free(buf)             # <<<<<<<<<<<<<<
 * 
 *         # Retry with larger buffer
*/
      /*finally:*/ {
        __pyx_L12_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
          if ( unlikely(__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0)) __Pyx_ErrFetch(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11);
          __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_XGOTREF(__pyx_t_14);
          __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
          {
            free(__pyx_v_buf);
          }
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_XGIVEREF(__pyx_t_10);
          __Pyx_XGIVEREF(__pyx_t_11);
          __Pyx_ErrRestore(__pyx_t_9, __pyx_t_10, __pyx_t_11);
          __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0;
          __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_8;
          goto __pyx_L1_error;
        }
        __pyx_L11_return: {
          __pyx_t_15 = __pyx_r;
          __pyx_r = 0;
          free(__pyx_v_buf);
          __pyx_r = __pyx_t_15;
          __pyx_t_15 = 0;
          goto __pyx_L0;
        }
      }

      /* "utils.pxd":1843
 *         # Returns 0 if buffer too small (or other failure)
 *         n = time.strftime(buf, cap, cfmt, &t)
 *         if n > 0:             # <<<<<<<<<<<<<<
 *             # Decode as UTF-8 (assumes UTF-8 C locale)
 *             try:
*/
    }

    /* "utils.pxd":1851
 * 
 *         # Retry with larger buffer
 *         stdlib.free(buf)             # <<<<<<<<<<<<<<
 *         if cap >= cap_max:
 *             raise OverflowError("tm_strformat: expanded output exceeds buffer limit")
*/
    free(__pyx_v_buf);

    /* "utils.pxd":1852
 *         # Retry with larger buffer
 *         stdlib.free(buf)
 *         if cap >= cap_max:             # <<<<<<<<<<<<<<
 *             raise OverflowError("tm_strformat: expanded output exceeds buffer limit")
 *         cap <<= 1
*/
    __pyx_t_1 = (__pyx_v_cap >= __pyx_v_cap_max);
    if (unlikely(__pyx_t_1)) {

      /* "utils.pxd":1853
 *         stdlib.free(buf)
 *         if cap >= cap_max:
 *             raise OverflowError("tm_strformat: expanded output exceeds buffer limit")             # <<<<<<<<<<<<<<
 *         cap <<= 1
 * 
*/
      __pyx_t_3 = NULL;
      __pyx_t_4 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_tm_strformat_expanded_output_exc};
        __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_OverflowError)), __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(5, 1853, __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(5, 1853, __pyx_L1_error)

      /* "utils.pxd":1852
 *         # Retry with larger buffer
 *         stdlib.free(buf)
 *         if cap >= cap_max:             # <<<<<<<<<<<<<<
 *             raise OverflowError("tm_strformat: expanded output exceeds buffer limit")
 *         cap <<= 1
*/
    }

    /* "utils.pxd":1854
 *         if cap >= cap_max:
 *             raise OverflowError("tm_strformat: expanded output exceeds buffer limit")
 *         cap <<= 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline tm tm_fr_us(long long value) noexcept nogil:
*/
    __pyx_v_cap = (__pyx_v_cap << 1);
  }

  /* "utils.pxd":1788
 *     return -us if neg else us
 * 
 * cdef inline str tm_strformat(tm t, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a calendar time `tm` using C `strftime`
 *     and return a Unicode string `<'str'>`.
*/

  /* function exit code */
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.tm_strformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":1856
 *         cap <<= 1
 * 
 * cdef inline tm tm_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microseconds since the Unix epoch to 'struct:tm' `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_fr_us(PY_LONG_LONG __pyx_v_value) {
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_ord;
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  struct tm __pyx_v_out;
  struct tm __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save;

  /* "utils.pxd":1880
 *     with cython.cdivision(True):
 *         # Y/M/D from ordinal
 *         q = value / US_DAY; r = value % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += US_DAY
*/
  __pyx_v_q = (__pyx_v_value / __pyx_v_7cytimes_5utils_US_DAY);
  __pyx_v_r = (__pyx_v_value % __pyx_v_7cytimes_5utils_US_DAY);

  /* "utils.pxd":1881
 *         # Y/M/D from ordinal
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 *         ord = q + EPOCH_DAY
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1882
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:
 *             q -= 1; r += US_DAY             # <<<<<<<<<<<<<<
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)
*/
    __pyx_v_q = (__pyx_v_q - 1);
    __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_DAY);

    /* "utils.pxd":1881
 *         # Y/M/D from ordinal
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 *         ord = q + EPOCH_DAY
*/
  }

  /* "utils.pxd":1883
 *         if r < 0:
 *             q -= 1; r += US_DAY
 *         ord = q + EPOCH_DAY             # <<<<<<<<<<<<<<
 *         _ymd = ymd_fr_ord(ord)
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
  __pyx_v_ord = (__pyx_v_q + __pyx_v_7cytimes_5utils_EPOCH_DAY);

  /* "utils.pxd":1884
 *             q -= 1; r += US_DAY
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)             # <<<<<<<<<<<<<<
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_ord);

  /* "utils.pxd":1885
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *         # Time-of-day
*/
  __pyx_t_2 = __pyx_v__ymd.year;
  __pyx_t_3 = __pyx_v__ymd.month;
  __pyx_t_4 = __pyx_v__ymd.day;
  __pyx_v_yy = __pyx_t_2;
  __pyx_v_mm = __pyx_t_3;
  __pyx_v_dd = __pyx_t_4;

  /* "utils.pxd":1888
 * 
 *         # Time-of-day
 *         out.tm_hour = r / US_HOUR;   r %= US_HOUR             # <<<<<<<<<<<<<<
 *         out.tm_min  = r / US_MINUTE; r %= US_MINUTE
 *         out.tm_sec  = r / US_SECOND
*/
  __pyx_v_out.tm_hour = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_US_HOUR == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1888, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_HOUR, 0);

  /* "utils.pxd":1889
 *         # Time-of-day
 *         out.tm_hour = r / US_HOUR;   r %= US_HOUR
 *         out.tm_min  = r / US_MINUTE; r %= US_MINUTE             # <<<<<<<<<<<<<<
 *         out.tm_sec  = r / US_SECOND
 * 
*/
  __pyx_v_out.tm_min = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_MINUTE);
  if (unlikely(__pyx_v_7cytimes_5utils_US_MINUTE == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1889, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_MINUTE, 0);

  /* "utils.pxd":1890
 *         out.tm_hour = r / US_HOUR;   r %= US_HOUR
 *         out.tm_min  = r / US_MINUTE; r %= US_MINUTE
 *         out.tm_sec  = r / US_SECOND             # <<<<<<<<<<<<<<
 * 
 *         # Weekday
*/
  __pyx_v_out.tm_sec = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_SECOND);

  /* "utils.pxd":1893
 * 
 *         # Weekday
 *         r = (ord - 1) % 7  # 0=Monday             # <<<<<<<<<<<<<<
 *         out.tm_wday = r + 7 if r < 0 else r
 * 
*/
  __pyx_v_r = ((__pyx_v_ord - 1) % 7);

  /* "utils.pxd":1894
 *         # Weekday
 *         r = (ord - 1) % 7  # 0=Monday
 *         out.tm_wday = r + 7 if r < 0 else r             # <<<<<<<<<<<<<<
 * 
 *     # Remaining tm fields
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {
    __pyx_t_5 = (__pyx_v_r + 7);
  } else {
    __pyx_t_5 = __pyx_v_r;
  }
  __pyx_v_out.tm_wday = __pyx_t_5;

  /* "utils.pxd":1897
 * 
 *     # Remaining tm fields
 *     out.tm_year = yy             # <<<<<<<<<<<<<<
 *     out.tm_mon  = mm
 *     out.tm_mday = dd
*/
  __pyx_v_out.tm_year = __pyx_v_yy;

  /* "utils.pxd":1898
 *     # Remaining tm fields
 *     out.tm_year = yy
 *     out.tm_mon  = mm             # <<<<<<<<<<<<<<
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd
*/
  __pyx_v_out.tm_mon = __pyx_v_mm;

  /* "utils.pxd":1899
 *     out.tm_year = yy
 *     out.tm_mon  = mm
 *     out.tm_mday = dd             # <<<<<<<<<<<<<<
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown
*/
  __pyx_v_out.tm_mday = __pyx_v_dd;

  /* "utils.pxd":1900
 *     out.tm_mon  = mm
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd             # <<<<<<<<<<<<<<
 *     out.tm_isdst = -1  # unknown
 *     return out
*/
  __pyx_v_out.tm_yday = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm) + __pyx_v_dd);

  /* "utils.pxd":1901
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_isdst = -1;

  /* "utils.pxd":1902
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline tm tm_fr_sec(double value) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1856
 *         cap <<= 1
 * 
 * cdef inline tm tm_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microseconds since the Unix epoch to 'struct:tm' `<'struct:tm'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_WriteUnraisable("cytimes.utils.tm_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1904
 *     return out
 * 
 * cdef inline tm tm_fr_sec(double value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert from seconds (float) epoch to 'struct:tm' `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_tm_fr_sec(double __pyx_v_value) {
  PY_LONG_LONG __pyx_v_sec;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_ord;
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  struct tm __pyx_v_out;
  struct tm __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save;

  /* "utils.pxd":1921
 *     """
 *     cdef:
 *         long long sec = <long long> math.floor(value)             # <<<<<<<<<<<<<<
 *         long long q, r, ord
 *         int yy, mm, dd
*/
  __pyx_v_sec = ((PY_LONG_LONG)floor(__pyx_v_value));

  /* "utils.pxd":1929
 *     with cython.cdivision(True):
 *         # Y/M/D from ordinal
 *         q = sec / SS_DAY; r = sec % SS_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
  __pyx_v_q = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_DAY);
  __pyx_v_r = (__pyx_v_sec % __pyx_v_7cytimes_5utils_SS_DAY);

  /* "utils.pxd":1930
 *         # Y/M/D from ordinal
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *             r += SS_DAY
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1931
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *             r += SS_DAY
 *         ord = q + EPOCH_DAY
*/
    __pyx_v_q = (__pyx_v_q - 1);

    /* "utils.pxd":1932
 *         if r < 0:
 *             q -= 1
 *             r += SS_DAY             # <<<<<<<<<<<<<<
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)
*/
    __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_SS_DAY);

    /* "utils.pxd":1930
 *         # Y/M/D from ordinal
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *             r += SS_DAY
*/
  }

  /* "utils.pxd":1933
 *             q -= 1
 *             r += SS_DAY
 *         ord = q + EPOCH_DAY             # <<<<<<<<<<<<<<
 *         _ymd = ymd_fr_ord(ord)
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
  __pyx_v_ord = (__pyx_v_q + __pyx_v_7cytimes_5utils_EPOCH_DAY);

  /* "utils.pxd":1934
 *             r += SS_DAY
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)             # <<<<<<<<<<<<<<
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_ord);

  /* "utils.pxd":1935
 *         ord = q + EPOCH_DAY
 *         _ymd = ymd_fr_ord(ord)
 *         yy, mm, dd = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *         # Time-of-day
*/
  __pyx_t_2 = __pyx_v__ymd.year;
  __pyx_t_3 = __pyx_v__ymd.month;
  __pyx_t_4 = __pyx_v__ymd.day;
  __pyx_v_yy = __pyx_t_2;
  __pyx_v_mm = __pyx_t_3;
  __pyx_v_dd = __pyx_t_4;

  /* "utils.pxd":1938
 * 
 *         # Time-of-day
 *         out.tm_hour = r / SS_HOUR;   r %= SS_HOUR             # <<<<<<<<<<<<<<
 *         out.tm_min  = r / SS_MINUTE; r %= SS_MINUTE
 *         out.tm_sec  = r
*/
  __pyx_v_out.tm_hour = (__pyx_v_r / __pyx_v_7cytimes_5utils_SS_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_SS_HOUR == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1938, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_SS_HOUR, 0);

  /* "utils.pxd":1939
 *         # Time-of-day
 *         out.tm_hour = r / SS_HOUR;   r %= SS_HOUR
 *         out.tm_min  = r / SS_MINUTE; r %= SS_MINUTE             # <<<<<<<<<<<<<<
 *         out.tm_sec  = r
 * 
*/
  __pyx_v_out.tm_min = (__pyx_v_r / __pyx_v_7cytimes_5utils_SS_MINUTE);
  if (unlikely(__pyx_v_7cytimes_5utils_SS_MINUTE == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1939, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_SS_MINUTE, 0);

  /* "utils.pxd":1940
 *         out.tm_hour = r / SS_HOUR;   r %= SS_HOUR
 *         out.tm_min  = r / SS_MINUTE; r %= SS_MINUTE
 *         out.tm_sec  = r             # <<<<<<<<<<<<<<
 * 
 *         # Weekday
*/
  __pyx_v_out.tm_sec = __pyx_v_r;

  /* "utils.pxd":1943
 * 
 *         # Weekday
 *         r = (ord - 1) % 7  # 0=Monday             # <<<<<<<<<<<<<<
 *         out.tm_wday = r + 7 if r < 0 else r
 * 
*/
  __pyx_v_r = ((__pyx_v_ord - 1) % 7);

  /* "utils.pxd":1944
 *         # Weekday
 *         r = (ord - 1) % 7  # 0=Monday
 *         out.tm_wday = r + 7 if r < 0 else r             # <<<<<<<<<<<<<<
 * 
 *     # Remaining tm fields
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {
    __pyx_t_5 = (__pyx_v_r + 7);
  } else {
    __pyx_t_5 = __pyx_v_r;
  }
  __pyx_v_out.tm_wday = __pyx_t_5;

  /* "utils.pxd":1947
 * 
 *     # Remaining tm fields
 *     out.tm_year = yy             # <<<<<<<<<<<<<<
 *     out.tm_mon  = mm
 *     out.tm_mday = dd
*/
  __pyx_v_out.tm_year = __pyx_v_yy;

  /* "utils.pxd":1948
 *     # Remaining tm fields
 *     out.tm_year = yy
 *     out.tm_mon  = mm             # <<<<<<<<<<<<<<
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd
*/
  __pyx_v_out.tm_mon = __pyx_v_mm;

  /* "utils.pxd":1949
 *     out.tm_year = yy
 *     out.tm_mon  = mm
 *     out.tm_mday = dd             # <<<<<<<<<<<<<<
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown
*/
  __pyx_v_out.tm_mday = __pyx_v_dd;

  /* "utils.pxd":1950
 *     out.tm_mon  = mm
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd             # <<<<<<<<<<<<<<
 *     out.tm_isdst = -1  # unknown
 *     return out
*/
  __pyx_v_out.tm_yday = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm) + __pyx_v_dd);

  /* "utils.pxd":1951
 *     out.tm_mday = dd
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_isdst = -1;

  /* "utils.pxd":1952
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1  # unknown
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline hmsf hmsf_fr_us(long long value) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1904
 *     return out
 * 
 * cdef inline tm tm_fr_sec(double value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert from seconds (float) epoch to 'struct:tm' `<'struct:tm'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_WriteUnraisable("cytimes.utils.tm_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1954
 *     return out
 * 
 * cdef inline hmsf hmsf_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Extract time-of-day from microsecond ticks since epoch `<'struct:hmsf'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_hmsf __pyx_f_7cytimes_5utils_hmsf_fr_us(PY_LONG_LONG __pyx_v_value) {
  PY_LONG_LONG __pyx_v_r;
  __pyx_t_7cytimes_5utils_hmsf __pyx_v_out;
  __pyx_t_7cytimes_5utils_hmsf __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save;

  /* "utils.pxd":1971
 *     with cython.cdivision(True):
 *         # Hour
 *         r = value % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             r += US_DAY
*/
  __pyx_v_r = (__pyx_v_value % __pyx_v_7cytimes_5utils_US_DAY);

  /* "utils.pxd":1972
 *         # Hour
 *         r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += US_DAY
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":1973
 *         r = value % US_DAY
 *         if r < 0:
 *             r += US_DAY             # <<<<<<<<<<<<<<
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
 *         # Minute
*/
    __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_DAY);

    /* "utils.pxd":1972
 *         # Hour
 *         r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += US_DAY
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
*/
  }

  /* "utils.pxd":1974
 *         if r < 0:
 *             r += US_DAY
 *         out.hour   = r / US_HOUR;   r %= US_HOUR             # <<<<<<<<<<<<<<
 *         # Minute
 *         out.minute = r / US_MINUTE; r %= US_MINUTE
*/
  __pyx_v_out.hour = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_US_HOUR == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1974, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_HOUR, 0);

  /* "utils.pxd":1976
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
 *         # Minute
 *         out.minute = r / US_MINUTE; r %= US_MINUTE             # <<<<<<<<<<<<<<
 *         # Second
 *         out.second = r / US_SECOND; r %= US_SECOND
*/
  __pyx_v_out.minute = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_MINUTE);
  if (unlikely(__pyx_v_7cytimes_5utils_US_MINUTE == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1976, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_MINUTE, 0);

  /* "utils.pxd":1978
 *         out.minute = r / US_MINUTE; r %= US_MINUTE
 *         # Second
 *         out.second = r / US_SECOND; r %= US_SECOND             # <<<<<<<<<<<<<<
 *         # Microsecond
 *         out.microsecond = r
*/
  __pyx_v_out.second = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_SECOND);
  if (unlikely(__pyx_v_7cytimes_5utils_US_SECOND == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 1978, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_SECOND, 0);

  /* "utils.pxd":1980
 *         out.second = r / US_SECOND; r %= US_SECOND
 *         # Microsecond
 *         out.microsecond = r             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
  __pyx_v_out.microsecond = __pyx_v_r;

  /* "utils.pxd":1982
 *         out.microsecond = r
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline hmsf hmsf_fr_sec(double value) except *:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":1954
 *     return out
 * 
 * cdef inline hmsf hmsf_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Extract time-of-day from microsecond ticks since epoch `<'struct:hmsf'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_WriteUnraisable("cytimes.utils.hmsf_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1984
 *     return out
 * 
 * cdef inline hmsf hmsf_fr_sec(double value) except *:             # <<<<<<<<<<<<<<
 *     """Extract time-of-day from seconds (float) since epoch `<'struct:hmsf'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_hmsf __pyx_f_7cytimes_5utils_hmsf_fr_sec(double __pyx_v_value) {
  __pyx_t_7cytimes_5utils_hmsf __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":1995
 *         - hmsf.microsecond [0..999_999].
 *     """
 *     return hmsf_fr_us(sec_to_us(value))             # <<<<<<<<<<<<<<
 * 
 * # Calendar ---------------------------------------------------------------------------------------------
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_sec_to_us(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 1995, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_hmsf_fr_us(__pyx_t_1);
  goto __pyx_L0;

  /* "utils.pxd":1984
 *     return out
 * 
 * cdef inline hmsf hmsf_fr_sec(double value) except *:             # <<<<<<<<<<<<<<
 *     """Extract time-of-day from seconds (float) since epoch `<'struct:hmsf'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.hmsf_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":1999
 * # Calendar ---------------------------------------------------------------------------------------------
 * # . year
 * cdef inline bint is_leap_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine whether `year` is a leap year under
 *     the proleptic Gregorian rules `<'bool'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_leap_year(PY_LONG_LONG __pyx_v_year) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2007
 *     """
 *     with cython.cdivision(True):
 *         if (year % 4) != 0:             # <<<<<<<<<<<<<<
 *             return False
 *         if (year % 100) != 0:
*/
  __pyx_t_1 = ((__pyx_v_year % 4) != 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2008
 *     with cython.cdivision(True):
 *         if (year % 4) != 0:
 *             return False             # <<<<<<<<<<<<<<
 *         if (year % 100) != 0:
 *             return True
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":2007
 *     """
 *     with cython.cdivision(True):
 *         if (year % 4) != 0:             # <<<<<<<<<<<<<<
 *             return False
 *         if (year % 100) != 0:
*/
  }

  /* "utils.pxd":2009
 *         if (year % 4) != 0:
 *             return False
 *         if (year % 100) != 0:             # <<<<<<<<<<<<<<
 *             return True
 *         return (year % 400) == 0
*/
  __pyx_t_1 = ((__pyx_v_year % 0x64) != 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2010
 *             return False
 *         if (year % 100) != 0:
 *             return True             # <<<<<<<<<<<<<<
 *         return (year % 400) == 0
 * 
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "utils.pxd":2009
 *         if (year % 4) != 0:
 *             return False
 *         if (year % 100) != 0:             # <<<<<<<<<<<<<<
 *             return True
 *         return (year % 400) == 0
*/
  }

  /* "utils.pxd":2011
 *         if (year % 100) != 0:
 *             return True
 *         return (year % 400) == 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_long_year(long long year) noexcept nogil:
*/
  __pyx_r = ((__pyx_v_year % 0x190) == 0);
  goto __pyx_L0;

  /* "utils.pxd":1999
 * # Calendar ---------------------------------------------------------------------------------------------
 * # . year
 * cdef inline bint is_leap_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine whether `year` is a leap year under
 *     the proleptic Gregorian rules `<'bool'>`.
*/

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

/* "utils.pxd":2013
 *         return (year % 400) == 0
 * 
 * cdef inline bint is_long_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine whether `year` is a long year (has ISO week 53)
 *     under the proleptic Gregorian rules `<'bool'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_long_year(PY_LONG_LONG __pyx_v_year) {
  int __pyx_v_wkd;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2023
 *     :returns `<'bool'>`: True if `year` is a long year, else False.
 *     """
 *     cdef int wkd = ymd_weekday(year, 1, 1)             # <<<<<<<<<<<<<<
 *     return (wkd == 3) or (wkd == 2 and is_leap_year(year))
 * 
*/
  __pyx_v_wkd = __pyx_f_7cytimes_5utils_ymd_weekday(__pyx_v_year, 1, 1);

  /* "utils.pxd":2024
 *     """
 *     cdef int wkd = ymd_weekday(year, 1, 1)
 *     return (wkd == 3) or (wkd == 2 and is_leap_year(year))             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long leap_years(long long year, bint inclusive) noexcept nogil:
*/
  __pyx_t_2 = (__pyx_v_wkd == 3);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_wkd == 2);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":2013
 *         return (year % 400) == 0
 * 
 * cdef inline bint is_long_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine whether `year` is a long year (has ISO week 53)
 *     under the proleptic Gregorian rules `<'bool'>`.
*/

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

/* "utils.pxd":2026
 *     return (wkd == 3) or (wkd == 2 and is_leap_year(year))
 * 
 * cdef inline long long leap_years(long long year, bint inclusive) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Count leap years between `year` and `0001-01-01` under
 *     the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_leap_years(PY_LONG_LONG __pyx_v_year, int __pyx_v_inclusive) {
  PY_LONG_LONG __pyx_v_yy;
  PY_LONG_LONG __pyx_v_q4;
  PY_LONG_LONG __pyx_v_q100;
  PY_LONG_LONG __pyx_v_q400;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_out;
  PY_LONG_LONG __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  int __pyx_t_2;
  PY_LONG_LONG __pyx_t_3;

  /* "utils.pxd":2040
 *     """
 *     cdef:
 *         long long yy = year if inclusive else year - 1             # <<<<<<<<<<<<<<
 *         long long q4, q100, q400, r
 *         long long out
*/
  if (__pyx_v_inclusive) {
    __pyx_t_1 = __pyx_v_year;
  } else {
    __pyx_t_1 = (__pyx_v_year - 1);
  }
  __pyx_v_yy = __pyx_t_1;

  /* "utils.pxd":2046
 *     with cython.cdivision(True):
 *         # Positive
 *         if yy >= 0:             # <<<<<<<<<<<<<<
 *             out = (yy // 4) - (yy // 100) + (yy // 400)
 * 
*/
  __pyx_t_2 = (__pyx_v_yy >= 0);
  if (__pyx_t_2) {

    /* "utils.pxd":2047
 *         # Positive
 *         if yy >= 0:
 *             out = (yy // 4) - (yy // 100) + (yy // 400)             # <<<<<<<<<<<<<<
 * 
 *         # Negative
*/
    __pyx_v_out = (((__pyx_v_yy / 4) - (__pyx_v_yy / 0x64)) + (__pyx_v_yy / 0x190));

    /* "utils.pxd":2046
 *     with cython.cdivision(True):
 *         # Positive
 *         if yy >= 0:             # <<<<<<<<<<<<<<
 *             out = (yy // 4) - (yy // 100) + (yy // 400)
 * 
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2052
 *         else:
 *             # floor(yy / 4)
 *             q4, r = yy / 4, yy % 4             # <<<<<<<<<<<<<<
 *             if r != 0:
 *                 q4 -= 1
*/
  /*else*/ {
    __pyx_t_1 = (__pyx_v_yy / 4);
    __pyx_t_3 = (__pyx_v_yy % 4);
    __pyx_v_q4 = __pyx_t_1;
    __pyx_v_r = __pyx_t_3;

    /* "utils.pxd":2053
 *             # floor(yy / 4)
 *             q4, r = yy / 4, yy % 4
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q4 -= 1
 *             # floor(yy / 100)
*/
    __pyx_t_2 = (__pyx_v_r != 0);
    if (__pyx_t_2) {

      /* "utils.pxd":2054
 *             q4, r = yy / 4, yy % 4
 *             if r != 0:
 *                 q4 -= 1             # <<<<<<<<<<<<<<
 *             # floor(yy / 100)
 *             q100, r = yy / 100, yy % 100
*/
      __pyx_v_q4 = (__pyx_v_q4 - 1);

      /* "utils.pxd":2053
 *             # floor(yy / 4)
 *             q4, r = yy / 4, yy % 4
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q4 -= 1
 *             # floor(yy / 100)
*/
    }

    /* "utils.pxd":2056
 *                 q4 -= 1
 *             # floor(yy / 100)
 *             q100, r = yy / 100, yy % 100             # <<<<<<<<<<<<<<
 *             if r != 0:
 *                 q100 -= 1
*/
    __pyx_t_3 = (__pyx_v_yy / 0x64);
    __pyx_t_1 = (__pyx_v_yy % 0x64);
    __pyx_v_q100 = __pyx_t_3;
    __pyx_v_r = __pyx_t_1;

    /* "utils.pxd":2057
 *             # floor(yy / 100)
 *             q100, r = yy / 100, yy % 100
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q100 -= 1
 *             # floor(yy / 400)
*/
    __pyx_t_2 = (__pyx_v_r != 0);
    if (__pyx_t_2) {

      /* "utils.pxd":2058
 *             q100, r = yy / 100, yy % 100
 *             if r != 0:
 *                 q100 -= 1             # <<<<<<<<<<<<<<
 *             # floor(yy / 400)
 *             q400, r = yy / 400, yy % 400
*/
      __pyx_v_q100 = (__pyx_v_q100 - 1);

      /* "utils.pxd":2057
 *             # floor(yy / 100)
 *             q100, r = yy / 100, yy % 100
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q100 -= 1
 *             # floor(yy / 400)
*/
    }

    /* "utils.pxd":2060
 *                 q100 -= 1
 *             # floor(yy / 400)
 *             q400, r = yy / 400, yy % 400             # <<<<<<<<<<<<<<
 *             if r != 0:
 *                 q400 -= 1
*/
    __pyx_t_1 = (__pyx_v_yy / 0x190);
    __pyx_t_3 = (__pyx_v_yy % 0x190);
    __pyx_v_q400 = __pyx_t_1;
    __pyx_v_r = __pyx_t_3;

    /* "utils.pxd":2061
 *             # floor(yy / 400)
 *             q400, r = yy / 400, yy % 400
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q400 -= 1
 *             out = q4 - q100 + q400
*/
    __pyx_t_2 = (__pyx_v_r != 0);
    if (__pyx_t_2) {

      /* "utils.pxd":2062
 *             q400, r = yy / 400, yy % 400
 *             if r != 0:
 *                 q400 -= 1             # <<<<<<<<<<<<<<
 *             out = q4 - q100 + q400
 * 
*/
      __pyx_v_q400 = (__pyx_v_q400 - 1);

      /* "utils.pxd":2061
 *             # floor(yy / 400)
 *             q400, r = yy / 400, yy % 400
 *             if r != 0:             # <<<<<<<<<<<<<<
 *                 q400 -= 1
 *             out = q4 - q100 + q400
*/
    }

    /* "utils.pxd":2063
 *             if r != 0:
 *                 q400 -= 1
 *             out = q4 - q100 + q400             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    __pyx_v_out = ((__pyx_v_q4 - __pyx_v_q100) + __pyx_v_q400);
  }
  __pyx_L3:;

  /* "utils.pxd":2065
 *             out = q4 - q100 + q400
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long leaps_bt_years(long long year1, long long year2) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2026
 *     return (wkd == 3) or (wkd == 2 and is_leap_year(year))
 * 
 * cdef inline long long leap_years(long long year, bint inclusive) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Count leap years between `year` and `0001-01-01` under
 *     the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2067
 *     return out
 * 
 * cdef inline long long leaps_bt_years(long long year1, long long year2) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the total number of Gregorian leap years between `year1` and `year2`
 *     under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_leaps_bt_years(PY_LONG_LONG __pyx_v_year1, PY_LONG_LONG __pyx_v_year2) {
  PY_LONG_LONG __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2075
 *     :returns `<'int'>`: Number of leap years between the two years.
 *     """
 *     if year1 > year2:             # <<<<<<<<<<<<<<
 *         return leap_years(year1, False) - leap_years(year2, False)
 *     else:
*/
  __pyx_t_1 = (__pyx_v_year1 > __pyx_v_year2);
  if (__pyx_t_1) {

    /* "utils.pxd":2076
 *     """
 *     if year1 > year2:
 *         return leap_years(year1, False) - leap_years(year2, False)             # <<<<<<<<<<<<<<
 *     else:
 *         return leap_years(year2, False) - leap_years(year1, False)
*/
    __pyx_r = (__pyx_f_7cytimes_5utils_leap_years(__pyx_v_year1, 0) - __pyx_f_7cytimes_5utils_leap_years(__pyx_v_year2, 0));
    goto __pyx_L0;

    /* "utils.pxd":2075
 *     :returns `<'int'>`: Number of leap years between the two years.
 *     """
 *     if year1 > year2:             # <<<<<<<<<<<<<<
 *         return leap_years(year1, False) - leap_years(year2, False)
 *     else:
*/
  }

  /* "utils.pxd":2078
 *         return leap_years(year1, False) - leap_years(year2, False)
 *     else:
 *         return leap_years(year2, False) - leap_years(year1, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int days_in_year(long long year) noexcept nogil:
*/
  /*else*/ {
    __pyx_r = (__pyx_f_7cytimes_5utils_leap_years(__pyx_v_year2, 0) - __pyx_f_7cytimes_5utils_leap_years(__pyx_v_year1, 0));
    goto __pyx_L0;
  }

  /* "utils.pxd":2067
 *     return out
 * 
 * cdef inline long long leaps_bt_years(long long year1, long long year2) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the total number of Gregorian leap years between `year1` and `year2`
 *     under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2080
 *         return leap_years(year2, False) - leap_years(year1, False)
 * 
 * cdef inline int days_in_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine the number of days in `year` under the
 *     proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_year(PY_LONG_LONG __pyx_v_year) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2087
 *     :returns `<'int'>`: 366 for leap years, else 365.
 *     """
 *     return 366 if is_leap_year(year) else 365             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long days_bf_year(long long year) noexcept nogil:
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);
  if (__pyx_t_2) {
    __pyx_t_1 = 0x16E;
  } else {
    __pyx_t_1 = 0x16D;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":2080
 *         return leap_years(year2, False) - leap_years(year1, False)
 * 
 * cdef inline int days_in_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Determine the number of days in `year` under the
 *     proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2089
 *     return 366 if is_leap_year(year) else 365
 * 
 * cdef inline long long days_bf_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the number of days strictly before `January 1` of `year`
 *     under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_days_bf_year(PY_LONG_LONG __pyx_v_year) {
  PY_LONG_LONG __pyx_v_y0;
  PY_LONG_LONG __pyx_r;

  /* "utils.pxd":2102
 *     :returns `<'int'>`: Signed count of days before Jan-1 of `year`.
 *     """
 *     cdef long long y0 = year - 1  # 0-based year             # <<<<<<<<<<<<<<
 *     return 365 * y0 + leap_years(y0, True)
 * 
*/
  __pyx_v_y0 = (__pyx_v_year - 1);

  /* "utils.pxd":2103
 *     """
 *     cdef long long y0 = year - 1  # 0-based year
 *     return 365 * y0 + leap_years(y0, True)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int day_of_year(long long year, int month, int day) noexcept nogil:
*/
  __pyx_r = ((0x16D * __pyx_v_y0) + __pyx_f_7cytimes_5utils_leap_years(__pyx_v_y0, 1));
  goto __pyx_L0;

  /* "utils.pxd":2089
 *     return 366 if is_leap_year(year) else 365
 * 
 * cdef inline long long days_bf_year(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the number of days strictly before `January 1` of `year`
 *     under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2105
 *     return 365 * y0 + leap_years(y0, True)
 * 
 * cdef inline int day_of_year(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the `1-based` ordinal day-of-year for the given Y/M/D
 *     under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_day_of_year(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;

  /* "utils.pxd":2116
 *     :returns `<'int'>`: `1..365/366`  ordinal day of year (Jan-01  1).
 *     """
 *     if day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
*/
  __pyx_t_1 = (__pyx_v_day > 28);
  if (__pyx_t_1) {

    /* "utils.pxd":2117
 *     """
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))             # <<<<<<<<<<<<<<
 *     elif day < 1:
 *         day = 1
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_year, __pyx_v_month);
    __pyx_t_3 = __pyx_v_day;
    __pyx_t_1 = (__pyx_t_2 < __pyx_t_3);
    if (__pyx_t_1) {
      __pyx_t_4 = __pyx_t_2;
    } else {
      __pyx_t_4 = __pyx_t_3;
    }
    __pyx_v_day = __pyx_t_4;

    /* "utils.pxd":2116
 *     :returns `<'int'>`: `1..365/366`  ordinal day of year (Jan-01  1).
 *     """
 *     if day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2118
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:             # <<<<<<<<<<<<<<
 *         day = 1
 *     return days_bf_month(year, month) + day
*/
  __pyx_t_1 = (__pyx_v_day < 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2119
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
 *         day = 1             # <<<<<<<<<<<<<<
 *     return days_bf_month(year, month) + day
 * 
*/
    __pyx_v_day = 1;

    /* "utils.pxd":2118
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:             # <<<<<<<<<<<<<<
 *         day = 1
 *     return days_bf_month(year, month) + day
*/
  }
  __pyx_L3:;

  /* "utils.pxd":2120
 *     elif day < 1:
 *         day = 1
 *     return days_bf_month(year, month) + day             # <<<<<<<<<<<<<<
 * 
 * # . quarter
*/
  __pyx_r = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_year, __pyx_v_month) + __pyx_v_day);
  goto __pyx_L0;

  /* "utils.pxd":2105
 *     return 365 * y0 + leap_years(y0, True)
 * 
 * cdef inline int day_of_year(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the `1-based` ordinal day-of-year for the given Y/M/D
 *     under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2123
 * 
 * # . quarter
 * cdef inline int quarter_of_month(int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the calendar quarter index (1..4) for `month`
 *     under the Gregorian calendar `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_quarter_of_month(int __pyx_v_month) {
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2133
 *     """
 *     # Jan - Mar & out-of-range: Q1
 *     if month < 4:             # <<<<<<<<<<<<<<
 *         return 1
 *     # Apr - Jun: Q2
*/
  __pyx_t_1 = (__pyx_v_month < 4);
  if (__pyx_t_1) {

    /* "utils.pxd":2134
 *     # Jan - Mar & out-of-range: Q1
 *     if month < 4:
 *         return 1             # <<<<<<<<<<<<<<
 *     # Apr - Jun: Q2
 *     elif month < 7:
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "utils.pxd":2133
 *     """
 *     # Jan - Mar & out-of-range: Q1
 *     if month < 4:             # <<<<<<<<<<<<<<
 *         return 1
 *     # Apr - Jun: Q2
*/
  }

  /* "utils.pxd":2136
 *         return 1
 *     # Apr - Jun: Q2
 *     elif month < 7:             # <<<<<<<<<<<<<<
 *         return 2
 *     # Jul - Sep: Q3
*/
  __pyx_t_1 = (__pyx_v_month < 7);
  if (__pyx_t_1) {

    /* "utils.pxd":2137
 *     # Apr - Jun: Q2
 *     elif month < 7:
 *         return 2             # <<<<<<<<<<<<<<
 *     # Jul - Sep: Q3
 *     elif month < 10:
*/
    __pyx_r = 2;
    goto __pyx_L0;

    /* "utils.pxd":2136
 *         return 1
 *     # Apr - Jun: Q2
 *     elif month < 7:             # <<<<<<<<<<<<<<
 *         return 2
 *     # Jul - Sep: Q3
*/
  }

  /* "utils.pxd":2139
 *         return 2
 *     # Jul - Sep: Q3
 *     elif month < 10:             # <<<<<<<<<<<<<<
 *         return 3
 *     # Oct - Dec & out-of-range: Q4
*/
  __pyx_t_1 = (__pyx_v_month < 10);
  if (__pyx_t_1) {

    /* "utils.pxd":2140
 *     # Jul - Sep: Q3
 *     elif month < 10:
 *         return 3             # <<<<<<<<<<<<<<
 *     # Oct - Dec & out-of-range: Q4
 *     else:
*/
    __pyx_r = 3;
    goto __pyx_L0;

    /* "utils.pxd":2139
 *         return 2
 *     # Jul - Sep: Q3
 *     elif month < 10:             # <<<<<<<<<<<<<<
 *         return 3
 *     # Oct - Dec & out-of-range: Q4
*/
  }

  /* "utils.pxd":2143
 *     # Oct - Dec & out-of-range: Q4
 *     else:
 *         return 4             # <<<<<<<<<<<<<<
 * 
 * cdef inline int days_in_quarter(long long year, int month) noexcept nogil:
*/
  /*else*/ {
    __pyx_r = 4;
    goto __pyx_L0;
  }

  /* "utils.pxd":2123
 * 
 * # . quarter
 * cdef inline int quarter_of_month(int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the calendar quarter index (1..4) for `month`
 *     under the Gregorian calendar `<'int'>`.
*/

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

/* "utils.pxd":2145
 *         return 4
 * 
 * cdef inline int days_in_quarter(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days in calendar quarter containing
 *     `month` in `year` under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_quarter(PY_LONG_LONG __pyx_v_year, int __pyx_v_month) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2157
 *         - Leap     [Q1=91, Q2=91, Q3=92, Q4=92]
 *     """
 *     if month < 4: # Q1             # <<<<<<<<<<<<<<
 *         return 91 if is_leap_year(year) else 90
 *     elif month < 7:
*/
  __pyx_t_1 = (__pyx_v_month < 4);
  if (__pyx_t_1) {

    /* "utils.pxd":2158
 *     """
 *     if month < 4: # Q1
 *         return 91 if is_leap_year(year) else 90             # <<<<<<<<<<<<<<
 *     elif month < 7:
 *         return 91  # Q2
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);
    if (__pyx_t_1) {
      __pyx_t_2 = 91;
    } else {
      __pyx_t_2 = 90;
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":2157
 *         - Leap     [Q1=91, Q2=91, Q3=92, Q4=92]
 *     """
 *     if month < 4: # Q1             # <<<<<<<<<<<<<<
 *         return 91 if is_leap_year(year) else 90
 *     elif month < 7:
*/
  }

  /* "utils.pxd":2159
 *     if month < 4: # Q1
 *         return 91 if is_leap_year(year) else 90
 *     elif month < 7:             # <<<<<<<<<<<<<<
 *         return 91  # Q2
 *     else:
*/
  __pyx_t_1 = (__pyx_v_month < 7);
  if (__pyx_t_1) {

    /* "utils.pxd":2160
 *         return 91 if is_leap_year(year) else 90
 *     elif month < 7:
 *         return 91  # Q2             # <<<<<<<<<<<<<<
 *     else:
 *         return 92  # Q3 & Q4
*/
    __pyx_r = 91;
    goto __pyx_L0;

    /* "utils.pxd":2159
 *     if month < 4: # Q1
 *         return 91 if is_leap_year(year) else 90
 *     elif month < 7:             # <<<<<<<<<<<<<<
 *         return 91  # Q2
 *     else:
*/
  }

  /* "utils.pxd":2162
 *         return 91  # Q2
 *     else:
 *         return 92  # Q3 & Q4             # <<<<<<<<<<<<<<
 * 
 * cdef inline int days_bf_quarter(long long year, int month) noexcept nogil:
*/
  /*else*/ {
    __pyx_r = 92;
    goto __pyx_L0;
  }

  /* "utils.pxd":2145
 *         return 4
 * 
 * cdef inline int days_in_quarter(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days in calendar quarter containing
 *     `month` in `year` under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2164
 *         return 92  # Q3 & Q4
 * 
 * cdef inline int days_bf_quarter(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days strictly before the first day of the
 *     calendar quarter containing `month` in `year` under the proleptic
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_bf_quarter(PY_LONG_LONG __pyx_v_year, int __pyx_v_month) {
  int __pyx_v_leap;
  int __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2177
 *         - Leap     [Q1=0, Q2=91, Q3=182, Q4=274]
 *     """
 *     if month < 4:             # <<<<<<<<<<<<<<
 *         return 0  # Q1
 *     cdef int leap = <int> is_leap_year(year)
*/
  __pyx_t_1 = (__pyx_v_month < 4);
  if (__pyx_t_1) {

    /* "utils.pxd":2178
 *     """
 *     if month < 4:
 *         return 0  # Q1             # <<<<<<<<<<<<<<
 *     cdef int leap = <int> is_leap_year(year)
 *     if month < 7:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":2177
 *         - Leap     [Q1=0, Q2=91, Q3=182, Q4=274]
 *     """
 *     if month < 4:             # <<<<<<<<<<<<<<
 *         return 0  # Q1
 *     cdef int leap = <int> is_leap_year(year)
*/
  }

  /* "utils.pxd":2179
 *     if month < 4:
 *         return 0  # Q1
 *     cdef int leap = <int> is_leap_year(year)             # <<<<<<<<<<<<<<
 *     if month < 7:
 *         return 90 + leap  # Q2
*/
  __pyx_v_leap = ((int)__pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year));

  /* "utils.pxd":2180
 *         return 0  # Q1
 *     cdef int leap = <int> is_leap_year(year)
 *     if month < 7:             # <<<<<<<<<<<<<<
 *         return 90 + leap  # Q2
 *     elif month < 10:
*/
  __pyx_t_1 = (__pyx_v_month < 7);
  if (__pyx_t_1) {

    /* "utils.pxd":2181
 *     cdef int leap = <int> is_leap_year(year)
 *     if month < 7:
 *         return 90 + leap  # Q2             # <<<<<<<<<<<<<<
 *     elif month < 10:
 *         return 181 + leap # Q3
*/
    __pyx_r = (90 + __pyx_v_leap);
    goto __pyx_L0;

    /* "utils.pxd":2180
 *         return 0  # Q1
 *     cdef int leap = <int> is_leap_year(year)
 *     if month < 7:             # <<<<<<<<<<<<<<
 *         return 90 + leap  # Q2
 *     elif month < 10:
*/
  }

  /* "utils.pxd":2182
 *     if month < 7:
 *         return 90 + leap  # Q2
 *     elif month < 10:             # <<<<<<<<<<<<<<
 *         return 181 + leap # Q3
 *     else:
*/
  __pyx_t_1 = (__pyx_v_month < 10);
  if (__pyx_t_1) {

    /* "utils.pxd":2183
 *         return 90 + leap  # Q2
 *     elif month < 10:
 *         return 181 + leap # Q3             # <<<<<<<<<<<<<<
 *     else:
 *         return 273 + leap # Q4
*/
    __pyx_r = (0xB5 + __pyx_v_leap);
    goto __pyx_L0;

    /* "utils.pxd":2182
 *     if month < 7:
 *         return 90 + leap  # Q2
 *     elif month < 10:             # <<<<<<<<<<<<<<
 *         return 181 + leap # Q3
 *     else:
*/
  }

  /* "utils.pxd":2185
 *         return 181 + leap # Q3
 *     else:
 *         return 273 + leap # Q4             # <<<<<<<<<<<<<<
 * 
 * cdef inline int day_of_quarter(long long year, int month, int day) noexcept nogil:
*/
  /*else*/ {
    __pyx_r = (0x111 + __pyx_v_leap);
    goto __pyx_L0;
  }

  /* "utils.pxd":2164
 *         return 92  # Q3 & Q4
 * 
 * cdef inline int days_bf_quarter(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days strictly before the first day of the
 *     calendar quarter containing `month` in `year` under the proleptic
*/

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

/* "utils.pxd":2187
 *         return 273 + leap # Q4
 * 
 * cdef inline int day_of_quarter(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the number of days between the 1st day of the quarter and the
 *     given Y/M/D under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_day_of_quarter(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  int __pyx_r;

  /* "utils.pxd":2198
 *     :returns `<'int'>`: 0-based days since the quarter start.
 *     """
 *     return day_of_year(year, month, day) - days_bf_quarter(year, month)             # <<<<<<<<<<<<<<
 * 
 * # . month
*/
  __pyx_r = (__pyx_f_7cytimes_5utils_day_of_year(__pyx_v_year, __pyx_v_month, __pyx_v_day) - __pyx_f_7cytimes_5utils_days_bf_quarter(__pyx_v_year, __pyx_v_month));
  goto __pyx_L0;

  /* "utils.pxd":2187
 *         return 273 + leap # Q4
 * 
 * cdef inline int day_of_quarter(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the number of days between the 1st day of the quarter and the
 *     given Y/M/D under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2201
 * 
 * # . month
 * cdef inline int days_in_month(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days in `month` of `year` under
 *     the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_in_month(PY_LONG_LONG __pyx_v_year, int __pyx_v_month) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2211
 *     """
 *     # Month Jan(1) or out-of-range: 31 days
 *     if month <= 1:             # <<<<<<<<<<<<<<
 *         return 31
 *     # Month Feb(2): 28 or 29 days (leap)
*/
  __pyx_t_1 = (__pyx_v_month <= 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2212
 *     # Month Jan(1) or out-of-range: 31 days
 *     if month <= 1:
 *         return 31             # <<<<<<<<<<<<<<
 *     # Month Feb(2): 28 or 29 days (leap)
 *     elif month == 2:
*/
    __pyx_r = 31;
    goto __pyx_L0;

    /* "utils.pxd":2211
 *     """
 *     # Month Jan(1) or out-of-range: 31 days
 *     if month <= 1:             # <<<<<<<<<<<<<<
 *         return 31
 *     # Month Feb(2): 28 or 29 days (leap)
*/
  }

  /* "utils.pxd":2214
 *         return 31
 *     # Month Feb(2): 28 or 29 days (leap)
 *     elif month == 2:             # <<<<<<<<<<<<<<
 *         return 29 if is_leap_year(year) else 28
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
*/
  __pyx_t_1 = (__pyx_v_month == 2);
  if (__pyx_t_1) {

    /* "utils.pxd":2215
 *     # Month Feb(2): 28 or 29 days (leap)
 *     elif month == 2:
 *         return 29 if is_leap_year(year) else 28             # <<<<<<<<<<<<<<
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
 *     elif month == 4 or month == 6 or month == 9 or month == 11:
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);
    if (__pyx_t_1) {
      __pyx_t_2 = 29;
    } else {
      __pyx_t_2 = 28;
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":2214
 *         return 31
 *     # Month Feb(2): 28 or 29 days (leap)
 *     elif month == 2:             # <<<<<<<<<<<<<<
 *         return 29 if is_leap_year(year) else 28
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
*/
  }

  /* "utils.pxd":2217
 *         return 29 if is_leap_year(year) else 28
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
 *     elif month == 4 or month == 6 or month == 9 or month == 11:             # <<<<<<<<<<<<<<
 *         return 30
 *     # Other months: 31 days
*/
  switch (__pyx_v_month) {
    case 4:
    case 6:
    case 9:
    case 11:
    __pyx_t_1 = 1;
    break;
    default:
    __pyx_t_1 = 0;
    break;
  }
  if (__pyx_t_1) {

    /* "utils.pxd":2218
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
 *     elif month == 4 or month == 6 or month == 9 or month == 11:
 *         return 30             # <<<<<<<<<<<<<<
 *     # Other months: 31 days
 *     else:
*/
    __pyx_r = 30;
    goto __pyx_L0;

    /* "utils.pxd":2217
 *         return 29 if is_leap_year(year) else 28
 *     # Month Apr(4), Jun(6), Sep(9), Nov(11): 30 days
 *     elif month == 4 or month == 6 or month == 9 or month == 11:             # <<<<<<<<<<<<<<
 *         return 30
 *     # Other months: 31 days
*/
  }

  /* "utils.pxd":2221
 *     # Other months: 31 days
 *     else:
 *         return 31             # <<<<<<<<<<<<<<
 * 
 * cdef inline int days_bf_month(long long year, int month) noexcept nogil:
*/
  /*else*/ {
    __pyx_r = 31;
    goto __pyx_L0;
  }

  /* "utils.pxd":2201
 * 
 * # . month
 * cdef inline int days_in_month(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days in `month` of `year` under
 *     the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2223
 *         return 31
 * 
 * cdef inline int days_bf_month(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days strictly before the first day of `month`
 *     in `year` under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_days_bf_month(PY_LONG_LONG __pyx_v_year, int __pyx_v_month) {
  int __pyx_v_days;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  long __pyx_t_3;

  /* "utils.pxd":2233
 *     """
 *     # Jan(1) or out-of-range: 0 days
 *     if month <= 1:             # <<<<<<<<<<<<<<
 *         return 0
 *     # Feb(2): 31 days
*/
  __pyx_t_1 = (__pyx_v_month <= 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2234
 *     # Jan(1) or out-of-range: 0 days
 *     if month <= 1:
 *         return 0             # <<<<<<<<<<<<<<
 *     # Feb(2): 31 days
 *     if month == 2:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":2233
 *     """
 *     # Jan(1) or out-of-range: 0 days
 *     if month <= 1:             # <<<<<<<<<<<<<<
 *         return 0
 *     # Feb(2): 31 days
*/
  }

  /* "utils.pxd":2236
 *         return 0
 *     # Feb(2): 31 days
 *     if month == 2:             # <<<<<<<<<<<<<<
 *         return 31
 *     # Mar(3)..Dec(12)
*/
  __pyx_t_1 = (__pyx_v_month == 2);
  if (__pyx_t_1) {

    /* "utils.pxd":2237
 *     # Feb(2): 31 days
 *     if month == 2:
 *         return 31             # <<<<<<<<<<<<<<
 *     # Mar(3)..Dec(12)
 *     cdef int days = DAYS_BR_MONTH[month - 1] if month < 12 else 334
*/
    __pyx_r = 31;
    goto __pyx_L0;

    /* "utils.pxd":2236
 *         return 0
 *     # Feb(2): 31 days
 *     if month == 2:             # <<<<<<<<<<<<<<
 *         return 31
 *     # Mar(3)..Dec(12)
*/
  }

  /* "utils.pxd":2239
 *         return 31
 *     # Mar(3)..Dec(12)
 *     cdef int days = DAYS_BR_MONTH[month - 1] if month < 12 else 334             # <<<<<<<<<<<<<<
 *     return days + 1 if is_leap_year(year) else days
 * 
*/
  __pyx_t_1 = (__pyx_v_month < 12);
  if (__pyx_t_1) {
    __pyx_t_2 = (__pyx_v_7cytimes_5utils_DAYS_BR_MONTH[(__pyx_v_month - 1)]);
  } else {
    __pyx_t_2 = 0x14E;
  }
  __pyx_v_days = __pyx_t_2;

  /* "utils.pxd":2240
 *     # Mar(3)..Dec(12)
 *     cdef int days = DAYS_BR_MONTH[month - 1] if month < 12 else 334
 *     return days + 1 if is_leap_year(year) else days             # <<<<<<<<<<<<<<
 * 
 * # . week
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);
  if (__pyx_t_1) {
    __pyx_t_3 = (__pyx_v_days + 1);
  } else {
    __pyx_t_3 = __pyx_v_days;
  }
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;

  /* "utils.pxd":2223
 *         return 31
 * 
 * cdef inline int days_bf_month(long long year, int month) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the number of days strictly before the first day of `month`
 *     in `year` under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2243
 * 
 * # . week
 * cdef inline int ymd_weekday(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the weekday for Y/M/D (`0=Mon  6=Sun`) under
 *     the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_weekday(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PY_LONG_LONG __pyx_v_ord0;
  PY_LONG_LONG __pyx_v_r;
  int __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2254
 *     :returns `<'int'>`: Weekday number in 0..6 (Mon=0).
 *     """
 *     cdef long long ord0 = ymd_to_ord(year, month, day) - 1  # 0-based, Mon=0 at 0001-01-01             # <<<<<<<<<<<<<<
 *     cdef long long r
 *     with cython.cdivision(True):
*/
  __pyx_v_ord0 = (__pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_year, __pyx_v_month, __pyx_v_day) - 1);

  /* "utils.pxd":2257
 *     cdef long long r
 *     with cython.cdivision(True):
 *         r = ord0 % 7             # <<<<<<<<<<<<<<
 *     return <int> (r + 7 if r < 0 else r)
 * 
*/
  __pyx_v_r = (__pyx_v_ord0 % 7);

  /* "utils.pxd":2258
 *     with cython.cdivision(True):
 *         r = ord0 % 7
 *     return <int> (r + 7 if r < 0 else r)             # <<<<<<<<<<<<<<
 * 
 * # . iso
*/
  __pyx_t_2 = (__pyx_v_r < 0);
  if (__pyx_t_2) {
    __pyx_t_1 = (__pyx_v_r + 7);
  } else {
    __pyx_t_1 = __pyx_v_r;
  }
  __pyx_r = ((int)__pyx_t_1);
  goto __pyx_L0;

  /* "utils.pxd":2243
 * 
 * # . week
 * cdef inline int ymd_weekday(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the weekday for Y/M/D (`0=Mon  6=Sun`) under
 *     the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2261
 * 
 * # . iso
 * cdef inline iso ymd_isocalendar(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar from the Gregorian date Y/M/D `<'struct:iso'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_iso __pyx_f_7cytimes_5utils_ymd_isocalendar(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_ord_w1;
  PY_LONG_LONG __pyx_v_iso_year;
  PY_LONG_LONG __pyx_v_iso_week;
  PY_LONG_LONG __pyx_v_iso_wday;
  PY_LONG_LONG __pyx_v_w1;
  PY_LONG_LONG __pyx_v_w1_next;
  PY_LONG_LONG __pyx_v_r;
  __pyx_t_7cytimes_5utils_iso __pyx_v_out;
  __pyx_t_7cytimes_5utils_iso __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2277
 *     # Find ISO year by comparing against ISO week-1 Monday boundaries
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)             # <<<<<<<<<<<<<<
 *         long long ord_w1 = iso_week1_mon_ord(year)
 *         long long iso_year, iso_week, iso_wday, w1, w1_next, r
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_year, __pyx_v_month, __pyx_v_day);

  /* "utils.pxd":2278
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)
 *         long long ord_w1 = iso_week1_mon_ord(year)             # <<<<<<<<<<<<<<
 *         long long iso_year, iso_week, iso_wday, w1, w1_next, r
 *         iso out
*/
  __pyx_v_ord_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord(__pyx_v_year);

  /* "utils.pxd":2283
 * 
 *     # ISO year
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         iso_year = year - 1
 *         w1 = iso_week1_mon_ord(iso_year)
*/
  __pyx_t_1 = (__pyx_v_ord < __pyx_v_ord_w1);
  if (__pyx_t_1) {

    /* "utils.pxd":2284
 *     # ISO year
 *     if ord < ord_w1:
 *         iso_year = year - 1             # <<<<<<<<<<<<<<
 *         w1 = iso_week1_mon_ord(iso_year)
 *     else:
*/
    __pyx_v_iso_year = (__pyx_v_year - 1);

    /* "utils.pxd":2285
 *     if ord < ord_w1:
 *         iso_year = year - 1
 *         w1 = iso_week1_mon_ord(iso_year)             # <<<<<<<<<<<<<<
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
*/
    __pyx_v_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord(__pyx_v_iso_year);

    /* "utils.pxd":2283
 * 
 *     # ISO year
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         iso_year = year - 1
 *         w1 = iso_week1_mon_ord(iso_year)
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2287
 *         w1 = iso_week1_mon_ord(iso_year)
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)             # <<<<<<<<<<<<<<
 *         if ord >= w1_next:
 *             iso_year = year + 1
*/
  /*else*/ {
    __pyx_v_w1_next = __pyx_f_7cytimes_5utils_iso_week1_mon_ord((__pyx_v_year + 1));

    /* "utils.pxd":2288
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
 *         if ord >= w1_next:             # <<<<<<<<<<<<<<
 *             iso_year = year + 1
 *             w1 = w1_next
*/
    __pyx_t_1 = (__pyx_v_ord >= __pyx_v_w1_next);
    if (__pyx_t_1) {

      /* "utils.pxd":2289
 *         w1_next = iso_week1_mon_ord(year + 1)
 *         if ord >= w1_next:
 *             iso_year = year + 1             # <<<<<<<<<<<<<<
 *             w1 = w1_next
 *         else:
*/
      __pyx_v_iso_year = (__pyx_v_year + 1);

      /* "utils.pxd":2290
 *         if ord >= w1_next:
 *             iso_year = year + 1
 *             w1 = w1_next             # <<<<<<<<<<<<<<
 *         else:
 *             iso_year = year
*/
      __pyx_v_w1 = __pyx_v_w1_next;

      /* "utils.pxd":2288
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
 *         if ord >= w1_next:             # <<<<<<<<<<<<<<
 *             iso_year = year + 1
 *             w1 = w1_next
*/
      goto __pyx_L4;
    }

    /* "utils.pxd":2292
 *             w1 = w1_next
 *         else:
 *             iso_year = year             # <<<<<<<<<<<<<<
 *             w1 = ord_w1
 * 
*/
    /*else*/ {
      __pyx_v_iso_year = __pyx_v_year;

      /* "utils.pxd":2293
 *         else:
 *             iso_year = year
 *             w1 = ord_w1             # <<<<<<<<<<<<<<
 * 
 *     # ISO week & weekday
*/
      __pyx_v_w1 = __pyx_v_ord_w1;
    }
    __pyx_L4:;
  }
  __pyx_L3:;

  /* "utils.pxd":2297
 *     # ISO week & weekday
 *     with cython.cdivision(True):
 *         iso_week = (ord - w1) // 7 + 1             # <<<<<<<<<<<<<<
 *         r = (ord - 1) % 7
 *         if r < 0:
*/
  __pyx_v_iso_week = (((__pyx_v_ord - __pyx_v_w1) / 7) + 1);

  /* "utils.pxd":2298
 *     with cython.cdivision(True):
 *         iso_week = (ord - w1) // 7 + 1
 *         r = (ord - 1) % 7             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             r += 7
*/
  __pyx_v_r = ((__pyx_v_ord - 1) % 7);

  /* "utils.pxd":2299
 *         iso_week = (ord - w1) // 7 + 1
 *         r = (ord - 1) % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += 7
 *         iso_wday = r + 1
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2300
 *         r = (ord - 1) % 7
 *         if r < 0:
 *             r += 7             # <<<<<<<<<<<<<<
 *         iso_wday = r + 1
 * 
*/
    __pyx_v_r = (__pyx_v_r + 7);

    /* "utils.pxd":2299
 *         iso_week = (ord - w1) // 7 + 1
 *         r = (ord - 1) % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += 7
 *         iso_wday = r + 1
*/
  }

  /* "utils.pxd":2301
 *         if r < 0:
 *             r += 7
 *         iso_wday = r + 1             # <<<<<<<<<<<<<<
 * 
 *     out.year = iso_year
*/
  __pyx_v_iso_wday = (__pyx_v_r + 1);

  /* "utils.pxd":2303
 *         iso_wday = r + 1
 * 
 *     out.year = iso_year             # <<<<<<<<<<<<<<
 *     out.week = iso_week
 *     out.weekday = iso_wday
*/
  __pyx_v_out.year = __pyx_v_iso_year;

  /* "utils.pxd":2304
 * 
 *     out.year = iso_year
 *     out.week = iso_week             # <<<<<<<<<<<<<<
 *     out.weekday = iso_wday
 *     return out
*/
  __pyx_v_out.week = __pyx_v_iso_week;

  /* "utils.pxd":2305
 *     out.year = iso_year
 *     out.week = iso_week
 *     out.weekday = iso_wday             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.weekday = __pyx_v_iso_wday;

  /* "utils.pxd":2306
 *     out.week = iso_week
 *     out.weekday = iso_wday
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long ymd_isoyear(long long year, int month, int day) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2261
 * 
 * # . iso
 * cdef inline iso ymd_isocalendar(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar from the Gregorian date Y/M/D `<'struct:iso'>`.
 * 
*/

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

/* "utils.pxd":2308
 *     return out
 * 
 * cdef inline long long ymd_isoyear(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `year` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ymd_isoyear(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_ord_w1;
  PY_LONG_LONG __pyx_v_w1_next;
  PY_LONG_LONG __pyx_r;
  int __pyx_t_1;
  PY_LONG_LONG __pyx_t_2;

  /* "utils.pxd":2319
 *     """
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)             # <<<<<<<<<<<<<<
 *         long long ord_w1 = iso_week1_mon_ord(year)
 *         long long w1_next
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_year, __pyx_v_month, __pyx_v_day);

  /* "utils.pxd":2320
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)
 *         long long ord_w1 = iso_week1_mon_ord(year)             # <<<<<<<<<<<<<<
 *         long long w1_next
 * 
*/
  __pyx_v_ord_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord(__pyx_v_year);

  /* "utils.pxd":2323
 *         long long w1_next
 * 
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         return year - 1
 *     else:
*/
  __pyx_t_1 = (__pyx_v_ord < __pyx_v_ord_w1);
  if (__pyx_t_1) {

    /* "utils.pxd":2324
 * 
 *     if ord < ord_w1:
 *         return year - 1             # <<<<<<<<<<<<<<
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
*/
    __pyx_r = (__pyx_v_year - 1);
    goto __pyx_L0;

    /* "utils.pxd":2323
 *         long long w1_next
 * 
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         return year - 1
 *     else:
*/
  }

  /* "utils.pxd":2326
 *         return year - 1
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)             # <<<<<<<<<<<<<<
 *         return year if ord < w1_next else year + 1
 * 
*/
  /*else*/ {
    __pyx_v_w1_next = __pyx_f_7cytimes_5utils_iso_week1_mon_ord((__pyx_v_year + 1));

    /* "utils.pxd":2327
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
 *         return year if ord < w1_next else year + 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int ymd_isoweek(long long year, int month, int day) noexcept nogil:
*/
    __pyx_t_1 = (__pyx_v_ord < __pyx_v_w1_next);
    if (__pyx_t_1) {
      __pyx_t_2 = __pyx_v_year;
    } else {
      __pyx_t_2 = (__pyx_v_year + 1);
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
  }

  /* "utils.pxd":2308
 *     return out
 * 
 * cdef inline long long ymd_isoyear(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `year` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

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

/* "utils.pxd":2329
 *         return year if ord < w1_next else year + 1
 * 
 * cdef inline int ymd_isoweek(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `week` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_isoweek(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_ord_w1;
  PY_LONG_LONG __pyx_v_w1;
  PY_LONG_LONG __pyx_v_w1_next;
  int __pyx_r;
  int __pyx_t_1;
  PY_LONG_LONG __pyx_t_2;

  /* "utils.pxd":2340
 *     """
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)             # <<<<<<<<<<<<<<
 *         long long ord_w1 = iso_week1_mon_ord(year)
 *         long long w1, w1_next
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_year, __pyx_v_month, __pyx_v_day);

  /* "utils.pxd":2341
 *     cdef:
 *         long long ord    = ymd_to_ord(year, month, day)
 *         long long ord_w1 = iso_week1_mon_ord(year)             # <<<<<<<<<<<<<<
 *         long long w1, w1_next
 * 
*/
  __pyx_v_ord_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord(__pyx_v_year);

  /* "utils.pxd":2344
 *         long long w1, w1_next
 * 
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         w1 = iso_week1_mon_ord(year - 1)
 *     else:
*/
  __pyx_t_1 = (__pyx_v_ord < __pyx_v_ord_w1);
  if (__pyx_t_1) {

    /* "utils.pxd":2345
 * 
 *     if ord < ord_w1:
 *         w1 = iso_week1_mon_ord(year - 1)             # <<<<<<<<<<<<<<
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
*/
    __pyx_v_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord((__pyx_v_year - 1));

    /* "utils.pxd":2344
 *         long long w1, w1_next
 * 
 *     if ord < ord_w1:             # <<<<<<<<<<<<<<
 *         w1 = iso_week1_mon_ord(year - 1)
 *     else:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2347
 *         w1 = iso_week1_mon_ord(year - 1)
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)             # <<<<<<<<<<<<<<
 *         w1 = ord_w1 if ord < w1_next else w1_next
 * 
*/
  /*else*/ {
    __pyx_v_w1_next = __pyx_f_7cytimes_5utils_iso_week1_mon_ord((__pyx_v_year + 1));

    /* "utils.pxd":2348
 *     else:
 *         w1_next = iso_week1_mon_ord(year + 1)
 *         w1 = ord_w1 if ord < w1_next else w1_next             # <<<<<<<<<<<<<<
 * 
 *     with cython.cdivision(True):
*/
    __pyx_t_1 = (__pyx_v_ord < __pyx_v_w1_next);
    if (__pyx_t_1) {
      __pyx_t_2 = __pyx_v_ord_w1;
    } else {
      __pyx_t_2 = __pyx_v_w1_next;
    }
    __pyx_v_w1 = __pyx_t_2;
  }
  __pyx_L3:;

  /* "utils.pxd":2351
 * 
 *     with cython.cdivision(True):
 *         return (ord - w1) // 7 + 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline int ymd_isoweekday(long long year, int month, int day) noexcept nogil:
*/
  __pyx_r = (((__pyx_v_ord - __pyx_v_w1) / 7) + 1);
  goto __pyx_L0;

  /* "utils.pxd":2329
 *         return year if ord < w1_next else year + 1
 * 
 * cdef inline int ymd_isoweek(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `week` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

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

/* "utils.pxd":2353
 *         return (ord - w1) // 7 + 1
 * 
 * cdef inline int ymd_isoweekday(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `weekday` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_ymd_isoweekday(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  int __pyx_r;

  /* "utils.pxd":2363
 *     :returns `<'int'>`: The ISO calendar weekday (1=Mon...7=Sun).
 *     """
 *     return ymd_weekday(year, month, day) + 1             # <<<<<<<<<<<<<<
 * 
 * # . Y/M/D
*/
  __pyx_r = (__pyx_f_7cytimes_5utils_ymd_weekday(__pyx_v_year, __pyx_v_month, __pyx_v_day) + 1);
  goto __pyx_L0;

  /* "utils.pxd":2353
 *         return (ord - w1) // 7 + 1
 * 
 * cdef inline int ymd_isoweekday(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Compute the ISO calendar `weekday` from the Gregorian date Y/M/D `<'int'>`.
 * 
*/

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

/* "utils.pxd":2366
 * 
 * # . Y/M/D
 * cdef inline long long ymd_to_ord(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert a Gregorian Y/M/D to a **1-based** ordinal day under
 *     the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_ymd_to_ord(PY_LONG_LONG __pyx_v_year, int __pyx_v_month, int __pyx_v_day) {
  PY_LONG_LONG __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;

  /* "utils.pxd":2381
 *     :returns `<'int'>`: Ordinal day count (1-based).
 *     """
 *     if day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
*/
  __pyx_t_1 = (__pyx_v_day > 28);
  if (__pyx_t_1) {

    /* "utils.pxd":2382
 *     """
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))             # <<<<<<<<<<<<<<
 *     elif day < 1:
 *         day = 1
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_year, __pyx_v_month);
    __pyx_t_3 = __pyx_v_day;
    __pyx_t_1 = (__pyx_t_2 < __pyx_t_3);
    if (__pyx_t_1) {
      __pyx_t_4 = __pyx_t_2;
    } else {
      __pyx_t_4 = __pyx_t_3;
    }
    __pyx_v_day = __pyx_t_4;

    /* "utils.pxd":2381
 *     :returns `<'int'>`: Ordinal day count (1-based).
 *     """
 *     if day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2383
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:             # <<<<<<<<<<<<<<
 *         day = 1
 *     return days_bf_year(year) + days_bf_month(year, month) + day
*/
  __pyx_t_1 = (__pyx_v_day < 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2384
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:
 *         day = 1             # <<<<<<<<<<<<<<
 *     return days_bf_year(year) + days_bf_month(year, month) + day
 * 
*/
    __pyx_v_day = 1;

    /* "utils.pxd":2383
 *     if day > 28:
 *         day = min(day, days_in_month(year, month))
 *     elif day < 1:             # <<<<<<<<<<<<<<
 *         day = 1
 *     return days_bf_year(year) + days_bf_month(year, month) + day
*/
  }
  __pyx_L3:;

  /* "utils.pxd":2385
 *     elif day < 1:
 *         day = 1
 *     return days_bf_year(year) + days_bf_month(year, month) + day             # <<<<<<<<<<<<<<
 * 
 * cdef inline ymd ymd_fr_ord(long long value) noexcept nogil:
*/
  __pyx_r = ((__pyx_f_7cytimes_5utils_days_bf_year(__pyx_v_year) + __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_year, __pyx_v_month)) + __pyx_v_day);
  goto __pyx_L0;

  /* "utils.pxd":2366
 * 
 * # . Y/M/D
 * cdef inline long long ymd_to_ord(long long year, int month, int day) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert a Gregorian Y/M/D to a **1-based** ordinal day under
 *     the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2387
 *     return days_bf_year(year) + days_bf_month(year, month) + day
 * 
 * cdef inline ymd ymd_fr_ord(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert Gregorian ordinal day to Y/M/D `<'struct:ymd'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_ord(PY_LONG_LONG __pyx_v_value) {
  PY_LONG_LONG __pyx_v_n;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_n400;
  PY_LONG_LONG __pyx_v_n100;
  PY_LONG_LONG __pyx_v_n4;
  PY_LONG_LONG __pyx_v_n1;
  PY_LONG_LONG __pyx_v_yy;
  PY_LONG_LONG __pyx_v_mm;
  PY_LONG_LONG __pyx_v_days_bf;
  __pyx_t_7cytimes_5utils_ymd __pyx_v_out;
  __pyx_t_7cytimes_5utils_ymd __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  PY_LONG_LONG __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PY_LONG_LONG __pyx_t_6;
  PY_LONG_LONG __pyx_t_7;

  /* "utils.pxd":2401
 *         long long n, r, n400, n100, n4, n1, yy, mm, days_bf
 *         ymd out
 *     n = value - 1             # <<<<<<<<<<<<<<
 * 
 *     with cython.cdivision(True):
*/
  __pyx_v_n = (__pyx_v_value - 1);

  /* "utils.pxd":2405
 *     with cython.cdivision(True):
 *         # Number of complete 400-year cycles
 *         n400 = n / 146_097; r = n % 146_097             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             n400 -= 1; r += 146_097
*/
  __pyx_v_n400 = (__pyx_v_n / 0x23AB1);
  __pyx_v_r = (__pyx_v_n % 0x23AB1);

  /* "utils.pxd":2406
 *         # Number of complete 400-year cycles
 *         n400 = n / 146_097; r = n % 146_097
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             n400 -= 1; r += 146_097
 *         n = r
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2407
 *         n400 = n / 146_097; r = n % 146_097
 *         if r < 0:
 *             n400 -= 1; r += 146_097             # <<<<<<<<<<<<<<
 *         n = r
 *         # Number of complete 100-year cycles within the 400-year cycle
*/
    __pyx_v_n400 = (__pyx_v_n400 - 1);
    __pyx_v_r = (__pyx_v_r + 0x23AB1);

    /* "utils.pxd":2406
 *         # Number of complete 400-year cycles
 *         n400 = n / 146_097; r = n % 146_097
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             n400 -= 1; r += 146_097
 *         n = r
*/
  }

  /* "utils.pxd":2408
 *         if r < 0:
 *             n400 -= 1; r += 146_097
 *         n = r             # <<<<<<<<<<<<<<
 *         # Number of complete 100-year cycles within the 400-year cycle
 *         n100 = n / 36_524;  n %= 36_524
*/
  __pyx_v_n = __pyx_v_r;

  /* "utils.pxd":2410
 *         n = r
 *         # Number of complete 100-year cycles within the 400-year cycle
 *         n100 = n / 36_524;  n %= 36_524             # <<<<<<<<<<<<<<
 *         # Number of complete 4-year cycles within the 100-year cycle
 *         n4   = n / 1_461;   n %= 1_461
*/
  __pyx_v_n100 = (__pyx_v_n / 0x8EAC);
  __pyx_v_n = __Pyx_mod_PY_LONG_LONG(__pyx_v_n, 0x8EAC, 1);

  /* "utils.pxd":2412
 *         n100 = n / 36_524;  n %= 36_524
 *         # Number of complete 4-year cycles within the 100-year cycle
 *         n4   = n / 1_461;   n %= 1_461             # <<<<<<<<<<<<<<
 *         # Number of complete years within the 4-year cycle
 *         n1   = n / 365;     n %= 365
*/
  __pyx_v_n4 = (__pyx_v_n / 0x5B5);
  __pyx_v_n = __Pyx_mod_PY_LONG_LONG(__pyx_v_n, 0x5B5, 1);

  /* "utils.pxd":2414
 *         n4   = n / 1_461;   n %= 1_461
 *         # Number of complete years within the 4-year cycle
 *         n1   = n / 365;     n %= 365             # <<<<<<<<<<<<<<
 * 
 *     # We now know the year and the offset from January 1st.  Leap years are
*/
  __pyx_v_n1 = (__pyx_v_n / 0x16D);
  __pyx_v_n = __Pyx_mod_PY_LONG_LONG(__pyx_v_n, 0x16D, 1);

  /* "utils.pxd":2422
 *     # whether year is divisible by 4.  If not, then we're done -- the answer
 *     # is December 31 at the end of the year.
 *     yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1             # <<<<<<<<<<<<<<
 *     if n100 == 4 or n1 == 4:
 *         out.year, out.month, out.day = yy - 1, 12, 31
*/
  __pyx_v_yy = (((((__pyx_v_n400 * 0x190) + (__pyx_v_n100 * 0x64)) + (__pyx_v_n4 * 4)) + __pyx_v_n1) + 1);

  /* "utils.pxd":2423
 *     # is December 31 at the end of the year.
 *     yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *     if n100 == 4 or n1 == 4:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = yy - 1, 12, 31
 * 
*/
  __pyx_t_2 = (__pyx_v_n100 == 4);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_n1 == 4);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":2424
 *     yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *     if n100 == 4 or n1 == 4:
 *         out.year, out.month, out.day = yy - 1, 12, 31             # <<<<<<<<<<<<<<
 * 
 *     # Now the year is correct, and n is the offset from January 1.  We find
*/
    __pyx_t_3 = (__pyx_v_yy - 1);
    __pyx_t_4 = 12;
    __pyx_t_5 = 31;
    __pyx_v_out.year = __pyx_t_3;
    __pyx_v_out.month = __pyx_t_4;
    __pyx_v_out.day = __pyx_t_5;

    /* "utils.pxd":2423
 *     # is December 31 at the end of the year.
 *     yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *     if n100 == 4 or n1 == 4:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = yy - 1, 12, 31
 * 
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":2429
 *     # the month via an estimate that's either exact or one too large.
 *     else:
 *         mm = (n + 50) >> 5             # <<<<<<<<<<<<<<
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:
*/
  /*else*/ {
    __pyx_v_mm = ((__pyx_v_n + 50) >> 5);

    /* "utils.pxd":2430
 *     else:
 *         mm = (n + 50) >> 5
 *         days_bf = days_bf_month(yy, mm)             # <<<<<<<<<<<<<<
 *         if days_bf > n:
 *             mm -= 1
*/
    __pyx_v_days_bf = __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm);

    /* "utils.pxd":2431
 *         mm = (n + 50) >> 5
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:             # <<<<<<<<<<<<<<
 *             mm -= 1
 *             days_bf = days_bf_month(yy, mm)
*/
    __pyx_t_1 = (__pyx_v_days_bf > __pyx_v_n);
    if (__pyx_t_1) {

      /* "utils.pxd":2432
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:
 *             mm -= 1             # <<<<<<<<<<<<<<
 *             days_bf = days_bf_month(yy, mm)
 *         out.year, out.month, out.day = yy, mm, n - days_bf + 1
*/
      __pyx_v_mm = (__pyx_v_mm - 1);

      /* "utils.pxd":2433
 *         if days_bf > n:
 *             mm -= 1
 *             days_bf = days_bf_month(yy, mm)             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = yy, mm, n - days_bf + 1
 * 
*/
      __pyx_v_days_bf = __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm);

      /* "utils.pxd":2431
 *         mm = (n + 50) >> 5
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:             # <<<<<<<<<<<<<<
 *             mm -= 1
 *             days_bf = days_bf_month(yy, mm)
*/
    }

    /* "utils.pxd":2434
 *             mm -= 1
 *             days_bf = days_bf_month(yy, mm)
 *         out.year, out.month, out.day = yy, mm, n - days_bf + 1             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    __pyx_t_3 = __pyx_v_yy;
    __pyx_t_6 = __pyx_v_mm;
    __pyx_t_7 = ((__pyx_v_n - __pyx_v_days_bf) + 1);
    __pyx_v_out.year = __pyx_t_3;
    __pyx_v_out.month = __pyx_t_6;
    __pyx_v_out.day = __pyx_t_7;
  }
  __pyx_L4:;

  /* "utils.pxd":2436
 *         out.year, out.month, out.day = yy, mm, n - days_bf + 1
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline ymd ymd_fr_us(long long value) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2387
 *     return days_bf_year(year) + days_bf_month(year, month) + day
 * 
 * cdef inline ymd ymd_fr_ord(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert Gregorian ordinal day to Y/M/D `<'struct:ymd'>`.
 * 
*/

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

/* "utils.pxd":2438
 *     return out
 * 
 * cdef inline ymd ymd_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microsecond ticks since the Unix epoch to Y/M/D `<'struct:ymd'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_us(PY_LONG_LONG __pyx_v_value) {
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  __pyx_t_7cytimes_5utils_ymd __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2451
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
  __pyx_v_q = (__pyx_v_value / __pyx_v_7cytimes_5utils_US_DAY);
  __pyx_v_r = (__pyx_v_value % __pyx_v_7cytimes_5utils_US_DAY);

  /* "utils.pxd":2452
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2453
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
*/
    __pyx_v_q = (__pyx_v_q - 1);

    /* "utils.pxd":2452
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)
*/
  }

  /* "utils.pxd":2454
 *         if r < 0:
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)             # <<<<<<<<<<<<<<
 * 
 * cdef inline ymd ymd_fr_sec(double value) noexcept nogil:
*/
  __pyx_r = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_q + __pyx_v_7cytimes_5utils_EPOCH_DAY));
  goto __pyx_L0;

  /* "utils.pxd":2438
 *     return out
 * 
 * cdef inline ymd ymd_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microsecond ticks since the Unix epoch to Y/M/D `<'struct:ymd'>`.
 * 
*/

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

/* "utils.pxd":2456
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
 * cdef inline ymd ymd_fr_sec(double value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) since the Unix epoch to Y/M/D `<'struct:ymd'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_sec(double __pyx_v_value) {
  PY_LONG_LONG __pyx_v_sec;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  __pyx_t_7cytimes_5utils_ymd __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2468
 *     # Convert to ordinal
 *     cdef:
 *         long long sec = <long long> math.floor(value)             # <<<<<<<<<<<<<<
 *         long long q, r
 *     with cython.cdivision(True):
*/
  __pyx_v_sec = ((PY_LONG_LONG)floor(__pyx_v_value));

  /* "utils.pxd":2471
 *         long long q, r
 *     with cython.cdivision(True):
 *         q = sec / SS_DAY; r = sec % SS_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
  __pyx_v_q = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_DAY);
  __pyx_v_r = (__pyx_v_sec % __pyx_v_7cytimes_5utils_SS_DAY);

  /* "utils.pxd":2472
 *     with cython.cdivision(True):
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2473
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
*/
    __pyx_v_q = (__pyx_v_q - 1);

    /* "utils.pxd":2472
 *     with cython.cdivision(True):
 *         q = sec / SS_DAY; r = sec % SS_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)
*/
  }

  /* "utils.pxd":2474
 *         if r < 0:
 *             q -= 1
 *     return ymd_fr_ord(q + EPOCH_DAY)             # <<<<<<<<<<<<<<
 * 
 * cdef inline ymd ymd_fr_iso(long long year, int week, int weekday) noexcept nogil:
*/
  __pyx_r = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_q + __pyx_v_7cytimes_5utils_EPOCH_DAY));
  goto __pyx_L0;

  /* "utils.pxd":2456
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
 * cdef inline ymd ymd_fr_sec(double value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) since the Unix epoch to Y/M/D `<'struct:ymd'>`.
 * 
*/

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

/* "utils.pxd":2476
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
 * cdef inline ymd ymd_fr_iso(long long year, int week, int weekday) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Create `struct:ymd` from ISO calendar values
 *     (ISO year, ISO week, ISO weekday) `<'struct:ymd'>`.
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_iso(PY_LONG_LONG __pyx_v_year, int __pyx_v_week, int __pyx_v_weekday) {
  PY_LONG_LONG __pyx_v_ord_w1;
  PY_LONG_LONG __pyx_v_days;
  __pyx_t_7cytimes_5utils_ymd __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":2492
 *     """
 *     # Clamp weekday to [1..7]
 *     if weekday < 1:             # <<<<<<<<<<<<<<
 *         weekday = 1
 *     elif weekday > 7:
*/
  __pyx_t_1 = (__pyx_v_weekday < 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2493
 *     # Clamp weekday to [1..7]
 *     if weekday < 1:
 *         weekday = 1             # <<<<<<<<<<<<<<
 *     elif weekday > 7:
 *         weekday = 7
*/
    __pyx_v_weekday = 1;

    /* "utils.pxd":2492
 *     """
 *     # Clamp weekday to [1..7]
 *     if weekday < 1:             # <<<<<<<<<<<<<<
 *         weekday = 1
 *     elif weekday > 7:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2494
 *     if weekday < 1:
 *         weekday = 1
 *     elif weekday > 7:             # <<<<<<<<<<<<<<
 *         weekday = 7
 * 
*/
  __pyx_t_1 = (__pyx_v_weekday > 7);
  if (__pyx_t_1) {

    /* "utils.pxd":2495
 *         weekday = 1
 *     elif weekday > 7:
 *         weekday = 7             # <<<<<<<<<<<<<<
 * 
 *     # Clamp week to [1..53]
*/
    __pyx_v_weekday = 7;

    /* "utils.pxd":2494
 *     if weekday < 1:
 *         weekday = 1
 *     elif weekday > 7:             # <<<<<<<<<<<<<<
 *         weekday = 7
 * 
*/
  }
  __pyx_L3:;

  /* "utils.pxd":2498
 * 
 *     # Clamp week to [1..53]
 *     if week < 1:             # <<<<<<<<<<<<<<
 *         week = 1
 *     elif week > 53:
*/
  __pyx_t_1 = (__pyx_v_week < 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2499
 *     # Clamp week to [1..53]
 *     if week < 1:
 *         week = 1             # <<<<<<<<<<<<<<
 *     elif week > 53:
 *         week = 53
*/
    __pyx_v_week = 1;

    /* "utils.pxd":2498
 * 
 *     # Clamp week to [1..53]
 *     if week < 1:             # <<<<<<<<<<<<<<
 *         week = 1
 *     elif week > 53:
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":2500
 *     if week < 1:
 *         week = 1
 *     elif week > 53:             # <<<<<<<<<<<<<<
 *         week = 53
 * 
*/
  __pyx_t_1 = (__pyx_v_week > 53);
  if (__pyx_t_1) {

    /* "utils.pxd":2501
 *         week = 1
 *     elif week > 53:
 *         week = 53             # <<<<<<<<<<<<<<
 * 
 *     # Handle week 53 in a non-long ISO year by rolling into the next ISO year.
*/
    __pyx_v_week = 53;

    /* "utils.pxd":2500
 *     if week < 1:
 *         week = 1
 *     elif week > 53:             # <<<<<<<<<<<<<<
 *         week = 53
 * 
*/
  }
  __pyx_L4:;

  /* "utils.pxd":2504
 * 
 *     # Handle week 53 in a non-long ISO year by rolling into the next ISO year.
 *     if week == 53 and not is_long_year(year):             # <<<<<<<<<<<<<<
 *         year += 1
 *         week = 1
*/
  __pyx_t_2 = (__pyx_v_week == 53);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = (!__pyx_f_7cytimes_5utils_is_long_year(__pyx_v_year));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":2505
 *     # Handle week 53 in a non-long ISO year by rolling into the next ISO year.
 *     if week == 53 and not is_long_year(year):
 *         year += 1             # <<<<<<<<<<<<<<
 *         week = 1
 * 
*/
    __pyx_v_year = (__pyx_v_year + 1);

    /* "utils.pxd":2506
 *     if week == 53 and not is_long_year(year):
 *         year += 1
 *         week = 1             # <<<<<<<<<<<<<<
 * 
 *     # Monday of ISO week 1 for the (possibly adjusted) ISO year
*/
    __pyx_v_week = 1;

    /* "utils.pxd":2504
 * 
 *     # Handle week 53 in a non-long ISO year by rolling into the next ISO year.
 *     if week == 53 and not is_long_year(year):             # <<<<<<<<<<<<<<
 *         year += 1
 *         week = 1
*/
  }

  /* "utils.pxd":2509
 * 
 *     # Monday of ISO week 1 for the (possibly adjusted) ISO year
 *     cdef long long ord_w1 = iso_week1_mon_ord(year)             # <<<<<<<<<<<<<<
 * 
 *     # Target ordinal: Monday of week 1 + (week-1)*7 + (weekday-1)
*/
  __pyx_v_ord_w1 = __pyx_f_7cytimes_5utils_iso_week1_mon_ord(__pyx_v_year);

  /* "utils.pxd":2512
 * 
 *     # Target ordinal: Monday of week 1 + (week-1)*7 + (weekday-1)
 *     cdef long long days = (week - 1) * 7 + (weekday - 1)             # <<<<<<<<<<<<<<
 * 
 *     # Convert from ordinal to Y/M/D
*/
  __pyx_v_days = (((__pyx_v_week - 1) * 7) + (__pyx_v_weekday - 1));

  /* "utils.pxd":2515
 * 
 *     # Convert from ordinal to Y/M/D
 *     return ymd_fr_ord(ord_w1 + days)             # <<<<<<<<<<<<<<
 * 
 * cdef inline ymd ymd_fr_doy(long long year, int doy) noexcept nogil:
*/
  __pyx_r = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_ord_w1 + __pyx_v_days));
  goto __pyx_L0;

  /* "utils.pxd":2476
 *     return ymd_fr_ord(q + EPOCH_DAY)
 * 
 * cdef inline ymd ymd_fr_iso(long long year, int week, int weekday) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Create `struct:ymd` from ISO calendar values
 *     (ISO year, ISO week, ISO weekday) `<'struct:ymd'>`.
*/

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

/* "utils.pxd":2517
 *     return ymd_fr_ord(ord_w1 + days)
 * 
 * cdef inline ymd ymd_fr_doy(long long year, int doy) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Create `struct:ymd` from Gregorian year and day-of-year `<'struct:ymd'>`.
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_ymd __pyx_f_7cytimes_5utils_ymd_fr_doy(PY_LONG_LONG __pyx_v_year, int __pyx_v_doy) {
  int __pyx_v_leap;
  int __pyx_v_max_d;
  __pyx_t_7cytimes_5utils_ymd __pyx_v_out;
  int __pyx_v_d_before_mar;
  int __pyx_v_d;
  int __pyx_v_m_from_mar;
  int __pyx_v_mon;
  int __pyx_v_dom;
  __pyx_t_7cytimes_5utils_ymd __pyx_r;
  int __pyx_t_1;
  PY_LONG_LONG __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  long __pyx_t_5;

  /* "utils.pxd":2530
 *     """
 *     cdef:
 *         int leap = is_leap_year(year)             # <<<<<<<<<<<<<<
 *         int max_d = 365 + leap
 *         ymd out
*/
  __pyx_v_leap = __pyx_f_7cytimes_5utils_is_leap_year(__pyx_v_year);

  /* "utils.pxd":2531
 *     cdef:
 *         int leap = is_leap_year(year)
 *         int max_d = 365 + leap             # <<<<<<<<<<<<<<
 *         ymd out
 * 
*/
  __pyx_v_max_d = (0x16D + __pyx_v_leap);

  /* "utils.pxd":2535
 * 
 *     # Clamp days
 *     if doy < 1:             # <<<<<<<<<<<<<<
 *         doy = 1
 *     elif doy > max_d:
*/
  __pyx_t_1 = (__pyx_v_doy < 1);
  if (__pyx_t_1) {

    /* "utils.pxd":2536
 *     # Clamp days
 *     if doy < 1:
 *         doy = 1             # <<<<<<<<<<<<<<
 *     elif doy > max_d:
 *         doy = max_d
*/
    __pyx_v_doy = 1;

    /* "utils.pxd":2535
 * 
 *     # Clamp days
 *     if doy < 1:             # <<<<<<<<<<<<<<
 *         doy = 1
 *     elif doy > max_d:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2537
 *     if doy < 1:
 *         doy = 1
 *     elif doy > max_d:             # <<<<<<<<<<<<<<
 *         doy = max_d
 * 
*/
  __pyx_t_1 = (__pyx_v_doy > __pyx_v_max_d);
  if (__pyx_t_1) {

    /* "utils.pxd":2538
 *         doy = 1
 *     elif doy > max_d:
 *         doy = max_d             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: Jan
*/
    __pyx_v_doy = __pyx_v_max_d;

    /* "utils.pxd":2537
 *     if doy < 1:
 *         doy = 1
 *     elif doy > max_d:             # <<<<<<<<<<<<<<
 *         doy = max_d
 * 
*/
  }
  __pyx_L3:;

  /* "utils.pxd":2541
 * 
 *     # Fast-path: Jan
 *     if doy <= 31:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = year, 1, doy
 *         return out
*/
  __pyx_t_1 = (__pyx_v_doy <= 31);
  if (__pyx_t_1) {

    /* "utils.pxd":2542
 *     # Fast-path: Jan
 *     if doy <= 31:
 *         out.year, out.month, out.day = year, 1, doy             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
    __pyx_t_2 = __pyx_v_year;
    __pyx_t_3 = 1;
    __pyx_t_4 = __pyx_v_doy;
    __pyx_v_out.year = __pyx_t_2;
    __pyx_v_out.month = __pyx_t_3;
    __pyx_v_out.day = __pyx_t_4;

    /* "utils.pxd":2543
 *     if doy <= 31:
 *         out.year, out.month, out.day = year, 1, doy
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: Feb
*/
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":2541
 * 
 *     # Fast-path: Jan
 *     if doy <= 31:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = year, 1, doy
 *         return out
*/
  }

  /* "utils.pxd":2546
 * 
 *     # Fast-path: Feb
 *     cdef int d_before_mar = 59 + leap  # days before March 1             # <<<<<<<<<<<<<<
 *     if doy <= d_before_mar:
 *         out.year, out.month, out.day = year, 2, doy - 31
*/
  __pyx_v_d_before_mar = (59 + __pyx_v_leap);

  /* "utils.pxd":2547
 *     # Fast-path: Feb
 *     cdef int d_before_mar = 59 + leap  # days before March 1
 *     if doy <= d_before_mar:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = year, 2, doy - 31
 *         return out
*/
  __pyx_t_1 = (__pyx_v_doy <= __pyx_v_d_before_mar);
  if (__pyx_t_1) {

    /* "utils.pxd":2548
 *     cdef int d_before_mar = 59 + leap  # days before March 1
 *     if doy <= d_before_mar:
 *         out.year, out.month, out.day = year, 2, doy - 31             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
    __pyx_t_2 = __pyx_v_year;
    __pyx_t_4 = 2;
    __pyx_t_5 = (__pyx_v_doy - 31);
    __pyx_v_out.year = __pyx_t_2;
    __pyx_v_out.month = __pyx_t_4;
    __pyx_v_out.day = __pyx_t_5;

    /* "utils.pxd":2549
 *     if doy <= d_before_mar:
 *         out.year, out.month, out.day = year, 2, doy - 31
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # March-based conversion using 153-day month blocks
*/
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":2547
 *     # Fast-path: Feb
 *     cdef int d_before_mar = 59 + leap  # days before March 1
 *     if doy <= d_before_mar:             # <<<<<<<<<<<<<<
 *         out.year, out.month, out.day = year, 2, doy - 31
 *         return out
*/
  }

  /* "utils.pxd":2554
 *     # Convert to "days since March 1" (1-based -> 0-based)
 *     cdef int d, m_from_mar, mon, dom
 *     d = doy - d_before_mar - 1  # 1 => # 0..306 (0=Mar-1)             # <<<<<<<<<<<<<<
 * 
 *     with cython.cdivision(True):
*/
  __pyx_v_d = ((__pyx_v_doy - __pyx_v_d_before_mar) - 1);

  /* "utils.pxd":2558
 *     with cython.cdivision(True):
 *         # Month index from March: 0..9
 *         m_from_mar = (5 * d + 2) // 153             # <<<<<<<<<<<<<<
 *         # Day (1-based)
 *         dom = d - (153 * m_from_mar + 2) // 5 + 1
*/
  __pyx_v_m_from_mar = (((5 * __pyx_v_d) + 2) / 0x99);

  /* "utils.pxd":2560
 *         m_from_mar = (5 * d + 2) // 153
 *         # Day (1-based)
 *         dom = d - (153 * m_from_mar + 2) // 5 + 1             # <<<<<<<<<<<<<<
 *         # month (3..12)
 *         mon = m_from_mar + 3
*/
  __pyx_v_dom = ((__pyx_v_d - (((0x99 * __pyx_v_m_from_mar) + 2) / 5)) + 1);

  /* "utils.pxd":2562
 *         dom = d - (153 * m_from_mar + 2) // 5 + 1
 *         # month (3..12)
 *         mon = m_from_mar + 3             # <<<<<<<<<<<<<<
 * 
 *     out.year, out.month, out.day = year, mon, dom
*/
  __pyx_v_mon = (__pyx_v_m_from_mar + 3);

  /* "utils.pxd":2564
 *         mon = m_from_mar + 3
 * 
 *     out.year, out.month, out.day = year, mon, dom             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_t_2 = __pyx_v_year;
  __pyx_t_4 = __pyx_v_mon;
  __pyx_t_3 = __pyx_v_dom;
  __pyx_v_out.year = __pyx_t_2;
  __pyx_v_out.month = __pyx_t_4;
  __pyx_v_out.day = __pyx_t_3;

  /* "utils.pxd":2565
 * 
 *     out.year, out.month, out.day = year, mon, dom
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long iso_week1_mon_ord(long long year) noexcept nogil:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2517
 *     return ymd_fr_ord(ord_w1 + days)
 * 
 * cdef inline ymd ymd_fr_doy(long long year, int doy) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Create `struct:ymd` from Gregorian year and day-of-year `<'struct:ymd'>`.
 * 
*/

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

/* "utils.pxd":2567
 *     return out
 * 
 * cdef inline long long iso_week1_mon_ord(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the ordinal (1-based) of the Monday starting ISO week 1
 *     of `year` under the proleptic Gregorian rules `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_iso_week1_mon_ord(PY_LONG_LONG __pyx_v_year) {
  PY_LONG_LONG __pyx_v_jan4;
  PY_LONG_LONG __pyx_v_wkd;
  PY_LONG_LONG __pyx_r;
  int __pyx_t_1;

  /* "utils.pxd":2578
 *     :returns `<'int'>`: Ordinal of the Monday starting ISO week 1.
 *     """
 *     cdef long long jan4 = ymd_to_ord(year, 1, 4)  # ordinal of Jan 4             # <<<<<<<<<<<<<<
 *     cdef long long wkd  = (jan4 - 1) % 7
 *     if wkd < 0:
*/
  __pyx_v_jan4 = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_year, 1, 4);

  /* "utils.pxd":2579
 *     """
 *     cdef long long jan4 = ymd_to_ord(year, 1, 4)  # ordinal of Jan 4
 *     cdef long long wkd  = (jan4 - 1) % 7             # <<<<<<<<<<<<<<
 *     if wkd < 0:
 *         wkd += 7
*/
  __pyx_v_wkd = __Pyx_mod_PY_LONG_LONG((__pyx_v_jan4 - 1), 7, 1);

  /* "utils.pxd":2580
 *     cdef long long jan4 = ymd_to_ord(year, 1, 4)  # ordinal of Jan 4
 *     cdef long long wkd  = (jan4 - 1) % 7
 *     if wkd < 0:             # <<<<<<<<<<<<<<
 *         wkd += 7
 *     return jan4 - wkd
*/
  __pyx_t_1 = (__pyx_v_wkd < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2581
 *     cdef long long wkd  = (jan4 - 1) % 7
 *     if wkd < 0:
 *         wkd += 7             # <<<<<<<<<<<<<<
 *     return jan4 - wkd
 * 
*/
    __pyx_v_wkd = (__pyx_v_wkd + 7);

    /* "utils.pxd":2580
 *     cdef long long jan4 = ymd_to_ord(year, 1, 4)  # ordinal of Jan 4
 *     cdef long long wkd  = (jan4 - 1) % 7
 *     if wkd < 0:             # <<<<<<<<<<<<<<
 *         wkd += 7
 *     return jan4 - wkd
*/
  }

  /* "utils.pxd":2582
 *     if wkd < 0:
 *         wkd += 7
 *     return jan4 - wkd             # <<<<<<<<<<<<<<
 * 
 * # . date & time
*/
  __pyx_r = (__pyx_v_jan4 - __pyx_v_wkd);
  goto __pyx_L0;

  /* "utils.pxd":2567
 *     return out
 * 
 * cdef inline long long iso_week1_mon_ord(long long year) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Return the ordinal (1-based) of the Monday starting ISO week 1
 *     of `year` under the proleptic Gregorian rules `<'int'>`.
*/

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

/* "utils.pxd":2585
 * 
 * # . date & time
 * cdef inline dtm dtm_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microsecond ticks since the Unix epoch to `struct:dtm` (date + time).
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_dtm __pyx_f_7cytimes_5utils_dtm_fr_us(PY_LONG_LONG __pyx_v_value) {
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  __pyx_t_7cytimes_5utils_dtm __pyx_v_out;
  __pyx_t_7cytimes_5utils_dtm __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyGILState_STATE __pyx_gilstate_save;

  /* "utils.pxd":2606
 *     with cython.cdivision(True):
 *         # Split into days and remainder (mathematical floor)
 *         q = value / US_DAY; r = value % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += US_DAY
*/
  __pyx_v_q = (__pyx_v_value / __pyx_v_7cytimes_5utils_US_DAY);
  __pyx_v_r = (__pyx_v_value % __pyx_v_7cytimes_5utils_US_DAY);

  /* "utils.pxd":2607
 *         # Split into days and remainder (mathematical floor)
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 * 
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2608
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:
 *             q -= 1; r += US_DAY             # <<<<<<<<<<<<<<
 * 
 *         # Date
*/
    __pyx_v_q = (__pyx_v_q - 1);
    __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_DAY);

    /* "utils.pxd":2607
 *         # Split into days and remainder (mathematical floor)
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 * 
*/
  }

  /* "utils.pxd":2611
 * 
 *         # Date
 *         _ymd = ymd_fr_ord(q + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out.year  = _ymd.year
 *         out.month = _ymd.month
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_q + __pyx_v_7cytimes_5utils_EPOCH_DAY));

  /* "utils.pxd":2612
 *         # Date
 *         _ymd = ymd_fr_ord(q + EPOCH_DAY)
 *         out.year  = _ymd.year             # <<<<<<<<<<<<<<
 *         out.month = _ymd.month
 *         out.day   = _ymd.day
*/
  __pyx_t_2 = __pyx_v__ymd.year;
  __pyx_v_out.year = __pyx_t_2;

  /* "utils.pxd":2613
 *         _ymd = ymd_fr_ord(q + EPOCH_DAY)
 *         out.year  = _ymd.year
 *         out.month = _ymd.month             # <<<<<<<<<<<<<<
 *         out.day   = _ymd.day
 * 
*/
  __pyx_t_2 = __pyx_v__ymd.month;
  __pyx_v_out.month = __pyx_t_2;

  /* "utils.pxd":2614
 *         out.year  = _ymd.year
 *         out.month = _ymd.month
 *         out.day   = _ymd.day             # <<<<<<<<<<<<<<
 * 
 *         # Time-of-day
*/
  __pyx_t_2 = __pyx_v__ymd.day;
  __pyx_v_out.day = __pyx_t_2;

  /* "utils.pxd":2617
 * 
 *         # Time-of-day
 *         out.hour   = r / US_HOUR;   r %= US_HOUR             # <<<<<<<<<<<<<<
 *         out.minute = r / US_MINUTE; r %= US_MINUTE
 *         out.second = r / US_SECOND
*/
  __pyx_v_out.hour = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_US_HOUR == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 2617, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_HOUR, 0);

  /* "utils.pxd":2618
 *         # Time-of-day
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
 *         out.minute = r / US_MINUTE; r %= US_MINUTE             # <<<<<<<<<<<<<<
 *         out.second = r / US_SECOND
 *         out.microsecond = r % US_SECOND
*/
  __pyx_v_out.minute = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_MINUTE);
  if (unlikely(__pyx_v_7cytimes_5utils_US_MINUTE == 0)) {
    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __Pyx_PyGILState_Release(__pyx_gilstate_save);
    __PYX_ERR(5, 2618, __pyx_L1_error)
  }
  __pyx_v_r = __Pyx_mod_PY_LONG_LONG(__pyx_v_r, __pyx_v_7cytimes_5utils_US_MINUTE, 0);

  /* "utils.pxd":2619
 *         out.hour   = r / US_HOUR;   r %= US_HOUR
 *         out.minute = r / US_MINUTE; r %= US_MINUTE
 *         out.second = r / US_SECOND             # <<<<<<<<<<<<<<
 *         out.microsecond = r % US_SECOND
 * 
*/
  __pyx_v_out.second = (__pyx_v_r / __pyx_v_7cytimes_5utils_US_SECOND);

  /* "utils.pxd":2620
 *         out.minute = r / US_MINUTE; r %= US_MINUTE
 *         out.second = r / US_SECOND
 *         out.microsecond = r % US_SECOND             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
  __pyx_v_out.microsecond = (__pyx_v_r % __pyx_v_7cytimes_5utils_US_SECOND);

  /* "utils.pxd":2622
 *         out.microsecond = r % US_SECOND
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline dtm dtm_fr_sec(double value) except *:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2585
 * 
 * # . date & time
 * cdef inline dtm dtm_fr_us(long long value) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Convert microsecond ticks since the Unix epoch to `struct:dtm` (date + time).
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
  __Pyx_WriteUnraisable("cytimes.utils.dtm_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __Pyx_PyGILState_Release(__pyx_gilstate_save);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":2624
 *     return out
 * 
 * cdef inline dtm dtm_fr_sec(double value) except *:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) since the Unix epoch to `struct:dtm` (date + time).
 * 
*/

static CYTHON_INLINE __pyx_t_7cytimes_5utils_dtm __pyx_f_7cytimes_5utils_dtm_fr_sec(double __pyx_v_value) {
  __pyx_t_7cytimes_5utils_dtm __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":2638
 *         - dtm.microsecond   [0..999999]
 *     """
 *     return dtm_fr_us(sec_to_us(value))             # <<<<<<<<<<<<<<
 * 
 * # . fractions
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_sec_to_us(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 2638, __pyx_L1_error)
  __pyx_r = __pyx_f_7cytimes_5utils_dtm_fr_us(__pyx_t_1);
  goto __pyx_L0;

  /* "utils.pxd":2624
 *     return out
 * 
 * cdef inline dtm dtm_fr_sec(double value) except *:             # <<<<<<<<<<<<<<
 *     """Convert seconds (float) since the Unix epoch to `struct:dtm` (date + time).
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.dtm_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":2641
 * 
 * # . fractions
 * cdef inline int combine_absolute_ms_us(int ms, int us) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Combine milliseconds and microseconds into total microseconds (replacement semantics) `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_combine_absolute_ms_us(int __pyx_v_ms, int __pyx_v_us) {
  int __pyx_r;
  int __pyx_t_1;
  long __pyx_t_2;
  int __pyx_t_3;
  long __pyx_t_4;

  /* "utils.pxd":2660
 *     """
 *     # Valid millisecond
 *     if ms >= 0:             # <<<<<<<<<<<<<<
 *         # clamp 'ms' to 0..999
 *         ms = min(ms, 999) * 1_000
*/
  __pyx_t_1 = (__pyx_v_ms >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2662
 *     if ms >= 0:
 *         # clamp 'ms' to 0..999
 *         ms = min(ms, 999) * 1_000             # <<<<<<<<<<<<<<
 *         # 'us' acts only as sub-ms remainder
 *         us = ms + (us % 1_000) if us > 0 else ms
*/
    __pyx_t_2 = 0x3E7;
    __pyx_t_3 = __pyx_v_ms;
    __pyx_t_1 = (__pyx_t_2 < __pyx_t_3);
    if (__pyx_t_1) {
      __pyx_t_4 = __pyx_t_2;
    } else {
      __pyx_t_4 = __pyx_t_3;
    }
    __pyx_v_ms = (__pyx_t_4 * 0x3E8);

    /* "utils.pxd":2664
 *         ms = min(ms, 999) * 1_000
 *         # 'us' acts only as sub-ms remainder
 *         us = ms + (us % 1_000) if us > 0 else ms             # <<<<<<<<<<<<<<
 * 
 *     # Valid microsecond
*/
    __pyx_t_1 = (__pyx_v_us > 0);
    if (__pyx_t_1) {
      __pyx_t_4 = (__pyx_v_ms + __Pyx_mod_long(__pyx_v_us, 0x3E8, 1));
    } else {
      __pyx_t_4 = __pyx_v_ms;
    }
    __pyx_v_us = __pyx_t_4;

    /* "utils.pxd":2660
 *     """
 *     # Valid millisecond
 *     if ms >= 0:             # <<<<<<<<<<<<<<
 *         # clamp 'ms' to 0..999
 *         ms = min(ms, 999) * 1_000
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2667
 * 
 *     # Valid microsecond
 *     elif us >= 0:             # <<<<<<<<<<<<<<
 *         # clamp 'us' to 0..999,999
 *         us = min(us, 999_999)
*/
  __pyx_t_1 = (__pyx_v_us >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":2669
 *     elif us >= 0:
 *         # clamp 'us' to 0..999,999
 *         us = min(us, 999_999)             # <<<<<<<<<<<<<<
 * 
 *     # Both invalid
*/
    __pyx_t_4 = 0xF423F;
    __pyx_t_3 = __pyx_v_us;
    __pyx_t_1 = (__pyx_t_4 < __pyx_t_3);
    if (__pyx_t_1) {
      __pyx_t_2 = __pyx_t_4;
    } else {
      __pyx_t_2 = __pyx_t_3;
    }
    __pyx_v_us = __pyx_t_2;

    /* "utils.pxd":2667
 * 
 *     # Valid microsecond
 *     elif us >= 0:             # <<<<<<<<<<<<<<
 *         # clamp 'us' to 0..999,999
 *         us = min(us, 999_999)
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2673
 *     # Both invalid
 *     else:
 *         us = -1             # <<<<<<<<<<<<<<
 * 
 *     return us
*/
  /*else*/ {
    __pyx_v_us = -1;
  }
  __pyx_L3:;

  /* "utils.pxd":2675
 *         us = -1
 * 
 *     return us             # <<<<<<<<<<<<<<
 * 
 * # datetime.date ----------------------------------------------------------------------------------------
*/
  __pyx_r = __pyx_v_us;
  goto __pyx_L0;

  /* "utils.pxd":2641
 * 
 * # . fractions
 * cdef inline int combine_absolute_ms_us(int ms, int us) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """Combine milliseconds and microseconds into total microseconds (replacement semantics) `<'int'>`.
 * 
*/

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

/* "utils.pxd":2679
 * # datetime.date ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.date date_new(int year=1, int month=1, int day=1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new date `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_new(struct __pyx_opt_args_7cytimes_5utils_date_new *__pyx_optional_args) {
  int __pyx_v_year = ((int)1);
  int __pyx_v_month = ((int)1);
  int __pyx_v_day = ((int)1);
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  size_t __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  PyObject *__pyx_t_15[4];
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  char const *__pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_year = __pyx_optional_args->year;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_month = __pyx_optional_args->month;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_day = __pyx_optional_args->day;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_dclass = __pyx_optional_args->dclass;
          }
        }
      }
    }
  }

  /* "utils.pxd":2690
 *     """
 *     # Construct date
 *     if dclass is not None and dclass is not datetime.date:             # <<<<<<<<<<<<<<
 *         try:
 *             return dclass(year=year, month=month, day=day)
*/
  __pyx_t_2 = (__pyx_v_dclass != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_dclass != ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":2691
 *     # Construct date
 *     if dclass is not None and dclass is not datetime.date:
 *         try:             # <<<<<<<<<<<<<<
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "utils.pxd":2692
 *     if dclass is not None and dclass is not datetime.date:
 *         try:
 *             return dclass(year=year, month=month, day=day)             # <<<<<<<<<<<<<<
 *         except Exception as err:
 *             raise ValueError("Cannot create date using custom 'dclass' %s, %s" % (dclass, err)) from err
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = NULL;
        __Pyx_INCREF(__pyx_v_dclass);
        __pyx_t_8 = __pyx_v_dclass; 
        __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_year); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 2692, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_month); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 2692, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_day); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 2692, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = 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_12 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_7, NULL};
          __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 2692, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_13);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_year, __pyx_t_9, __pyx_t_13, __pyx_callargs+1, 0) < (0)) __PYX_ERR(5, 2692, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_month, __pyx_t_10, __pyx_t_13, __pyx_callargs+1, 1) < (0)) __PYX_ERR(5, 2692, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_day, __pyx_t_11, __pyx_t_13, __pyx_callargs+1, 2) < (0)) __PYX_ERR(5, 2692, __pyx_L6_error)
          __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_12, (1-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
          __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_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 2692, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(5, 2692, __pyx_L6_error)
        __pyx_r = ((PyDateTime_Date *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L10_try_return;

        /* "utils.pxd":2691
 *     # Construct date
 *     if dclass is not None and dclass is not datetime.date:
 *         try:             # <<<<<<<<<<<<<<
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:
*/
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 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;

      /* "utils.pxd":2693
 *         try:
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create date using custom 'dclass' %s, %s" % (dclass, err)) from err
 *     return datetime.date_new(year, month, day)
*/
      __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_14) {
        __Pyx_AddTraceback("cytimes.utils.date_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_13) < 0) __PYX_ERR(5, 2693, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_err = __pyx_t_8;
        /*try:*/ {

          /* "utils.pxd":2694
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:
 *             raise ValueError("Cannot create date using custom 'dclass' %s, %s" % (dclass, err)) from err             # <<<<<<<<<<<<<<
 *     return datetime.date_new(year, month, day)
 * 
*/
          __pyx_t_10 = NULL;
          __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_dclass), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 2694, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_err), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 2694, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_create_date_using_custom;
          __pyx_t_15[1] = __pyx_t_9;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__3;
          __pyx_t_15[3] = __pyx_t_7;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, 41 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 2694, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_12 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 2694, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(5, 2694, __pyx_L17_error)
        }

        /* "utils.pxd":2693
 *         try:
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create date using custom 'dclass' %s, %s" % (dclass, err)) from err
 *     return datetime.date_new(year, month, day)
*/
        /*finally:*/ {
          __pyx_L17_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
            if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_24);
            __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
            __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
            goto __pyx_L8_except_error;
          }
        }
      }
      goto __pyx_L8_except_error;

      /* "utils.pxd":2691
 *     # Construct date
 *     if dclass is not None and dclass is not datetime.date:
 *         try:             # <<<<<<<<<<<<<<
 *             return dclass(year=year, month=month, day=day)
 *         except Exception as err:
*/
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L10_try_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L0;
    }

    /* "utils.pxd":2690
 *     """
 *     # Construct date
 *     if dclass is not None and dclass is not datetime.date:             # <<<<<<<<<<<<<<
 *         try:
 *             return dclass(year=year, month=month, day=day)
*/
  }

  /* "utils.pxd":2695
 *         except Exception as err:
 *             raise ValueError("Cannot create date using custom 'dclass' %s, %s" % (dclass, err)) from err
 *     return datetime.date_new(year, month, day)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_now(object tzinfo=None, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_13 = ((PyObject *)__pyx_f_7cpython_8datetime_date_new(__pyx_v_year, __pyx_v_month, __pyx_v_day)); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 2695, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_13);
  __pyx_t_13 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2679
 * # datetime.date ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.date date_new(int year=1, int month=1, int day=1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new date `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __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_13);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("cytimes.utils.date_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2697
 *     return datetime.date_new(year, month, day)
 * 
 * cdef inline datetime.date date_now(object tzinfo=None, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Get today's date `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_now(struct __pyx_opt_args_7cytimes_5utils_date_now *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_now __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_fr_dt __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_now", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dclass = __pyx_optional_args->dclass;
      }
    }
  }

  /* "utils.pxd":2710
 *     :returns `<'datetime.date'>`: Today's date (or subclass if `dclass` is specified).
 *     """
 *     return date_fr_dt(dt_now(tzinfo, None), dclass)             # <<<<<<<<<<<<<<
 * 
 * # . type check
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.dtclass = Py_None;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_now(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.dclass = __pyx_v_dclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_date_fr_dt(((PyDateTime_DateTime *)__pyx_t_1), &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 2710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Date *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2697
 *     return datetime.date_new(year, month, day)
 * 
 * cdef inline datetime.date date_now(object tzinfo=None, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Get today's date `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.date_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2713
 * 
 * # . type check
 * cdef inline bint is_date(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.date` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_date(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":2722
 *     >>> isinstance(obj, datetime.date)
 *     """
 *     return datetime.PyDate_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_date_exact(object obj) except -1:
*/
  __pyx_r = PyDate_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":2713
 * 
 * # . type check
 * cdef inline bint is_date(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.date` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":2724
 *     return datetime.PyDate_Check(obj)
 * 
 * cdef inline bint is_date_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.date` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_date_exact(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":2733
 *     >>> type(obj) is datetime.date
 *     """
 *     return datetime.PyDate_CheckExact(obj)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: to
*/
  __pyx_r = PyDate_CheckExact(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":2724
 *     return datetime.PyDate_Check(obj)
 * 
 * cdef inline bint is_date_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.date` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":2736
 * 
 * # . conversion: to
 * cdef inline str date_strformat(datetime.date date, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a `datetime.date` with a strftime-style format `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_date_strformat(PyDateTime_Date *__pyx_v_date, PyObject *__pyx_v_fmt) {
  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("date_strformat", 0);

  /* "utils.pxd":2749
 *     >>> date.strftime(fmt)
 *     """
 *     return tm_strformat(date_to_tm(date), fmt)             # <<<<<<<<<<<<<<
 * 
 * cdef inline str date_isoformat(datetime.date date):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_tm_strformat(__pyx_f_7cytimes_5utils_date_to_tm(__pyx_v_date), __pyx_v_fmt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2736
 * 
 * # . conversion: to
 * cdef inline str date_strformat(datetime.date date, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a `datetime.date` with a strftime-style format `<'str'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_strformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2751
 *     return tm_strformat(date_to_tm(date), fmt)
 * 
 * cdef inline str date_isoformat(datetime.date date):             # <<<<<<<<<<<<<<
 *     """Format `datetime.date` to the ISO-8601 calendar string `YYYY-MM-DD` `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_date_isoformat(PyDateTime_Date *__pyx_v_date) {
  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[5];
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_isoformat", 0);

  /* "utils.pxd":2757
 *     :returns `<'str'>`: ISO string in the form `YYYY-MM-DD`.
 *     """
 *     return "%04d-%02d-%02d" % (date.year, date.month, date.day)             # <<<<<<<<<<<<<<
 * 
 * cdef inline tm date_to_tm(datetime.date date) noexcept:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date), 4, '0', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date), 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 2757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 2757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4[0] = __pyx_t_1;
  __pyx_t_4[1] = __pyx_mstate_global->__pyx_kp_u__4;
  __pyx_t_4[2] = __pyx_t_2;
  __pyx_t_4[3] = __pyx_mstate_global->__pyx_kp_u__4;
  __pyx_t_4[4] = __pyx_t_3;
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 5, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3), 127);
  if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 2757, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = ((PyObject*)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2751
 *     return tm_strformat(date_to_tm(date), fmt)
 * 
 * cdef inline str date_isoformat(datetime.date date):             # <<<<<<<<<<<<<<
 *     """Format `datetime.date` to the ISO-8601 calendar string `YYYY-MM-DD` `<'str'>`.
 * 
*/

  /* 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("cytimes.utils.date_isoformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2759
 *     return "%04d-%02d-%02d" % (date.year, date.month, date.day)
 * 
 * cdef inline tm date_to_tm(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_date_to_tm(PyDateTime_Date *__pyx_v_date) {
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  struct tm __pyx_v_out;
  struct tm __pyx_r;

  /* "utils.pxd":2776
 *     """
 *     cdef:
 *         int yy = date.year             # <<<<<<<<<<<<<<
 *         int mm = date.month
 *         int dd = date.day
*/
  __pyx_v_yy = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);

  /* "utils.pxd":2777
 *     cdef:
 *         int yy = date.year
 *         int mm = date.month             # <<<<<<<<<<<<<<
 *         int dd = date.day
 *         tm out
*/
  __pyx_v_mm = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);

  /* "utils.pxd":2778
 *         int yy = date.year
 *         int mm = date.month
 *         int dd = date.day             # <<<<<<<<<<<<<<
 *         tm out
 * 
*/
  __pyx_v_dd = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);

  /* "utils.pxd":2781
 *         tm out
 * 
 *     out.tm_sec = 0             # <<<<<<<<<<<<<<
 *     out.tm_min = 0
 *     out.tm_hour = 0
*/
  __pyx_v_out.tm_sec = 0;

  /* "utils.pxd":2782
 * 
 *     out.tm_sec = 0
 *     out.tm_min = 0             # <<<<<<<<<<<<<<
 *     out.tm_hour = 0
 *     out.tm_mday = dd
*/
  __pyx_v_out.tm_min = 0;

  /* "utils.pxd":2783
 *     out.tm_sec = 0
 *     out.tm_min = 0
 *     out.tm_hour = 0             # <<<<<<<<<<<<<<
 *     out.tm_mday = dd
 *     out.tm_mon = mm
*/
  __pyx_v_out.tm_hour = 0;

  /* "utils.pxd":2784
 *     out.tm_min = 0
 *     out.tm_hour = 0
 *     out.tm_mday = dd             # <<<<<<<<<<<<<<
 *     out.tm_mon = mm
 *     out.tm_year = yy
*/
  __pyx_v_out.tm_mday = __pyx_v_dd;

  /* "utils.pxd":2785
 *     out.tm_hour = 0
 *     out.tm_mday = dd
 *     out.tm_mon = mm             # <<<<<<<<<<<<<<
 *     out.tm_year = yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
*/
  __pyx_v_out.tm_mon = __pyx_v_mm;

  /* "utils.pxd":2786
 *     out.tm_mday = dd
 *     out.tm_mon = mm
 *     out.tm_year = yy             # <<<<<<<<<<<<<<
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd
*/
  __pyx_v_out.tm_year = __pyx_v_yy;

  /* "utils.pxd":2787
 *     out.tm_mon = mm
 *     out.tm_year = yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)             # <<<<<<<<<<<<<<
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1
*/
  __pyx_v_out.tm_wday = __pyx_f_7cytimes_5utils_ymd_weekday(__pyx_v_yy, __pyx_v_mm, __pyx_v_dd);

  /* "utils.pxd":2788
 *     out.tm_year = yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd             # <<<<<<<<<<<<<<
 *     out.tm_isdst = -1
 *     return out
*/
  __pyx_v_out.tm_yday = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm) + __pyx_v_dd);

  /* "utils.pxd":2789
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_isdst = -1;

  /* "utils.pxd":2790
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = -1
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long date_to_us(datetime.date date) noexcept:
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":2759
 *     return "%04d-%02d-%02d" % (date.year, date.month, date.day)
 * 
 * cdef inline tm date_to_tm(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to `<'struct:tm'>`.
 * 
*/

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

/* "utils.pxd":2792
 *     return out
 * 
 * cdef inline long long date_to_us(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to microseconds since the
 *     Unix epoch (UTC midnight) `<'int'>`.
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_date_to_us(PyDateTime_Date *__pyx_v_date) {
  PY_LONG_LONG __pyx_r;

  /* "utils.pxd":2800
 *         Negative for dates before 1970-01-01.
 *     """
 *     return (date_to_ord(date) - EPOCH_DAY) * US_DAY             # <<<<<<<<<<<<<<
 * 
 * cdef inline double date_to_sec(datetime.date date) noexcept:
*/
  __pyx_r = ((__pyx_f_7cytimes_5utils_date_to_ord(__pyx_v_date) - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_US_DAY);
  goto __pyx_L0;

  /* "utils.pxd":2792
 *     return out
 * 
 * cdef inline long long date_to_us(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to microseconds since the
 *     Unix epoch (UTC midnight) `<'int'>`.
*/

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

/* "utils.pxd":2802
 *     return (date_to_ord(date) - EPOCH_DAY) * US_DAY
 * 
 * cdef inline double date_to_sec(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to seconds since the
 *     Unix epoch (UTC midnight) `<'float'>`.
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_date_to_sec(PyDateTime_Date *__pyx_v_date) {
  double __pyx_r;

  /* "utils.pxd":2810
 *         Negative for dates before 1970-01-01.
 *     """
 *     return <double> ((date_to_ord(date) - EPOCH_DAY) * SS_DAY)             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long date_to_ord(datetime.date date) noexcept:
*/
  __pyx_r = ((double)((__pyx_f_7cytimes_5utils_date_to_ord(__pyx_v_date) - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_SS_DAY));
  goto __pyx_L0;

  /* "utils.pxd":2802
 *     return (date_to_ord(date) - EPOCH_DAY) * US_DAY
 * 
 * cdef inline double date_to_sec(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to seconds since the
 *     Unix epoch (UTC midnight) `<'float'>`.
*/

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

/* "utils.pxd":2812
 *     return <double> ((date_to_ord(date) - EPOCH_DAY) * SS_DAY)
 * 
 * cdef inline long long date_to_ord(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to the Gregorian ordinal (0001-01-01 = 1) `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_date_to_ord(PyDateTime_Date *__pyx_v_date) {
  PY_LONG_LONG __pyx_r;

  /* "utils.pxd":2818
 *     :returns `<'int'>`: Ordinal day number in the proleptic Gregorian calendar.
 *     """
 *     return ymd_to_ord(date.year, date.month, date.day)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: from
*/
  __pyx_r = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date), __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date), __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date));
  goto __pyx_L0;

  /* "utils.pxd":2812
 *     return <double> ((date_to_ord(date) - EPOCH_DAY) * SS_DAY)
 * 
 * cdef inline long long date_to_ord(datetime.date date) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.date` to the Gregorian ordinal (0001-01-01 = 1) `<'int'>`.
 * 
*/

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

/* "utils.pxd":2821
 * 
 * # . conversion: from
 * cdef inline datetime.date date_fr_us(long long value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from microseconds since the Unix epoch `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_us(PY_LONG_LONG __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_date_fr_us *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2829
 *     :returns `<'datetime.date'>`: The resulting date (or subclass if `dclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_us(value)             # <<<<<<<<<<<<<<
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_us(__pyx_v_value);

  /* "utils.pxd":2830
 *     """
 *     cdef ymd _ymd = ymd_fr_us(value)
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_sec(double value, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2821
 * 
 * # . conversion: from
 * cdef inline datetime.date date_fr_us(long long value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from microseconds since the Unix epoch `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2832
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_sec(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from seconds since the Unix epoch `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_sec(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_date_fr_sec *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2840
 *     :returns `<'datetime.date'>`: The resulting date (or subclass if `dclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_sec(value)             # <<<<<<<<<<<<<<
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_sec(__pyx_v_value);

  /* "utils.pxd":2841
 *     """
 *     cdef ymd _ymd = ymd_fr_sec(value)
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_ord(int value, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2832
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_sec(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from seconds since the Unix epoch `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2843
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ord(int value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_ord(int __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_date_fr_ord *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_ord", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2851
 *     :returns `<'datetime.date'>`: The resulting date (or subclass if `dclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_ord(value)             # <<<<<<<<<<<<<<
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_value);

  /* "utils.pxd":2852
 *     """
 *     cdef ymd _ymd = ymd_fr_ord(value)
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_iso(int year, int week, int weekday, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2852, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2843
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ord(int value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_ord", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2854
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_iso(int year, int week, int weekday, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from ISO calendar values (year, week, weekday) `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_iso(int __pyx_v_year, int __pyx_v_week, int __pyx_v_weekday, struct __pyx_opt_args_7cytimes_5utils_date_fr_iso *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_iso", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2866
 *     :returns `<'datetime.date'>`: The resulting date (or subclass if `dclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_iso(year, week, weekday)             # <<<<<<<<<<<<<<
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_iso(__pyx_v_year, __pyx_v_week, __pyx_v_weekday);

  /* "utils.pxd":2867
 *     """
 *     cdef ymd _ymd = ymd_fr_iso(year, week, weekday)
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_doy(int year, int doy, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2854
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_iso(int year, int week, int weekday, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from ISO calendar values (year, week, weekday) `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_iso", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2869
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_doy(int year, int doy, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from Gregorian year and day-of-year `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_doy(int __pyx_v_year, int __pyx_v_doy, struct __pyx_opt_args_7cytimes_5utils_date_fr_doy *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_doy", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2879
 *     :returns `<'datetime.date'>`: The resulting date (or subclass if `dclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_doy(year, doy)             # <<<<<<<<<<<<<<
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_doy(__pyx_v_year, __pyx_v_doy);

  /* "utils.pxd":2880
 *     """
 *     cdef ymd _ymd = ymd_fr_doy(year, doy)
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_ts(double value, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2880, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2869
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_doy(int year, int doy, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from Gregorian year and day-of-year `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_doy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2882
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ts(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a POSIX timestamp in **local** time `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_ts(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_date_fr_ts *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  PyDateTime_Date *__pyx_v_date = 0;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_date_fr_date __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_ts", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2891
 *         in the system **local** timezone.
 *     """
 *     cdef datetime.date date = datetime.date_from_timestamp(value)             # <<<<<<<<<<<<<<
 *     return date if dclass is None else date_fr_date(date, dclass)
 * 
*/
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_8datetime_date_from_timestamp(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 2891, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_date = ((PyDateTime_Date *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":2892
 *     """
 *     cdef datetime.date date = datetime.date_from_timestamp(value)
 *     return date if dclass is None else date_fr_date(date, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_date(datetime.date date, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3 = (__pyx_v_dclass == Py_None);
  if (__pyx_t_3) {
    __Pyx_INCREF((PyObject *)__pyx_v_date);
    __pyx_t_2 = ((PyObject *)__pyx_v_date);
  } else {
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dclass = __pyx_v_dclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_fr_date(__pyx_v_date, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_r = ((PyDateTime_Date *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2882
 *     return date_new(_ymd.year, _ymd.month, _ymd.day, dclass)
 * 
 * cdef inline datetime.date date_fr_ts(double value, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a POSIX timestamp in **local** time `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.date_fr_ts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_date);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2894
 *     return date if dclass is None else date_fr_date(date, dclass)
 * 
 * cdef inline datetime.date date_fr_date(datetime.date date, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from another date (or subclass) `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_date(PyDateTime_Date *__pyx_v_date, struct __pyx_opt_args_7cytimes_5utils_date_fr_date *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_date", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }
  __Pyx_INCREF(__pyx_v_dclass);

  /* "utils.pxd":2904
 *         with the same date fields.
 *     """
 *     if dclass is None:             # <<<<<<<<<<<<<<
 *         dclass = datetime.date
 *     if dclass is type(date):
*/
  __pyx_t_1 = (__pyx_v_dclass == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":2905
 *     """
 *     if dclass is None:
 *         dclass = datetime.date             # <<<<<<<<<<<<<<
 *     if dclass is type(date):
 *         return date
*/
    __Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date);
    __Pyx_DECREF_SET(__pyx_v_dclass, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date));

    /* "utils.pxd":2904
 *         with the same date fields.
 *     """
 *     if dclass is None:             # <<<<<<<<<<<<<<
 *         dclass = datetime.date
 *     if dclass is type(date):
*/
  }

  /* "utils.pxd":2906
 *     if dclass is None:
 *         dclass = datetime.date
 *     if dclass is type(date):             # <<<<<<<<<<<<<<
 *         return date
 *     return date_new(date.year, date.month, date.day, dclass)
*/
  __pyx_t_1 = (__pyx_v_dclass == ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_date))));
  if (__pyx_t_1) {

    /* "utils.pxd":2907
 *         dclass = datetime.date
 *     if dclass is type(date):
 *         return date             # <<<<<<<<<<<<<<
 *     return date_new(date.year, date.month, date.day, dclass)
 * 
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_date);
    __pyx_r = __pyx_v_date;
    goto __pyx_L0;

    /* "utils.pxd":2906
 *     if dclass is None:
 *         dclass = datetime.date
 *     if dclass is type(date):             # <<<<<<<<<<<<<<
 *         return date
 *     return date_new(date.year, date.month, date.day, dclass)
*/
  }

  /* "utils.pxd":2908
 *     if dclass is type(date):
 *         return date
 *     return date_new(date.year, date.month, date.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_fr_dt(datetime.datetime dt, object dclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 4;
  __pyx_t_3.year = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);
  __pyx_t_3.month = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);
  __pyx_t_3.day = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);
  __pyx_t_3.dclass = __pyx_v_dclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 2908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2894
 *     return date if dclass is None else date_fr_date(date, dclass)
 * 
 * cdef inline datetime.date date_fr_date(datetime.date date, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from another date (or subclass) `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.date_fr_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dclass);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2910
 *     return date_new(date.year, date.month, date.day, dclass)
 * 
 * cdef inline datetime.date date_fr_dt(datetime.datetime dt, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a datetime (include subclass) `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_fr_dt(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_date_fr_dt *__pyx_optional_args) {
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_fr_dt", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dclass = __pyx_optional_args->dclass;
    }
  }

  /* "utils.pxd":2919
 *         with the same date fields.
 *     """
 *     return date_new(dt.year, dt.month, dt.day, dclass)             # <<<<<<<<<<<<<<
 * 
 * # . manipulation
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 4;
  __pyx_t_2.year = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_2.month = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_2.day = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_t_2.dclass = __pyx_v_dclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 2919, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2910
 *     return date_new(date.year, date.month, date.day, dclass)
 * 
 * cdef inline datetime.date date_fr_dt(datetime.datetime dt, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Create date from a datetime (include subclass) `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.date_fr_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2922
 * 
 * # . manipulation
 * cdef inline datetime.date date_replace(datetime.date date, int year=-1, int month=-1, int day=-1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Replace specified fields in date `<'datetime.date'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_replace(PyDateTime_Date *__pyx_v_date, struct __pyx_opt_args_7cytimes_5utils_date_replace *__pyx_optional_args) {
  int __pyx_v_year = ((int)-1);
  int __pyx_v_month = ((int)-1);
  int __pyx_v_day = ((int)-1);
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  long __pyx_t_4;
  int __pyx_t_5;
  long __pyx_t_6;
  long __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_fr_date __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_replace", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_year = __pyx_optional_args->year;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_month = __pyx_optional_args->month;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_day = __pyx_optional_args->day;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_dclass = __pyx_optional_args->dclass;
          }
        }
      }
    }
  }

  /* "utils.pxd":2939
 *     # Get old fields
 *     cdef int yy, mm, dd
 *     yy, mm, dd = date.year, date.month, date.day             # <<<<<<<<<<<<<<
 * 
 *     # Gen new fields
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);
  __pyx_t_2 = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);
  __pyx_t_3 = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);
  __pyx_v_yy = __pyx_t_1;
  __pyx_v_mm = __pyx_t_2;
  __pyx_v_dd = __pyx_t_3;

  /* "utils.pxd":2942
 * 
 *     # Gen new fields
 *     year  = yy if year < 1 else min(year, 9999)             # <<<<<<<<<<<<<<
 *     month = mm if month < 1 else min(month, 12)
 *     if day < 1:
*/
  __pyx_t_5 = (__pyx_v_year < 1);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_v_yy;
  } else {
    __pyx_t_6 = 0x270F;
    __pyx_t_3 = __pyx_v_year;
    __pyx_t_8 = (__pyx_t_6 < __pyx_t_3);
    if (__pyx_t_8) {
      __pyx_t_7 = __pyx_t_6;
    } else {
      __pyx_t_7 = __pyx_t_3;
    }
    __pyx_t_4 = __pyx_t_7;
  }
  __pyx_v_year = __pyx_t_4;

  /* "utils.pxd":2943
 *     # Gen new fields
 *     year  = yy if year < 1 else min(year, 9999)
 *     month = mm if month < 1 else min(month, 12)             # <<<<<<<<<<<<<<
 *     if day < 1:
 *         day = dd
*/
  __pyx_t_5 = (__pyx_v_month < 1);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_v_mm;
  } else {
    __pyx_t_7 = 12;
    __pyx_t_3 = __pyx_v_month;
    __pyx_t_8 = (__pyx_t_7 < __pyx_t_3);
    if (__pyx_t_8) {
      __pyx_t_6 = __pyx_t_7;
    } else {
      __pyx_t_6 = __pyx_t_3;
    }
    __pyx_t_4 = __pyx_t_6;
  }
  __pyx_v_month = __pyx_t_4;

  /* "utils.pxd":2944
 *     year  = yy if year < 1 else min(year, 9999)
 *     month = mm if month < 1 else min(month, 12)
 *     if day < 1:             # <<<<<<<<<<<<<<
 *         day = dd
 *     elif day > 28:
*/
  __pyx_t_5 = (__pyx_v_day < 1);
  if (__pyx_t_5) {

    /* "utils.pxd":2945
 *     month = mm if month < 1 else min(month, 12)
 *     if day < 1:
 *         day = dd             # <<<<<<<<<<<<<<
 *     elif day > 28:
 *         day = min(day, days_in_month(year, month))
*/
    __pyx_v_day = __pyx_v_dd;

    /* "utils.pxd":2944
 *     year  = yy if year < 1 else min(year, 9999)
 *     month = mm if month < 1 else min(month, 12)
 *     if day < 1:             # <<<<<<<<<<<<<<
 *         day = dd
 *     elif day > 28:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":2946
 *     if day < 1:
 *         day = dd
 *     elif day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 * 
*/
  __pyx_t_5 = (__pyx_v_day > 28);
  if (__pyx_t_5) {

    /* "utils.pxd":2947
 *         day = dd
 *     elif day > 28:
 *         day = min(day, days_in_month(year, month))             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: same fields
*/
    __pyx_t_3 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_year, __pyx_v_month);
    __pyx_t_2 = __pyx_v_day;
    __pyx_t_5 = (__pyx_t_3 < __pyx_t_2);
    if (__pyx_t_5) {
      __pyx_t_1 = __pyx_t_3;
    } else {
      __pyx_t_1 = __pyx_t_2;
    }
    __pyx_v_day = __pyx_t_1;

    /* "utils.pxd":2946
 *     if day < 1:
 *         day = dd
 *     elif day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 * 
*/
  }
  __pyx_L3:;

  /* "utils.pxd":2950
 * 
 *     # Fast-path: same fields
 *     if yy == year and mm == month and dd == day:             # <<<<<<<<<<<<<<
 *         return date_fr_date(date, dclass)
 * 
*/
  __pyx_t_8 = (__pyx_v_yy == __pyx_v_year);
  if (__pyx_t_8) {
  } else {
    __pyx_t_5 = __pyx_t_8;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_8 = (__pyx_v_mm == __pyx_v_month);
  if (__pyx_t_8) {
  } else {
    __pyx_t_5 = __pyx_t_8;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_8 = (__pyx_v_dd == __pyx_v_day);
  __pyx_t_5 = __pyx_t_8;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_5) {

    /* "utils.pxd":2951
 *     # Fast-path: same fields
 *     if yy == year and mm == month and dd == day:
 *         return date_fr_date(date, dclass)             # <<<<<<<<<<<<<<
 * 
 *     # New date
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_10.__pyx_n = 1;
    __pyx_t_10.dclass = __pyx_v_dclass;
    __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_date_fr_date(__pyx_v_date, &__pyx_t_10)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 2951, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_r = ((PyDateTime_Date *)__pyx_t_9);
    __pyx_t_9 = 0;
    goto __pyx_L0;

    /* "utils.pxd":2950
 * 
 *     # Fast-path: same fields
 *     if yy == year and mm == month and dd == day:             # <<<<<<<<<<<<<<
 *         return date_fr_date(date, dclass)
 * 
*/
  }

  /* "utils.pxd":2954
 * 
 *     # New date
 *     return date_new(year, month, day, dclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.date date_add_delta(datetime.date date,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_11.__pyx_n = 4;
  __pyx_t_11.year = __pyx_v_year;
  __pyx_t_11.month = __pyx_v_month;
  __pyx_t_11.day = __pyx_v_day;
  __pyx_t_11.dclass = __pyx_v_dclass;
  __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_11)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 2954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_9);
  __pyx_t_9 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2922
 * 
 * # . manipulation
 * cdef inline datetime.date date_replace(datetime.date date, int year=-1, int month=-1, int day=-1, object dclass=None):             # <<<<<<<<<<<<<<
 *     """Replace specified fields in date `<'datetime.date'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.date_replace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":2956
 *     return date_new(year, month, day, dclass)
 * 
 * cdef inline datetime.date date_add_delta(datetime.date date,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/

static CYTHON_INLINE PyDateTime_Date *__pyx_f_7cytimes_5utils_date_add_delta(PyDateTime_Date *__pyx_v_date, struct __pyx_opt_args_7cytimes_5utils_date_add_delta *__pyx_optional_args) {
  int __pyx_v_years = ((int)0);
  int __pyx_v_quarters = ((int)0);
  int __pyx_v_months = ((int)0);
  int __pyx_v_weeks = ((int)0);
  PY_LONG_LONG __pyx_v_days = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_hours = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_minutes = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_seconds = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_milliseconds = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_microseconds = ((PY_LONG_LONG)0);
  int __pyx_v_year = ((int)-1);
  int __pyx_v_month = ((int)-1);
  int __pyx_v_day = ((int)-1);
  int __pyx_v_weekday = ((int)-1);
  int __pyx_v_hour = ((int)-1);
  int __pyx_v_minute = ((int)-1);
  int __pyx_v_second = ((int)-1);
  int __pyx_v_millisecond = ((int)-1);
  int __pyx_v_microsecond = ((int)-1);

  /* "utils.pxd":2960
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
 *     int year=-1, int month=-1, int day=-1, int weekday=-1, int hour=-1, int minute=-1,
 *     int second=-1, int millisecond=-1, int microsecond=-1, object dclass=None             # <<<<<<<<<<<<<<
 * ):
 *     """Add relative and absolute deltas to date `<'datetime.date'>`.
*/
  PyObject *__pyx_v_dclass = ((PyObject *)Py_None);
  int __pyx_v_o_yy;
  int __pyx_v_yy;
  int __pyx_v_o_mm;
  int __pyx_v_mm;
  int __pyx_v_o_dd;
  int __pyx_v_dd;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_rel_days;
  PY_LONG_LONG __pyx_v_us;
  PY_LONG_LONG __pyx_v_old_ord;
  PY_LONG_LONG __pyx_v_new_ord;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_Date *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PY_LONG_LONG __pyx_t_3;
  PY_LONG_LONG __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  PY_LONG_LONG __pyx_t_6;
  int __pyx_t_7;
  long __pyx_t_8;
  long __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_fr_date __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_date_new __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("date_add_delta", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_years = __pyx_optional_args->years;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_quarters = __pyx_optional_args->quarters;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_months = __pyx_optional_args->months;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_weeks = __pyx_optional_args->weeks;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_days = __pyx_optional_args->days;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_hours = __pyx_optional_args->hours;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_minutes = __pyx_optional_args->minutes;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_seconds = __pyx_optional_args->seconds;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_milliseconds = __pyx_optional_args->milliseconds;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_microseconds = __pyx_optional_args->microseconds;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_year = __pyx_optional_args->year;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_month = __pyx_optional_args->month;
                            if (__pyx_optional_args->__pyx_n > 12) {
                              __pyx_v_day = __pyx_optional_args->day;
                              if (__pyx_optional_args->__pyx_n > 13) {
                                __pyx_v_weekday = __pyx_optional_args->weekday;
                                if (__pyx_optional_args->__pyx_n > 14) {
                                  __pyx_v_hour = __pyx_optional_args->hour;
                                  if (__pyx_optional_args->__pyx_n > 15) {
                                    __pyx_v_minute = __pyx_optional_args->minute;
                                    if (__pyx_optional_args->__pyx_n > 16) {
                                      __pyx_v_second = __pyx_optional_args->second;
                                      if (__pyx_optional_args->__pyx_n > 17) {
                                        __pyx_v_millisecond = __pyx_optional_args->millisecond;
                                        if (__pyx_optional_args->__pyx_n > 18) {
                                          __pyx_v_microsecond = __pyx_optional_args->microsecond;
                                          if (__pyx_optional_args->__pyx_n > 19) {
                                            __pyx_v_dclass = __pyx_optional_args->dclass;
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  /* "utils.pxd":3001
 *     # ----------------------------------------------------
 *     cdef:
 *         int o_yy = date.year             # <<<<<<<<<<<<<<
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = date.month
*/
  __pyx_v_o_yy = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);

  /* "utils.pxd":3002
 *     cdef:
 *         int o_yy = date.year
 *         int yy = (year if year > 0 else o_yy) + years             # <<<<<<<<<<<<<<
 *         int o_mm = date.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
*/
  __pyx_t_2 = (__pyx_v_year > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_year;
  } else {
    __pyx_t_1 = __pyx_v_o_yy;
  }
  __pyx_v_yy = (__pyx_t_1 + __pyx_v_years);

  /* "utils.pxd":3003
 *         int o_yy = date.year
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = date.month             # <<<<<<<<<<<<<<
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = date.day
*/
  __pyx_v_o_mm = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);

  /* "utils.pxd":3004
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = date.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)             # <<<<<<<<<<<<<<
 *         int o_dd = date.day
 *         int dd = (day if day > 0 else o_dd)
*/
  __pyx_t_2 = (__pyx_v_month > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_month;
  } else {
    __pyx_t_1 = __pyx_v_o_mm;
  }
  __pyx_v_mm = ((__pyx_t_1 + __pyx_v_months) + (__pyx_v_quarters * 3));

  /* "utils.pxd":3005
 *         int o_mm = date.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = date.day             # <<<<<<<<<<<<<<
 *         int dd = (day if day > 0 else o_dd)
 *         long long q, r
*/
  __pyx_v_o_dd = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);

  /* "utils.pxd":3006
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = date.day
 *         int dd = (day if day > 0 else o_dd)             # <<<<<<<<<<<<<<
 *         long long q, r
 *     # . normalize month
*/
  __pyx_t_2 = (__pyx_v_day > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_day;
  } else {
    __pyx_t_1 = __pyx_v_o_dd;
  }
  __pyx_v_dd = __pyx_t_1;

  /* "utils.pxd":3009
 *         long long q, r
 *     # . normalize month
 *     if mm != o_mm:             # <<<<<<<<<<<<<<
 *         mm -= 1
 *         with cython.cdivision(True):
*/
  __pyx_t_2 = (__pyx_v_mm != __pyx_v_o_mm);
  if (__pyx_t_2) {

    /* "utils.pxd":3010
 *     # . normalize month
 *     if mm != o_mm:
 *         mm -= 1             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
*/
    __pyx_v_mm = (__pyx_v_mm - 1);

    /* "utils.pxd":3012
 *         mm -= 1
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += 12
*/
    __pyx_v_q = (((long)__pyx_v_mm) / 12);
    __pyx_v_r = (__pyx_v_mm % 12);

    /* "utils.pxd":3013
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1
*/
    __pyx_t_2 = (__pyx_v_r < 0);
    if (__pyx_t_2) {

      /* "utils.pxd":3014
 *             q = mm / 12; r = mm % 12
 *         if r < 0:
 *             q -= 1; r += 12             # <<<<<<<<<<<<<<
 *         yy += q; mm = r + 1
 *     # . relative days
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + 12);

      /* "utils.pxd":3013
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1
*/
    }

    /* "utils.pxd":3015
 *         if r < 0:
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1             # <<<<<<<<<<<<<<
 *     # . relative days
 *     cdef long long rel_days = days + (weeks * 7)
*/
    __pyx_v_yy = (__pyx_v_yy + __pyx_v_q);
    __pyx_v_mm = (__pyx_v_r + 1);

    /* "utils.pxd":3009
 *         long long q, r
 *     # . normalize month
 *     if mm != o_mm:             # <<<<<<<<<<<<<<
 *         mm -= 1
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":3017
 *         yy += q; mm = r + 1
 *     # . relative days
 *     cdef long long rel_days = days + (weeks * 7)             # <<<<<<<<<<<<<<
 * 
 *     # Time fields
*/
  __pyx_v_rel_days = (__pyx_v_days + (__pyx_v_weeks * 7));

  /* "utils.pxd":3021
 *     # Time fields
 *     # ----------------------------------------------------
 *     cdef long long us = combine_absolute_ms_us(millisecond, microsecond)             # <<<<<<<<<<<<<<
 *     us = (
 *         (us if us >= 0 else 0) + milliseconds * US_MILLISECOND + microseconds +
*/
  __pyx_v_us = __pyx_f_7cytimes_5utils_combine_absolute_ms_us(__pyx_v_millisecond, __pyx_v_microsecond);

  /* "utils.pxd":3023
 *     cdef long long us = combine_absolute_ms_us(millisecond, microsecond)
 *     us = (
 *         (us if us >= 0 else 0) + milliseconds * US_MILLISECOND + microseconds +             # <<<<<<<<<<<<<<
 *         ((second if second >= 0 else 0) + seconds) * US_SECOND +
 *         ((minute if minute >= 0 else 0) + minutes) * US_MINUTE +
*/
  __pyx_t_2 = (__pyx_v_us >= 0);
  if (__pyx_t_2) {
    __pyx_t_3 = __pyx_v_us;
  } else {
    __pyx_t_3 = 0;
  }

  /* "utils.pxd":3024
 *     us = (
 *         (us if us >= 0 else 0) + milliseconds * US_MILLISECOND + microseconds +
 *         ((second if second >= 0 else 0) + seconds) * US_SECOND +             # <<<<<<<<<<<<<<
 *         ((minute if minute >= 0 else 0) + minutes) * US_MINUTE +
 *         ((hour if hour >= 0 else 0) + hours)       * US_HOUR
*/
  __pyx_t_2 = (__pyx_v_second >= 0);
  if (__pyx_t_2) {
    __pyx_t_4 = __pyx_v_second;
  } else {
    __pyx_t_4 = 0;
  }

  /* "utils.pxd":3025
 *         (us if us >= 0 else 0) + milliseconds * US_MILLISECOND + microseconds +
 *         ((second if second >= 0 else 0) + seconds) * US_SECOND +
 *         ((minute if minute >= 0 else 0) + minutes) * US_MINUTE +             # <<<<<<<<<<<<<<
 *         ((hour if hour >= 0 else 0) + hours)       * US_HOUR
 *     )
*/
  __pyx_t_2 = (__pyx_v_minute >= 0);
  if (__pyx_t_2) {
    __pyx_t_5 = __pyx_v_minute;
  } else {
    __pyx_t_5 = 0;
  }

  /* "utils.pxd":3026
 *         ((second if second >= 0 else 0) + seconds) * US_SECOND +
 *         ((minute if minute >= 0 else 0) + minutes) * US_MINUTE +
 *         ((hour if hour >= 0 else 0) + hours)       * US_HOUR             # <<<<<<<<<<<<<<
 *     )
 *     # . normalize time to days
*/
  __pyx_t_2 = (__pyx_v_hour >= 0);
  if (__pyx_t_2) {
    __pyx_t_6 = __pyx_v_hour;
  } else {
    __pyx_t_6 = 0;
  }

  /* "utils.pxd":3025
 *         (us if us >= 0 else 0) + milliseconds * US_MILLISECOND + microseconds +
 *         ((second if second >= 0 else 0) + seconds) * US_SECOND +
 *         ((minute if minute >= 0 else 0) + minutes) * US_MINUTE +             # <<<<<<<<<<<<<<
 *         ((hour if hour >= 0 else 0) + hours)       * US_HOUR
 *     )
*/
  __pyx_v_us = (((((__pyx_t_3 + (__pyx_v_milliseconds * __pyx_v_7cytimes_5utils_US_MILLISECOND)) + __pyx_v_microseconds) + ((__pyx_t_4 + __pyx_v_seconds) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((__pyx_t_5 + __pyx_v_minutes) * __pyx_v_7cytimes_5utils_US_MINUTE)) + ((__pyx_t_6 + __pyx_v_hours) * __pyx_v_7cytimes_5utils_US_HOUR));

  /* "utils.pxd":3029
 *     )
 *     # . normalize time to days
 *     if us != 0:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = us / US_DAY; r = us % US_DAY
*/
  __pyx_t_2 = (__pyx_v_us != 0);
  if (__pyx_t_2) {

    /* "utils.pxd":3031
 *     if us != 0:
 *         with cython.cdivision(True):
 *             q = us / US_DAY; r = us % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_us / __pyx_v_7cytimes_5utils_US_DAY);
    __pyx_v_r = (__pyx_v_us % __pyx_v_7cytimes_5utils_US_DAY);

    /* "utils.pxd":3032
 *         with cython.cdivision(True):
 *             q = us / US_DAY; r = us % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         rel_days += q
*/
    __pyx_t_2 = (__pyx_v_r < 0);
    if (__pyx_t_2) {

      /* "utils.pxd":3033
 *             q = us / US_DAY; r = us % US_DAY
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *         rel_days += q
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":3032
 *         with cython.cdivision(True):
 *             q = us / US_DAY; r = us % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         rel_days += q
*/
    }

    /* "utils.pxd":3034
 *         if r < 0:
 *             q -= 1
 *         rel_days += q             # <<<<<<<<<<<<<<
 * 
 *     # Handle day delta
*/
    __pyx_v_rel_days = (__pyx_v_rel_days + __pyx_v_q);

    /* "utils.pxd":3029
 *     )
 *     # . normalize time to days
 *     if us != 0:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = us / US_DAY; r = us % US_DAY
*/
  }

  /* "utils.pxd":3040
 *     cdef long long old_ord, new_ord
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:             # <<<<<<<<<<<<<<
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days
*/
  __pyx_t_7 = (__pyx_v_rel_days != 0);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_weekday >= 0);
  __pyx_t_2 = __pyx_t_7;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_2) {

    /* "utils.pxd":3041
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:
 *         old_ord = ymd_to_ord(yy, mm, dd)             # <<<<<<<<<<<<<<
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
*/
    __pyx_v_old_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_yy, __pyx_v_mm, __pyx_v_dd);

    /* "utils.pxd":3042
 *     if rel_days != 0 or weekday >= 0:
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days             # <<<<<<<<<<<<<<
 *         # . adjust to weekday if needed
 *         if weekday >= 0:
*/
    __pyx_v_new_ord = (__pyx_v_old_ord + __pyx_v_rel_days);

    /* "utils.pxd":3044
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
 *         if weekday >= 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
*/
    __pyx_t_2 = (__pyx_v_weekday >= 0);
    if (__pyx_t_2) {

      /* "utils.pxd":3046
 *         if weekday >= 0:
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7             # <<<<<<<<<<<<<<
 *                 if r < 0:
 *                     r += 7
*/
      __pyx_v_r = ((__pyx_v_new_ord + 6) % 7);

      /* "utils.pxd":3047
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
*/
      __pyx_t_2 = (__pyx_v_r < 0);
      if (__pyx_t_2) {

        /* "utils.pxd":3048
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:
 *                     r += 7             # <<<<<<<<<<<<<<
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:
*/
        __pyx_v_r = (__pyx_v_r + 7);

        /* "utils.pxd":3047
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
*/
      }

      /* "utils.pxd":3049
 *                 if r < 0:
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6             # <<<<<<<<<<<<<<
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)
*/
      __pyx_t_8 = 6;
      __pyx_t_1 = __pyx_v_weekday;
      __pyx_t_2 = (__pyx_t_8 < __pyx_t_1);
      if (__pyx_t_2) {
        __pyx_t_9 = __pyx_t_8;
      } else {
        __pyx_t_9 = __pyx_t_1;
      }
      __pyx_v_new_ord = (__pyx_v_new_ord + (__pyx_t_9 - __pyx_v_r));

      /* "utils.pxd":3044
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
 *         if weekday >= 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
*/
    }

    /* "utils.pxd":3050
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:             # <<<<<<<<<<<<<<
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
    __pyx_t_2 = (__pyx_v_old_ord != __pyx_v_new_ord);
    if (__pyx_t_2) {

      /* "utils.pxd":3051
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)             # <<<<<<<<<<<<<<
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
 * 
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_new_ord);

      /* "utils.pxd":3052
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *     # Compare new dates
*/
      __pyx_t_1 = __pyx_v__ymd.year;
      __pyx_t_10 = __pyx_v__ymd.month;
      __pyx_t_11 = __pyx_v__ymd.day;
      __pyx_v_yy = __pyx_t_1;
      __pyx_v_mm = __pyx_t_10;
      __pyx_v_dd = __pyx_t_11;

      /* "utils.pxd":3050
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:             # <<<<<<<<<<<<<<
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
    }

    /* "utils.pxd":3040
 *     cdef long long old_ord, new_ord
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:             # <<<<<<<<<<<<<<
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days
*/
  }

  /* "utils.pxd":3055
 * 
 *     # Compare new dates
 *     if yy == o_yy and mm == o_mm and dd == o_dd:             # <<<<<<<<<<<<<<
 *         return date_fr_date(date, dclass)
 * 
*/
  __pyx_t_7 = (__pyx_v_yy == __pyx_v_o_yy);
  if (__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_mm == __pyx_v_o_mm);
  if (__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_dd == __pyx_v_o_dd);
  __pyx_t_2 = __pyx_t_7;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_2) {

    /* "utils.pxd":3056
 *     # Compare new dates
 *     if yy == o_yy and mm == o_mm and dd == o_dd:
 *         return date_fr_date(date, dclass)             # <<<<<<<<<<<<<<
 * 
 *     # Clamp day to valid days in month
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.dclass = __pyx_v_dclass;
    __pyx_t_12 = ((PyObject *)__pyx_f_7cytimes_5utils_date_fr_date(__pyx_v_date, &__pyx_t_13)); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_r = ((PyDateTime_Date *)__pyx_t_12);
    __pyx_t_12 = 0;
    goto __pyx_L0;

    /* "utils.pxd":3055
 * 
 *     # Compare new dates
 *     if yy == o_yy and mm == o_mm and dd == o_dd:             # <<<<<<<<<<<<<<
 *         return date_fr_date(date, dclass)
 * 
*/
  }

  /* "utils.pxd":3059
 * 
 *     # Clamp day to valid days in month
 *     if dd > 28:             # <<<<<<<<<<<<<<
 *         dd = min(dd, days_in_month(yy, mm))
 * 
*/
  __pyx_t_2 = (__pyx_v_dd > 28);
  if (__pyx_t_2) {

    /* "utils.pxd":3060
 *     # Clamp day to valid days in month
 *     if dd > 28:
 *         dd = min(dd, days_in_month(yy, mm))             # <<<<<<<<<<<<<<
 * 
 *     # New date
*/
    __pyx_t_11 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_yy, __pyx_v_mm);
    __pyx_t_10 = __pyx_v_dd;
    __pyx_t_2 = (__pyx_t_11 < __pyx_t_10);
    if (__pyx_t_2) {
      __pyx_t_1 = __pyx_t_11;
    } else {
      __pyx_t_1 = __pyx_t_10;
    }
    __pyx_v_dd = __pyx_t_1;

    /* "utils.pxd":3059
 * 
 *     # Clamp day to valid days in month
 *     if dd > 28:             # <<<<<<<<<<<<<<
 *         dd = min(dd, days_in_month(yy, mm))
 * 
*/
  }

  /* "utils.pxd":3063
 * 
 *     # New date
 *     return date_new(yy, mm, dd, dclass)             # <<<<<<<<<<<<<<
 * 
 * # datetime.datetime ------------------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_14.__pyx_n = 4;
  __pyx_t_14.year = __pyx_v_yy;
  __pyx_t_14.month = __pyx_v_mm;
  __pyx_t_14.day = __pyx_v_dd;
  __pyx_t_14.dclass = __pyx_v_dclass;
  __pyx_t_12 = ((PyObject *)__pyx_f_7cytimes_5utils_date_new(&__pyx_t_14)); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_r = ((PyDateTime_Date *)__pyx_t_12);
  __pyx_t_12 = 0;
  goto __pyx_L0;

  /* "utils.pxd":2956
 *     return date_new(year, month, day, dclass)
 * 
 * cdef inline datetime.date date_add_delta(datetime.date date,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cytimes.utils.date_add_delta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3067
 * # datetime.datetime ------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.datetime dt_new(             # <<<<<<<<<<<<<<
 *     int year=1, int month=1, int day=1, int hour=0, int minute=0, int second=0,
 *     int microsecond=0, object tzinfo=None, int fold=0, object dtclass=None,
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_new(struct __pyx_opt_args_7cytimes_5utils_dt_new *__pyx_optional_args) {
  int __pyx_v_year = ((int)1);
  int __pyx_v_month = ((int)1);
  int __pyx_v_day = ((int)1);
  int __pyx_v_hour = ((int)0);
  int __pyx_v_minute = ((int)0);
  int __pyx_v_second = ((int)0);
  int __pyx_v_microsecond = ((int)0);

  /* "utils.pxd":3069
 * cdef inline datetime.datetime dt_new(
 *     int year=1, int month=1, int day=1, int hour=0, int minute=0, int second=0,
 *     int microsecond=0, object tzinfo=None, int fold=0, object dtclass=None,             # <<<<<<<<<<<<<<
 * ):
 *     """Create a new datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  int __pyx_v_fold = ((int)0);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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;
  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;
  size_t __pyx_t_17;
  PyObject *__pyx_t_18 = NULL;
  int __pyx_t_19;
  PyObject *__pyx_t_20[4];
  int __pyx_t_21;
  char const *__pyx_t_22;
  PyObject *__pyx_t_23 = NULL;
  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;
  struct __pyx_opt_args_7cpython_8datetime_datetime_new __pyx_t_29;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_year = __pyx_optional_args->year;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_month = __pyx_optional_args->month;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_day = __pyx_optional_args->day;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_hour = __pyx_optional_args->hour;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_minute = __pyx_optional_args->minute;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_second = __pyx_optional_args->second;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_microsecond = __pyx_optional_args->microsecond;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_fold = __pyx_optional_args->fold;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_dtclass = __pyx_optional_args->dtclass;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  /* "utils.pxd":3088
 *     """
 *     # Construct datetime
 *     fold = fold == 1             # <<<<<<<<<<<<<<
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:
*/
  __pyx_v_fold = (__pyx_v_fold == 1);

  /* "utils.pxd":3089
 *     # Construct datetime
 *     fold = fold == 1
 *     if dtclass is not None and dtclass is not datetime.datetime:             # <<<<<<<<<<<<<<
 *         try:
 *             return dtclass(
*/
  __pyx_t_2 = (__pyx_v_dtclass != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_dtclass != ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":3090
 *     fold = fold == 1
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:             # <<<<<<<<<<<<<<
 *             return dtclass(
 *                 year=year,
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "utils.pxd":3091
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:
 *             return dtclass(             # <<<<<<<<<<<<<<
 *                 year=year,
 *                 month=month,
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = NULL;
        __Pyx_INCREF(__pyx_v_dtclass);
        __pyx_t_8 = __pyx_v_dtclass; 

        /* "utils.pxd":3092
 *         try:
 *             return dtclass(
 *                 year=year,             # <<<<<<<<<<<<<<
 *                 month=month,
 *                 day=day,
*/
        __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_year); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 3092, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);

        /* "utils.pxd":3093
 *             return dtclass(
 *                 year=year,
 *                 month=month,             # <<<<<<<<<<<<<<
 *                 day=day,
 *                 hour=hour,
*/
        __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_month); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 3093, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_10);

        /* "utils.pxd":3094
 *                 year=year,
 *                 month=month,
 *                 day=day,             # <<<<<<<<<<<<<<
 *                 hour=hour,
 *                 minute=minute,
*/
        __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_day); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 3094, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);

        /* "utils.pxd":3095
 *                 month=month,
 *                 day=day,
 *                 hour=hour,             # <<<<<<<<<<<<<<
 *                 minute=minute,
 *                 second=second,
*/
        __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_hour); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3095, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_12);

        /* "utils.pxd":3096
 *                 day=day,
 *                 hour=hour,
 *                 minute=minute,             # <<<<<<<<<<<<<<
 *                 second=second,
 *                 microsecond=microsecond,
*/
        __pyx_t_13 = __Pyx_PyLong_From_int(__pyx_v_minute); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 3096, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_13);

        /* "utils.pxd":3097
 *                 hour=hour,
 *                 minute=minute,
 *                 second=second,             # <<<<<<<<<<<<<<
 *                 microsecond=microsecond,
 *                 tzinfo=tzinfo,
*/
        __pyx_t_14 = __Pyx_PyLong_From_int(__pyx_v_second); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 3097, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_14);

        /* "utils.pxd":3098
 *                 minute=minute,
 *                 second=second,
 *                 microsecond=microsecond,             # <<<<<<<<<<<<<<
 *                 tzinfo=tzinfo,
 *                 fold=fold,
*/
        __pyx_t_15 = __Pyx_PyLong_From_int(__pyx_v_microsecond); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 3098, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_15);

        /* "utils.pxd":3100
 *                 microsecond=microsecond,
 *                 tzinfo=tzinfo,
 *                 fold=fold,             # <<<<<<<<<<<<<<
 *             )
 *         except Exception as err:
*/
        __pyx_t_16 = __Pyx_PyLong_From_int(__pyx_v_fold); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 3100, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_16);
        __pyx_t_17 = 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_17 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 9 : 0)] = {__pyx_t_7, NULL};
          __pyx_t_18 = __Pyx_MakeVectorcallBuilderKwds(9); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 3091, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_18);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_year, __pyx_t_9, __pyx_t_18, __pyx_callargs+1, 0) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_month, __pyx_t_10, __pyx_t_18, __pyx_callargs+1, 1) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_day, __pyx_t_11, __pyx_t_18, __pyx_callargs+1, 2) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_hour, __pyx_t_12, __pyx_t_18, __pyx_callargs+1, 3) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minute, __pyx_t_13, __pyx_t_18, __pyx_callargs+1, 4) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_second, __pyx_t_14, __pyx_t_18, __pyx_callargs+1, 5) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_microsecond, __pyx_t_15, __pyx_t_18, __pyx_callargs+1, 6) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_tzinfo, __pyx_t_18, __pyx_callargs+1, 7) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_fold, __pyx_t_16, __pyx_t_18, __pyx_callargs+1, 8) < (0)) __PYX_ERR(5, 3091, __pyx_L6_error)
          __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_17, (1-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_18);
          __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_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_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 3091, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
        }

        /* "utils.pxd":3091
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:
 *             return dtclass(             # <<<<<<<<<<<<<<
 *                 year=year,
 *                 month=month,
*/
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(5, 3091, __pyx_L6_error)
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L10_try_return;

        /* "utils.pxd":3090
 *     fold = fold == 1
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:             # <<<<<<<<<<<<<<
 *             return dtclass(
 *                 year=year,
*/
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 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;

      /* "utils.pxd":3102
 *                 fold=fold,
 *             )
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create datetime using custom 'dtclass' %s, %s" % (dtclass, err)) from err
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
*/
      __pyx_t_19 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_19) {
        __Pyx_AddTraceback("cytimes.utils.dt_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_18) < 0) __PYX_ERR(5, 3102, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_18);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_err = __pyx_t_8;
        /*try:*/ {

          /* "utils.pxd":3103
 *             )
 *         except Exception as err:
 *             raise ValueError("Cannot create datetime using custom 'dtclass' %s, %s" % (dtclass, err)) from err             # <<<<<<<<<<<<<<
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
 * 
*/
          __pyx_t_15 = NULL;
          __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_dtclass), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 3103, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_err), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 3103, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_20[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_create_datetime_using_cus;
          __pyx_t_20[1] = __pyx_t_14;
          __pyx_t_20[2] = __pyx_mstate_global->__pyx_kp_u__3;
          __pyx_t_20[3] = __pyx_t_13;
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_20, 4, 46 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13));
          if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3103, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __pyx_t_17 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_15, __pyx_t_12};
            __pyx_t_16 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_17, (2-__pyx_t_17) | (__pyx_t_17*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 3103, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_16);
          }
          __Pyx_Raise(__pyx_t_16, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
          __PYX_ERR(5, 3103, __pyx_L17_error)
        }

        /* "utils.pxd":3102
 *                 fold=fold,
 *             )
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create datetime using custom 'dtclass' %s, %s" % (dtclass, err)) from err
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
*/
        /*finally:*/ {
          __pyx_L17_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_26, &__pyx_t_27, &__pyx_t_28);
            if ( unlikely(__Pyx_GetException(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25) < 0)) __Pyx_ErrFetch(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
            __Pyx_XGOTREF(__pyx_t_23);
            __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_t_19 = __pyx_lineno; __pyx_t_21 = __pyx_clineno; __pyx_t_22 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_XGIVEREF(__pyx_t_27);
            __Pyx_XGIVEREF(__pyx_t_28);
            __Pyx_ExceptionReset(__pyx_t_26, __pyx_t_27, __pyx_t_28);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ErrRestore(__pyx_t_23, __pyx_t_24, __pyx_t_25);
            __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0; __pyx_t_27 = 0; __pyx_t_28 = 0;
            __pyx_lineno = __pyx_t_19; __pyx_clineno = __pyx_t_21; __pyx_filename = __pyx_t_22;
            goto __pyx_L8_except_error;
          }
        }
      }
      goto __pyx_L8_except_error;

      /* "utils.pxd":3090
 *     fold = fold == 1
 *     if dtclass is not None and dtclass is not datetime.datetime:
 *         try:             # <<<<<<<<<<<<<<
 *             return dtclass(
 *                 year=year,
*/
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L10_try_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L0;
    }

    /* "utils.pxd":3089
 *     # Construct datetime
 *     fold = fold == 1
 *     if dtclass is not None and dtclass is not datetime.datetime:             # <<<<<<<<<<<<<<
 *         try:
 *             return dtclass(
*/
  }

  /* "utils.pxd":3104
 *         except Exception as err:
 *             raise ValueError("Cannot create datetime using custom 'dtclass' %s, %s" % (dtclass, err)) from err
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_now(object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_29.__pyx_n = 1;
  __pyx_t_29.fold = __pyx_v_fold;
  __pyx_t_18 = ((PyObject *)__pyx_f_7cpython_8datetime_datetime_new(__pyx_v_year, __pyx_v_month, __pyx_v_day, __pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tzinfo, &__pyx_t_29)); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 3104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_18);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_18);
  __pyx_t_18 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3067
 * # datetime.datetime ------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.datetime dt_new(             # <<<<<<<<<<<<<<
 *     int year=1, int month=1, int day=1, int hour=0, int minute=0, int second=0,
 *     int microsecond=0, object tzinfo=None, int fold=0, object dtclass=None,
*/

  /* function exit code */
  __pyx_L1_error:;
  __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_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("cytimes.utils.dt_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3106
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.datetime dt_now(object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current datetime `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_now(struct __pyx_opt_args_7cytimes_5utils_dt_now *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  double __pyx_v_tic;
  PyDateTime_DateTime *__pyx_v_dt = 0;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp __pyx_t_3;
  int __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_now", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3122
 *     >>> datetime.datetime.now(tzinfo)
 *     """
 *     cdef double tic = unix_time()             # <<<<<<<<<<<<<<
 *     cdef datetime.datetime dt = datetime.datetime_from_timestamp(tic, tzinfo)
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
*/
  __pyx_v_tic = __pyx_f_7cpython_4time_time();

  /* "utils.pxd":3123
 *     """
 *     cdef double tic = unix_time()
 *     cdef datetime.datetime dt = datetime.datetime_from_timestamp(tic, tzinfo)             # <<<<<<<<<<<<<<
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_tic); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.tz = __pyx_v_tzinfo;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_8datetime_datetime_from_timestamp(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3123, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dt = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":3124
 *     cdef double tic = unix_time()
 *     cdef datetime.datetime dt = datetime.datetime_from_timestamp(tic, tzinfo)
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 * # . type check
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_4 = (__pyx_v_dtclass == Py_None);
  if (__pyx_t_4) {
    __Pyx_INCREF((PyObject *)__pyx_v_dt);
    __pyx_t_2 = ((PyObject *)__pyx_v_dt);
  } else {
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3124, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3106
 *     return datetime.datetime_new(year, month, day, hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.datetime dt_now(object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current datetime `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dt);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3127
 * 
 * # . type check
 * cdef inline bint is_dt(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.datetime` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":3136
 *     >>> isinstance(obj, datetime.datetime)
 *     """
 *     return datetime.PyDateTime_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_dt_exact(object obj) except -1:
*/
  __pyx_r = PyDateTime_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":3127
 * 
 * # . type check
 * cdef inline bint is_dt(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.datetime` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":3138
 *     return datetime.PyDateTime_Check(obj)
 * 
 * cdef inline bint is_dt_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.datetime` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt_exact(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":3147
 *     >>> type(obj) is datetime.datetime
 *     """
 *     return datetime.PyDateTime_CheckExact(obj)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: to
*/
  __pyx_r = PyDateTime_CheckExact(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":3138
 *     return datetime.PyDateTime_Check(obj)
 * 
 * cdef inline bint is_dt_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.datetime` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":3150
 * 
 * # . conversion: to
 * cdef inline long long dt_local_mktime(datetime.datetime dt) except *:             # <<<<<<<<<<<<<<
 *     """Interpret a naive `datetime.datetime` as local POSIX timestamp `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_local_mktime(PyDateTime_DateTime *__pyx_v_dt) {
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_t;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  PY_LONG_LONG __pyx_v_ss;
  PY_LONG_LONG __pyx_v_adj1;
  PY_LONG_LONG __pyx_v_adj2;
  PY_LONG_LONG __pyx_v_u1;
  PY_LONG_LONG __pyx_v_u2;
  PY_LONG_LONG __pyx_v_t1;
  PY_LONG_LONG __pyx_v_t2;
  PY_LONG_LONG __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_ord __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PY_LONG_LONG __pyx_t_7;
  PY_LONG_LONG __pyx_t_8;
  PY_LONG_LONG __pyx_t_9;
  int __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":3165
 * 
 *     # Seconds since epoch from local wall fields (no timezone adjustment here)
 *     ord = dt_to_ord(dt, False)            # <-- make sure this is the right helper             # <<<<<<<<<<<<<<
 *     hh, mi, ss = dt.hour, dt.minute, dt.second
 *     t = (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.utc = 0;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3165, __pyx_L1_error)
  __pyx_v_ord = __pyx_t_1;

  /* "utils.pxd":3166
 *     # Seconds since epoch from local wall fields (no timezone adjustment here)
 *     ord = dt_to_ord(dt, False)            # <-- make sure this is the right helper
 *     hh, mi, ss = dt.hour, dt.minute, dt.second             # <<<<<<<<<<<<<<
 *     t = (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
 * 
*/
  __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_4 = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_5 = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_v_hh = __pyx_t_3;
  __pyx_v_mi = __pyx_t_4;
  __pyx_v_ss = __pyx_t_5;

  /* "utils.pxd":3167
 *     ord = dt_to_ord(dt, False)            # <-- make sure this is the right helper
 *     hh, mi, ss = dt.hour, dt.minute, dt.second
 *     t = (ord - EPOCH_DAY) * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss             # <<<<<<<<<<<<<<
 * 
 *     # local(u) := ts_localtime(u)
*/
  __pyx_v_t = (((((__pyx_v_ord - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_SS_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_SS_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_SS_MINUTE)) + __pyx_v_ss);

  /* "utils.pxd":3170
 * 
 *     # local(u) := ts_localtime(u)
 *     adj1 = ts_localtime(t) - t             # <<<<<<<<<<<<<<
 *     u1 = t - adj1
 *     t1 = ts_localtime(u1)
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_ts_localtime(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3170, __pyx_L1_error)
  __pyx_v_adj1 = (__pyx_t_1 - __pyx_v_t);

  /* "utils.pxd":3171
 *     # local(u) := ts_localtime(u)
 *     adj1 = ts_localtime(t) - t
 *     u1 = t - adj1             # <<<<<<<<<<<<<<
 *     t1 = ts_localtime(u1)
 * 
*/
  __pyx_v_u1 = (__pyx_v_t - __pyx_v_adj1);

  /* "utils.pxd":3172
 *     adj1 = ts_localtime(t) - t
 *     u1 = t - adj1
 *     t1 = ts_localtime(u1)             # <<<<<<<<<<<<<<
 * 
 *     if t1 == t:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_ts_localtime(__pyx_v_u1); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3172, __pyx_L1_error)
  __pyx_v_t1 = __pyx_t_1;

  /* "utils.pxd":3174
 *     t1 = ts_localtime(u1)
 * 
 *     if t1 == t:             # <<<<<<<<<<<<<<
 *         # We found one solution, but it may not be the one we need.
 *         # Look for an earlier solution (if `fold` is 0), or a later
*/
  __pyx_t_6 = (__pyx_v_t1 == __pyx_v_t);
  if (__pyx_t_6) {

    /* "utils.pxd":3178
 *         # Look for an earlier solution (if `fold` is 0), or a later
 *         # one (if `fold` is 1).
 *         u2  = u1 - SS_DAY if dt.fold == 0 else u1 + SS_DAY             # <<<<<<<<<<<<<<
 *         adj2 = ts_localtime(u2) - u2
 *         if adj1 == adj2:
*/
    __pyx_t_6 = (__pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt) == 0);
    if (__pyx_t_6) {
      __pyx_t_1 = (__pyx_v_u1 - __pyx_v_7cytimes_5utils_SS_DAY);
    } else {
      __pyx_t_1 = (__pyx_v_u1 + __pyx_v_7cytimes_5utils_SS_DAY);
    }
    __pyx_v_u2 = __pyx_t_1;

    /* "utils.pxd":3179
 *         # one (if `fold` is 1).
 *         u2  = u1 - SS_DAY if dt.fold == 0 else u1 + SS_DAY
 *         adj2 = ts_localtime(u2) - u2             # <<<<<<<<<<<<<<
 *         if adj1 == adj2:
 *             return u1
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_ts_localtime(__pyx_v_u2); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3179, __pyx_L1_error)
    __pyx_v_adj2 = (__pyx_t_1 - __pyx_v_u2);

    /* "utils.pxd":3180
 *         u2  = u1 - SS_DAY if dt.fold == 0 else u1 + SS_DAY
 *         adj2 = ts_localtime(u2) - u2
 *         if adj1 == adj2:             # <<<<<<<<<<<<<<
 *             return u1
 *     else:
*/
    __pyx_t_6 = (__pyx_v_adj1 == __pyx_v_adj2);
    if (__pyx_t_6) {

      /* "utils.pxd":3181
 *         adj2 = ts_localtime(u2) - u2
 *         if adj1 == adj2:
 *             return u1             # <<<<<<<<<<<<<<
 *     else:
 *         adj2 = t1 - u1
*/
      __pyx_r = __pyx_v_u1;
      goto __pyx_L0;

      /* "utils.pxd":3180
 *         u2  = u1 - SS_DAY if dt.fold == 0 else u1 + SS_DAY
 *         adj2 = ts_localtime(u2) - u2
 *         if adj1 == adj2:             # <<<<<<<<<<<<<<
 *             return u1
 *     else:
*/
    }

    /* "utils.pxd":3174
 *     t1 = ts_localtime(u1)
 * 
 *     if t1 == t:             # <<<<<<<<<<<<<<
 *         # We found one solution, but it may not be the one we need.
 *         # Look for an earlier solution (if `fold` is 0), or a later
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":3183
 *             return u1
 *     else:
 *         adj2 = t1 - u1             # <<<<<<<<<<<<<<
 * 
 *     # Final attempt with the other offset
*/
  /*else*/ {
    __pyx_v_adj2 = (__pyx_v_t1 - __pyx_v_u1);
  }
  __pyx_L3:;

  /* "utils.pxd":3186
 * 
 *     # Final attempt with the other offset
 *     u2 = t - adj2             # <<<<<<<<<<<<<<
 *     t2 = ts_localtime(u2)
 *     if t2 == t:
*/
  __pyx_v_u2 = (__pyx_v_t - __pyx_v_adj2);

  /* "utils.pxd":3187
 *     # Final attempt with the other offset
 *     u2 = t - adj2
 *     t2 = ts_localtime(u2)             # <<<<<<<<<<<<<<
 *     if t2 == t:
 *         return u2
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_ts_localtime(__pyx_v_u2); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3187, __pyx_L1_error)
  __pyx_v_t2 = __pyx_t_1;

  /* "utils.pxd":3188
 *     u2 = t - adj2
 *     t2 = ts_localtime(u2)
 *     if t2 == t:             # <<<<<<<<<<<<<<
 *         return u2
 *     if t1 == t:
*/
  __pyx_t_6 = (__pyx_v_t2 == __pyx_v_t);
  if (__pyx_t_6) {

    /* "utils.pxd":3189
 *     t2 = ts_localtime(u2)
 *     if t2 == t:
 *         return u2             # <<<<<<<<<<<<<<
 *     if t1 == t:
 *         return u1
*/
    __pyx_r = __pyx_v_u2;
    goto __pyx_L0;

    /* "utils.pxd":3188
 *     u2 = t - adj2
 *     t2 = ts_localtime(u2)
 *     if t2 == t:             # <<<<<<<<<<<<<<
 *         return u2
 *     if t1 == t:
*/
  }

  /* "utils.pxd":3190
 *     if t2 == t:
 *         return u2
 *     if t1 == t:             # <<<<<<<<<<<<<<
 *         return u1
 * 
*/
  __pyx_t_6 = (__pyx_v_t1 == __pyx_v_t);
  if (__pyx_t_6) {

    /* "utils.pxd":3191
 *         return u2
 *     if t1 == t:
 *         return u1             # <<<<<<<<<<<<<<
 * 
 *     # We have found both offsets adj1 and adj2,
*/
    __pyx_r = __pyx_v_u1;
    goto __pyx_L0;

    /* "utils.pxd":3190
 *     if t2 == t:
 *         return u2
 *     if t1 == t:             # <<<<<<<<<<<<<<
 *         return u1
 * 
*/
  }

  /* "utils.pxd":3196
 *     # but neither t - adj1 nor t - adj2 is the
 *     # solution. This means t is in the gap.
 *     return max(u1, u2) if dt.fold == 0 else min(u1, u2)             # <<<<<<<<<<<<<<
 * 
 * cdef inline str dt_strformat(datetime.datetime dt, str fmt):
*/
  __pyx_t_6 = (__pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt) == 0);
  if (__pyx_t_6) {
    __pyx_t_7 = __pyx_v_u2;
    __pyx_t_8 = __pyx_v_u1;
    __pyx_t_10 = (__pyx_t_7 > __pyx_t_8);
    if (__pyx_t_10) {
      __pyx_t_9 = __pyx_t_7;
    } else {
      __pyx_t_9 = __pyx_t_8;
    }
    __pyx_t_1 = __pyx_t_9;
  } else {
    __pyx_t_9 = __pyx_v_u2;
    __pyx_t_7 = __pyx_v_u1;
    __pyx_t_10 = (__pyx_t_9 < __pyx_t_7);
    if (__pyx_t_10) {
      __pyx_t_8 = __pyx_t_9;
    } else {
      __pyx_t_8 = __pyx_t_7;
    }
    __pyx_t_1 = __pyx_t_8;
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":3150
 * 
 * # . conversion: to
 * cdef inline long long dt_local_mktime(datetime.datetime dt) except *:             # <<<<<<<<<<<<<<
 *     """Interpret a naive `datetime.datetime` as local POSIX timestamp `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.dt_local_mktime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":3198
 *     return max(u1, u2) if dt.fold == 0 else min(u1, u2)
 * 
 * cdef inline str dt_strformat(datetime.datetime dt, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a `datetime.datetime` with a strftime-style format `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_dt_strformat(PyDateTime_DateTime *__pyx_v_dt, PyObject *__pyx_v_fmt) {
  PyObject *__pyx_v_parts = 0;
  Py_ssize_t __pyx_v_size;
  Py_ssize_t __pyx_v_i;
  PyObject *__pyx_v_frepl = 0;
  PyObject *__pyx_v_zrepl = 0;
  PyObject *__pyx_v_Zrepl = 0;
  PyObject *__pyx_v_s_tmp = 0;
  Py_UCS4 __pyx_v_ch;
  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;
  Py_UCS4 __pyx_t_5;
  int __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcformat __pyx_t_7;
  struct tm __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_tm __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_strformat", 0);

  /* "utils.pxd":3208
 *     >>> dt.strftime(fmt)
 *     """
 *     if fmt is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("dt_strformat: 'fmt' cannot be None")
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_fmt == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":3209
 *     """
 *     if fmt is None:
 *         raise ValueError("dt_strformat: 'fmt' cannot be None")             # <<<<<<<<<<<<<<
 *     cdef:
 *         list parts = []
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_dt_strformat_fmt_cannot_be_None};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 3209, __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(5, 3209, __pyx_L1_error)

    /* "utils.pxd":3208
 *     >>> dt.strftime(fmt)
 *     """
 *     if fmt is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("dt_strformat: 'fmt' cannot be None")
 *     cdef:
*/
  }

  /* "utils.pxd":3211
 *         raise ValueError("dt_strformat: 'fmt' cannot be None")
 *     cdef:
 *         list parts = []             # <<<<<<<<<<<<<<
 *         Py_ssize_t size = str_len(fmt)
 *         Py_ssize_t i = 0
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_parts = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":3212
 *     cdef:
 *         list parts = []
 *         Py_ssize_t size = str_len(fmt)             # <<<<<<<<<<<<<<
 *         Py_ssize_t i = 0
 *         str frepl = None
*/
  __pyx_v_size = PyUnicode_GET_LENGTH(__pyx_v_fmt);

  /* "utils.pxd":3213
 *         list parts = []
 *         Py_ssize_t size = str_len(fmt)
 *         Py_ssize_t i = 0             # <<<<<<<<<<<<<<
 *         str frepl = None
 *         str zrepl = None
*/
  __pyx_v_i = 0;

  /* "utils.pxd":3214
 *         Py_ssize_t size = str_len(fmt)
 *         Py_ssize_t i = 0
 *         str frepl = None             # <<<<<<<<<<<<<<
 *         str zrepl = None
 *         str Zrepl = None
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_frepl = ((PyObject*)Py_None);

  /* "utils.pxd":3215
 *         Py_ssize_t i = 0
 *         str frepl = None
 *         str zrepl = None             # <<<<<<<<<<<<<<
 *         str Zrepl = None
 *         str s_tmp = None
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_zrepl = ((PyObject*)Py_None);

  /* "utils.pxd":3216
 *         str frepl = None
 *         str zrepl = None
 *         str Zrepl = None             # <<<<<<<<<<<<<<
 *         str s_tmp = None
 *         Py_UCS4 ch
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_Zrepl = ((PyObject*)Py_None);

  /* "utils.pxd":3217
 *         str zrepl = None
 *         str Zrepl = None
 *         str s_tmp = None             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 * 
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_s_tmp = ((PyObject*)Py_None);

  /* "utils.pxd":3221
 * 
 *     # Scan once, expand %f/%z/%Z, pass through others
 *     while i < size:             # <<<<<<<<<<<<<<
 *         ch = str_read(fmt, i)
 *         i += 1
*/
  while (1) {
    __pyx_t_1 = (__pyx_v_i < __pyx_v_size);
    if (!__pyx_t_1) break;

    /* "utils.pxd":3222
 *     # Scan once, expand %f/%z/%Z, pass through others
 *     while i < size:
 *         ch = str_read(fmt, i)             # <<<<<<<<<<<<<<
 *         i += 1
 * 
*/
    __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_fmt, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 3222, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_5;

    /* "utils.pxd":3223
 *     while i < size:
 *         ch = str_read(fmt, i)
 *         i += 1             # <<<<<<<<<<<<<<
 * 
 *         # Format identifier: '%'
*/
    __pyx_v_i = (__pyx_v_i + 1);

    /* "utils.pxd":3226
 * 
 *         # Format identifier: '%'
 *         if ch == "%":             # <<<<<<<<<<<<<<
 *             if i < size:
 *                 ch = str_read(fmt, i)
*/
    __pyx_t_1 = (__pyx_v_ch == 37);
    if (__pyx_t_1) {

      /* "utils.pxd":3227
 *         # Format identifier: '%'
 *         if ch == "%":
 *             if i < size:             # <<<<<<<<<<<<<<
 *                 ch = str_read(fmt, i)
 *                 i += 1
*/
      __pyx_t_1 = (__pyx_v_i < __pyx_v_size);
      if (__pyx_t_1) {

        /* "utils.pxd":3228
 *         if ch == "%":
 *             if i < size:
 *                 ch = str_read(fmt, i)             # <<<<<<<<<<<<<<
 *                 i += 1
 *                 # . fraction
*/
        __pyx_t_5 = PyUnicode_ReadChar(__pyx_v_fmt, __pyx_v_i); if (unlikely(__pyx_t_5 == ((Py_UCS4)-1))) __PYX_ERR(5, 3228, __pyx_L1_error)
        __pyx_v_ch = __pyx_t_5;

        /* "utils.pxd":3229
 *             if i < size:
 *                 ch = str_read(fmt, i)
 *                 i += 1             # <<<<<<<<<<<<<<
 *                 # . fraction
 *                 if ch == "f":
*/
        __pyx_v_i = (__pyx_v_i + 1);

        /* "utils.pxd":3231
 *                 i += 1
 *                 # . fraction
 *                 if ch == "f":             # <<<<<<<<<<<<<<
 *                     if frepl is None:
 *                         frepl = "%06d" % dt.microsecond
*/
        switch (__pyx_v_ch) {
          case 0x66:

          /* "utils.pxd":3232
 *                 # . fraction
 *                 if ch == "f":
 *                     if frepl is None:             # <<<<<<<<<<<<<<
 *                         frepl = "%06d" % dt.microsecond
 *                     parts.append(frepl)
*/
          __pyx_t_1 = (__pyx_v_frepl == ((PyObject*)Py_None));
          if (__pyx_t_1) {

            /* "utils.pxd":3233
 *                 if ch == "f":
 *                     if frepl is None:
 *                         frepl = "%06d" % dt.microsecond             # <<<<<<<<<<<<<<
 *                     parts.append(frepl)
 *                 # . utc offset
*/
            __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3233, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_06d, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3233, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
            __Pyx_DECREF_SET(__pyx_v_frepl, ((PyObject*)__pyx_t_3));
            __pyx_t_3 = 0;

            /* "utils.pxd":3232
 *                 # . fraction
 *                 if ch == "f":
 *                     if frepl is None:             # <<<<<<<<<<<<<<
 *                         frepl = "%06d" % dt.microsecond
 *                     parts.append(frepl)
*/
          }

          /* "utils.pxd":3234
 *                     if frepl is None:
 *                         frepl = "%06d" % dt.microsecond
 *                     parts.append(frepl)             # <<<<<<<<<<<<<<
 *                 # . utc offset
 *                 elif ch == "z":
*/
          __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_v_frepl); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3234, __pyx_L1_error)

          /* "utils.pxd":3231
 *                 i += 1
 *                 # . fraction
 *                 if ch == "f":             # <<<<<<<<<<<<<<
 *                     if frepl is None:
 *                         frepl = "%06d" % dt.microsecond
*/
          break;
          case 0x7A:

          /* "utils.pxd":3237
 *                 # . utc offset
 *                 elif ch == "z":
 *                     if zrepl is None:             # <<<<<<<<<<<<<<
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)
 *                         zrepl = "" if s_tmp is None else s_tmp
*/
          __pyx_t_1 = (__pyx_v_zrepl == ((PyObject*)Py_None));
          if (__pyx_t_1) {

            /* "utils.pxd":3238
 *                 elif ch == "z":
 *                     if zrepl is None:
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)             # <<<<<<<<<<<<<<
 *                         zrepl = "" if s_tmp is None else s_tmp
 *                     parts.append(zrepl)
*/
            __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3238, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_3);
            __pyx_t_7.__pyx_n = 1;
            __pyx_t_7.dt = __pyx_v_dt;
            __pyx_t_2 = __pyx_f_7cytimes_5utils_tz_utcformat(__pyx_t_3, &__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3238, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
            __Pyx_DECREF_SET(__pyx_v_s_tmp, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;

            /* "utils.pxd":3239
 *                     if zrepl is None:
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)
 *                         zrepl = "" if s_tmp is None else s_tmp             # <<<<<<<<<<<<<<
 *                     parts.append(zrepl)
 *                 # . timezone name
*/
            __pyx_t_1 = (__pyx_v_s_tmp == ((PyObject*)Py_None));
            if (__pyx_t_1) {
              __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__5);
              __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__5;
            } else {
              __Pyx_INCREF(__pyx_v_s_tmp);
              __pyx_t_2 = __pyx_v_s_tmp;
            }
            __Pyx_DECREF_SET(__pyx_v_zrepl, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;

            /* "utils.pxd":3237
 *                 # . utc offset
 *                 elif ch == "z":
 *                     if zrepl is None:             # <<<<<<<<<<<<<<
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)
 *                         zrepl = "" if s_tmp is None else s_tmp
*/
          }

          /* "utils.pxd":3240
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)
 *                         zrepl = "" if s_tmp is None else s_tmp
 *                     parts.append(zrepl)             # <<<<<<<<<<<<<<
 *                 # . timezone name
 *                 elif ch == "Z":
*/
          __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_v_zrepl); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3240, __pyx_L1_error)

          /* "utils.pxd":3236
 *                     parts.append(frepl)
 *                 # . utc offset
 *                 elif ch == "z":             # <<<<<<<<<<<<<<
 *                     if zrepl is None:
 *                         s_tmp = tz_utcformat(dt.tzinfo, dt)
*/
          break;
          case 90:

          /* "utils.pxd":3243
 *                 # . timezone name
 *                 elif ch == "Z":
 *                     if Zrepl is None:             # <<<<<<<<<<<<<<
 *                         s_tmp = dt_tzname(dt)
 *                         Zrepl = "" if s_tmp is None else s_tmp
*/
          __pyx_t_1 = (__pyx_v_Zrepl == ((PyObject*)Py_None));
          if (__pyx_t_1) {

            /* "utils.pxd":3244
 *                 elif ch == "Z":
 *                     if Zrepl is None:
 *                         s_tmp = dt_tzname(dt)             # <<<<<<<<<<<<<<
 *                         Zrepl = "" if s_tmp is None else s_tmp
 *                     parts.append(Zrepl)
*/
            __pyx_t_2 = __pyx_f_7cytimes_5utils_dt_tzname(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3244, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_2);
            __Pyx_DECREF_SET(__pyx_v_s_tmp, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;

            /* "utils.pxd":3245
 *                     if Zrepl is None:
 *                         s_tmp = dt_tzname(dt)
 *                         Zrepl = "" if s_tmp is None else s_tmp             # <<<<<<<<<<<<<<
 *                     parts.append(Zrepl)
 *                 # . Pass through unknown/regular specifiers and %%
*/
            __pyx_t_1 = (__pyx_v_s_tmp == ((PyObject*)Py_None));
            if (__pyx_t_1) {
              __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u__5);
              __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u__5;
            } else {
              __Pyx_INCREF(__pyx_v_s_tmp);
              __pyx_t_2 = __pyx_v_s_tmp;
            }
            __Pyx_DECREF_SET(__pyx_v_Zrepl, ((PyObject*)__pyx_t_2));
            __pyx_t_2 = 0;

            /* "utils.pxd":3243
 *                 # . timezone name
 *                 elif ch == "Z":
 *                     if Zrepl is None:             # <<<<<<<<<<<<<<
 *                         s_tmp = dt_tzname(dt)
 *                         Zrepl = "" if s_tmp is None else s_tmp
*/
          }

          /* "utils.pxd":3246
 *                         s_tmp = dt_tzname(dt)
 *                         Zrepl = "" if s_tmp is None else s_tmp
 *                     parts.append(Zrepl)             # <<<<<<<<<<<<<<
 *                 # . Pass through unknown/regular specifiers and %%
 *                 else:
*/
          __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_v_Zrepl); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3246, __pyx_L1_error)

          /* "utils.pxd":3242
 *                     parts.append(zrepl)
 *                 # . timezone name
 *                 elif ch == "Z":             # <<<<<<<<<<<<<<
 *                     if Zrepl is None:
 *                         s_tmp = dt_tzname(dt)
*/
          break;
          default:

          /* "utils.pxd":3249
 *                 # . Pass through unknown/regular specifiers and %%
 *                 else:
 *                     parts.append("%")             # <<<<<<<<<<<<<<
 *                     parts.append(str_chr(ch))
 * 
*/
          __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3249, __pyx_L1_error)

          /* "utils.pxd":3250
 *                 else:
 *                     parts.append("%")
 *                     parts.append(str_chr(ch))             # <<<<<<<<<<<<<<
 * 
 *             else:
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3250, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3250, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          break;
        }

        /* "utils.pxd":3227
 *         # Format identifier: '%'
 *         if ch == "%":
 *             if i < size:             # <<<<<<<<<<<<<<
 *                 ch = str_read(fmt, i)
 *                 i += 1
*/
        goto __pyx_L7;
      }

      /* "utils.pxd":3254
 *             else:
 *                 # Trailing '%': treat as literal '%'
 *                 parts.append("%")             # <<<<<<<<<<<<<<
 * 
 *         # Normal character
*/
      /*else*/ {
        __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_mstate_global->__pyx_kp_u__6); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3254, __pyx_L1_error)
      }
      __pyx_L7:;

      /* "utils.pxd":3226
 * 
 *         # Format identifier: '%'
 *         if ch == "%":             # <<<<<<<<<<<<<<
 *             if i < size:
 *                 ch = str_read(fmt, i)
*/
      goto __pyx_L6;
    }

    /* "utils.pxd":3258
 *         # Normal character
 *         else:
 *             parts.append(str_chr(ch))             # <<<<<<<<<<<<<<
 * 
 *     # Format to string
*/
    /*else*/ {
      __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3258, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_parts, __pyx_t_2); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(5, 3258, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    }
    __pyx_L6:;
  }

  /* "utils.pxd":3261
 * 
 *     # Format to string
 *     return tm_strformat(dt_to_tm(dt, False), "".join(parts))             # <<<<<<<<<<<<<<
 * 
 * cdef inline str dt_isoformat(datetime.datetime dt, str sep="T", bint utc=False):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.utc = 0;
  __pyx_t_8 = __pyx_f_7cytimes_5utils_dt_to_tm(__pyx_v_dt, &__pyx_t_9); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 3261, __pyx_L1_error)
  __pyx_t_2 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__5, __pyx_v_parts); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __pyx_f_7cytimes_5utils_tm_strformat(__pyx_t_8, ((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3198
 *     return max(u1, u2) if dt.fold == 0 else min(u1, u2)
 * 
 * cdef inline str dt_strformat(datetime.datetime dt, str fmt):             # <<<<<<<<<<<<<<
 *     """Format a `datetime.datetime` with a strftime-style format `<'str'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt_strformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_parts);
  __Pyx_XDECREF(__pyx_v_frepl);
  __Pyx_XDECREF(__pyx_v_zrepl);
  __Pyx_XDECREF(__pyx_v_Zrepl);
  __Pyx_XDECREF(__pyx_v_s_tmp);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3263
 *     return tm_strformat(dt_to_tm(dt, False), "".join(parts))
 * 
 * cdef inline str dt_isoformat(datetime.datetime dt, str sep="T", bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to ISO string `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_dt_isoformat(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_isoformat *__pyx_optional_args) {
  PyObject *__pyx_v_sep = ((PyObject*)__pyx_mstate_global->__pyx_n_u_T);
  int __pyx_v_utc = ((int)0);
  int __pyx_v_us;
  PyObject *__pyx_v_s_utc = 0;
  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;
  PyObject *__pyx_t_5 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcformat __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11[11];
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13[12];
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15[13];
  PyObject *__pyx_t_16[14];
  PyObject *__pyx_t_17 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_isoformat", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_sep = __pyx_optional_args->sep;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_utc = __pyx_optional_args->utc;
      }
    }
  }

  /* "utils.pxd":3275
 *     :returns `<'str'>`: Formatted text.
 *     """
 *     if sep is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("dt_isoformat: 'sep' cannot be None.")
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_sep == ((PyObject*)Py_None));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":3276
 *     """
 *     if sep is None:
 *         raise ValueError("dt_isoformat: 'sep' cannot be None.")             # <<<<<<<<<<<<<<
 *     cdef:
 *         int us = dt.microsecond
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_dt_isoformat_sep_cannot_be_None};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 3276, __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(5, 3276, __pyx_L1_error)

    /* "utils.pxd":3275
 *     :returns `<'str'>`: Formatted text.
 *     """
 *     if sep is None:             # <<<<<<<<<<<<<<
 *         raise ValueError("dt_isoformat: 'sep' cannot be None.")
 *     cdef:
*/
  }

  /* "utils.pxd":3278
 *         raise ValueError("dt_isoformat: 'sep' cannot be None.")
 *     cdef:
 *         int us = dt.microsecond             # <<<<<<<<<<<<<<
 *         str s_utc = tz_utcformat(dt.tzinfo, dt) if utc else None
 * 
*/
  __pyx_v_us = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);

  /* "utils.pxd":3279
 *     cdef:
 *         int us = dt.microsecond
 *         str s_utc = tz_utcformat(dt.tzinfo, dt) if utc else None             # <<<<<<<<<<<<<<
 * 
 *     if us == 0:
*/
  if (__pyx_v_utc) {
    __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.dt = __pyx_v_dt;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_tz_utcformat(__pyx_t_3, &__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3279, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_5;
    __pyx_t_5 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(5, 3279, __pyx_L1_error)
  __pyx_v_s_utc = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":3281
 *         str s_utc = tz_utcformat(dt.tzinfo, dt) if utc else None
 * 
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
*/
  __pyx_t_1 = (__pyx_v_us == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":3282
 * 
 *     if us == 0:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
 *                 dt.year, dt.month, dt.day, sep,
*/
    __pyx_t_1 = (__pyx_v_s_utc == ((PyObject*)Py_None));
    if (__pyx_t_1) {

      /* "utils.pxd":3283
 *     if us == 0:
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (             # <<<<<<<<<<<<<<
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second,
*/
      __Pyx_XDECREF(__pyx_r);

      /* "utils.pxd":3284
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
 *                 dt.year, dt.month, dt.day, sep,             # <<<<<<<<<<<<<<
 *                 dt.hour, dt.minute, dt.second,
 *             )
*/
      __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), 4, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_sep); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3284, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);

      /* "utils.pxd":3285
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second,             # <<<<<<<<<<<<<<
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d%s" % (
*/
      __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 3285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 3285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 3285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_11[0] = __pyx_t_2;
      __pyx_t_11[1] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_11[2] = __pyx_t_5;
      __pyx_t_11[3] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_11[4] = __pyx_t_3;
      __pyx_t_11[5] = __pyx_t_7;
      __pyx_t_11[6] = __pyx_t_8;
      __pyx_t_11[7] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_11[8] = __pyx_t_9;
      __pyx_t_11[9] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_11[10] = __pyx_t_10;

      /* "utils.pxd":3283
 *     if us == 0:
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (             # <<<<<<<<<<<<<<
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second,
*/
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 11, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 1 * 4 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
      if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3283, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__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;
      __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_10); __pyx_t_10 = 0;
      __pyx_r = ((PyObject*)__pyx_t_12);
      __pyx_t_12 = 0;
      goto __pyx_L0;

      /* "utils.pxd":3282
 * 
 *     if us == 0:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
 *                 dt.year, dt.month, dt.day, sep,
*/
    }

    /* "utils.pxd":3287
 *                 dt.hour, dt.minute, dt.second,
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d%s" % (             # <<<<<<<<<<<<<<
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, s_utc,
*/
    __Pyx_XDECREF(__pyx_r);

    /* "utils.pxd":3288
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d%s" % (
 *             dt.year, dt.month, dt.day, sep,             # <<<<<<<<<<<<<<
 *             dt.hour, dt.minute, dt.second, s_utc,
 *         )
*/
    __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), 4, '0', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_10 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 3288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 3288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_sep); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 3288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    /* "utils.pxd":3289
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d%s" % (
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, s_utc,             # <<<<<<<<<<<<<<
 *         )
 *     else:
*/
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_s_utc); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3289, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13[0] = __pyx_t_12;
    __pyx_t_13[1] = __pyx_mstate_global->__pyx_kp_u__4;
    __pyx_t_13[2] = __pyx_t_10;
    __pyx_t_13[3] = __pyx_mstate_global->__pyx_kp_u__4;
    __pyx_t_13[4] = __pyx_t_9;
    __pyx_t_13[5] = __pyx_t_8;
    __pyx_t_13[6] = __pyx_t_7;
    __pyx_t_13[7] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_13[8] = __pyx_t_3;
    __pyx_t_13[9] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_13[10] = __pyx_t_5;
    __pyx_t_13[11] = __pyx_t_2;

    /* "utils.pxd":3287
 *                 dt.hour, dt.minute, dt.second,
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d%s" % (             # <<<<<<<<<<<<<<
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, s_utc,
*/
    __pyx_t_14 = __Pyx_PyUnicode_Join(__pyx_t_13, 12, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 1 * 4 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
    if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 3287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyObject*)__pyx_t_14);
    __pyx_t_14 = 0;
    goto __pyx_L0;

    /* "utils.pxd":3281
 *         str s_utc = tz_utcformat(dt.tzinfo, dt) if utc else None
 * 
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d" % (
*/
  }

  /* "utils.pxd":3292
 *         )
 *     else:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (
 *                 dt.year, dt.month, dt.day, sep,
*/
  /*else*/ {
    __pyx_t_1 = (__pyx_v_s_utc == ((PyObject*)Py_None));
    if (__pyx_t_1) {

      /* "utils.pxd":3293
 *     else:
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (             # <<<<<<<<<<<<<<
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second, us,
*/
      __Pyx_XDECREF(__pyx_r);

      /* "utils.pxd":3294
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (
 *                 dt.year, dt.month, dt.day, sep,             # <<<<<<<<<<<<<<
 *                 dt.hour, dt.minute, dt.second, us,
 *             )
*/
      __pyx_t_14 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), 4, '0', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 3294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_v_sep); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3294, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);

      /* "utils.pxd":3295
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second, us,             # <<<<<<<<<<<<<<
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d%s" % (
*/
      __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 3295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 3295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = __Pyx_PyUnicode_From_int(__pyx_v_us, 6, '0', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 3295, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_15[0] = __pyx_t_14;
      __pyx_t_15[1] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_15[2] = __pyx_t_2;
      __pyx_t_15[3] = __pyx_mstate_global->__pyx_kp_u__4;
      __pyx_t_15[4] = __pyx_t_5;
      __pyx_t_15[5] = __pyx_t_3;
      __pyx_t_15[6] = __pyx_t_7;
      __pyx_t_15[7] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_15[8] = __pyx_t_8;
      __pyx_t_15[9] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_15[10] = __pyx_t_9;
      __pyx_t_15[11] = __pyx_mstate_global->__pyx_kp_u__2;
      __pyx_t_15[12] = __pyx_t_10;

      /* "utils.pxd":3293
 *     else:
 *         if s_utc is None:
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (             # <<<<<<<<<<<<<<
 *                 dt.year, dt.month, dt.day, sep,
 *                 dt.hour, dt.minute, dt.second, us,
*/
      __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_15, 13, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 1 * 5 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
      if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3293, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_DECREF(__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;
      __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_10); __pyx_t_10 = 0;
      __pyx_r = ((PyObject*)__pyx_t_12);
      __pyx_t_12 = 0;
      goto __pyx_L0;

      /* "utils.pxd":3292
 *         )
 *     else:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d" % (
 *                 dt.year, dt.month, dt.day, sep,
*/
    }

    /* "utils.pxd":3297
 *                 dt.hour, dt.minute, dt.second, us,
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d%s" % (             # <<<<<<<<<<<<<<
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, us, s_utc,
*/
    __Pyx_XDECREF(__pyx_r);

    /* "utils.pxd":3298
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d%s" % (
 *             dt.year, dt.month, dt.day, sep,             # <<<<<<<<<<<<<<
 *             dt.hour, dt.minute, dt.second, us, s_utc,
 *         )
*/
    __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), 4, '0', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 3298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_10 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 3298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 3298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_v_sep); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 3298, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);

    /* "utils.pxd":3299
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d%s" % (
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, us, s_utc,             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt), 2, '0', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_us, 6, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = __Pyx_PyUnicode_Unicode(__pyx_v_s_utc); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_16[0] = __pyx_t_12;
    __pyx_t_16[1] = __pyx_mstate_global->__pyx_kp_u__4;
    __pyx_t_16[2] = __pyx_t_10;
    __pyx_t_16[3] = __pyx_mstate_global->__pyx_kp_u__4;
    __pyx_t_16[4] = __pyx_t_9;
    __pyx_t_16[5] = __pyx_t_8;
    __pyx_t_16[6] = __pyx_t_7;
    __pyx_t_16[7] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_16[8] = __pyx_t_3;
    __pyx_t_16[9] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_16[10] = __pyx_t_5;
    __pyx_t_16[11] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_16[12] = __pyx_t_2;
    __pyx_t_16[13] = __pyx_t_14;

    /* "utils.pxd":3297
 *                 dt.hour, dt.minute, dt.second, us,
 *             )
 *         return "%04d-%02d-%02d%s%02d:%02d:%02d.%06d%s" % (             # <<<<<<<<<<<<<<
 *             dt.year, dt.month, dt.day, sep,
 *             dt.hour, dt.minute, dt.second, us, s_utc,
*/
    __pyx_t_17 = __Pyx_PyUnicode_Join(__pyx_t_16, 14, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 1 * 5 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
    if (unlikely(!__pyx_t_17)) __PYX_ERR(5, 3297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_17);
    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_r = ((PyObject*)__pyx_t_17);
    __pyx_t_17 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":3263
 *     return tm_strformat(dt_to_tm(dt, False), "".join(parts))
 * 
 * cdef inline str dt_isoformat(datetime.datetime dt, str sep="T", bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to ISO string `<'str'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_AddTraceback("cytimes.utils.dt_isoformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s_utc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3302
 *         )
 * 
 * cdef inline tm dt_to_tm(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to 'struct:tm' `<'struct:tm'>`.
 * 
*/

static CYTHON_INLINE struct tm __pyx_f_7cytimes_5utils_dt_to_tm(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_to_tm *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  int __pyx_v_hh;
  int __pyx_v_mi;
  int __pyx_v_ss;
  PyObject *__pyx_v_tzinfo = 0;
  int __pyx_v_isdst;
  PyDateTime_Delta *__pyx_v_off = 0;
  struct tm __pyx_v_out;
  struct tm __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_dt_add __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_tz_dst __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_to_tm", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_dt);

  /* "utils.pxd":3329
 *     """
 *     cdef:
 *         int yy = dt.year             # <<<<<<<<<<<<<<
 *         int mm = dt.month
 *         int dd = dt.day
*/
  __pyx_v_yy = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);

  /* "utils.pxd":3330
 *     cdef:
 *         int yy = dt.year
 *         int mm = dt.month             # <<<<<<<<<<<<<<
 *         int dd = dt.day
 *         int hh = dt.hour
*/
  __pyx_v_mm = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);

  /* "utils.pxd":3331
 *         int yy = dt.year
 *         int mm = dt.month
 *         int dd = dt.day             # <<<<<<<<<<<<<<
 *         int hh = dt.hour
 *         int mi = dt.minute
*/
  __pyx_v_dd = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);

  /* "utils.pxd":3332
 *         int mm = dt.month
 *         int dd = dt.day
 *         int hh = dt.hour             # <<<<<<<<<<<<<<
 *         int mi = dt.minute
 *         int ss = dt.second
*/
  __pyx_v_hh = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);

  /* "utils.pxd":3333
 *         int dd = dt.day
 *         int hh = dt.hour
 *         int mi = dt.minute             # <<<<<<<<<<<<<<
 *         int ss = dt.second
 *         object tzinfo = dt.tzinfo
*/
  __pyx_v_mi = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);

  /* "utils.pxd":3334
 *         int hh = dt.hour
 *         int mi = dt.minute
 *         int ss = dt.second             # <<<<<<<<<<<<<<
 *         object tzinfo = dt.tzinfo
 *         int isdst
*/
  __pyx_v_ss = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);

  /* "utils.pxd":3335
 *         int mi = dt.minute
 *         int ss = dt.second
 *         object tzinfo = dt.tzinfo             # <<<<<<<<<<<<<<
 *         int isdst
 *         datetime.timedelta off
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tzinfo = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "utils.pxd":3341
 * 
 *     # Naive: utc=True -> treat as UTC
 *     if tzinfo is None:             # <<<<<<<<<<<<<<
 *         isdst = 0 if utc else -1
 * 
*/
  __pyx_t_2 = (__pyx_v_tzinfo == Py_None);
  if (__pyx_t_2) {

    /* "utils.pxd":3342
 *     # Naive: utc=True -> treat as UTC
 *     if tzinfo is None:
 *         isdst = 0 if utc else -1             # <<<<<<<<<<<<<<
 * 
 *     # Aware -> UTC: subtract utcoffset
*/
    if (__pyx_v_utc) {
      __pyx_t_3 = 0;
    } else {
      __pyx_t_3 = -1;
    }
    __pyx_v_isdst = __pyx_t_3;

    /* "utils.pxd":3341
 * 
 *     # Naive: utc=True -> treat as UTC
 *     if tzinfo is None:             # <<<<<<<<<<<<<<
 *         isdst = 0 if utc else -1
 * 
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":3345
 * 
 *     # Aware -> UTC: subtract utcoffset
 *     elif utc:             # <<<<<<<<<<<<<<
 *         off = tz_utcoffset(tzinfo, dt)
 *         if off is not None:
*/
  if (__pyx_v_utc) {

    /* "utils.pxd":3346
 *     # Aware -> UTC: subtract utcoffset
 *     elif utc:
 *         off = tz_utcoffset(tzinfo, dt)             # <<<<<<<<<<<<<<
 *         if off is not None:
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dt = __pyx_v_dt;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_tzinfo, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":3347
 *     elif utc:
 *         off = tz_utcoffset(tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 *             yy, mm, dd = dt.year, dt.month, dt.day
*/
    __pyx_t_2 = (((PyObject *)__pyx_v_off) != Py_None);
    if (__pyx_t_2) {

      /* "utils.pxd":3348
 *         off = tz_utcoffset(tzinfo, dt)
 *         if off is not None:
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)             # <<<<<<<<<<<<<<
 *             yy, mm, dd = dt.year, dt.month, dt.day
 *             hh, mi, ss = dt.hour, dt.minute, dt.second
*/
      __pyx_t_5.__pyx_n = 4;
      __pyx_t_5.days = (-__pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_off));
      __pyx_t_5.seconds = (-__pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_off));
      __pyx_t_5.microseconds = (-__pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_off));
      __pyx_t_5.dtclass = Py_None;
      __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_add(__pyx_v_dt, &__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_dt, ((PyDateTime_DateTime *)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "utils.pxd":3349
 *         if off is not None:
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 *             yy, mm, dd = dt.year, dt.month, dt.day             # <<<<<<<<<<<<<<
 *             hh, mi, ss = dt.hour, dt.minute, dt.second
 *         isdst = 0
*/
      __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
      __pyx_t_6 = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
      __pyx_t_7 = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
      __pyx_v_yy = __pyx_t_3;
      __pyx_v_mm = __pyx_t_6;
      __pyx_v_dd = __pyx_t_7;

      /* "utils.pxd":3350
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 *             yy, mm, dd = dt.year, dt.month, dt.day
 *             hh, mi, ss = dt.hour, dt.minute, dt.second             # <<<<<<<<<<<<<<
 *         isdst = 0
 * 
*/
      __pyx_t_7 = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
      __pyx_t_6 = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
      __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
      __pyx_v_hh = __pyx_t_7;
      __pyx_v_mi = __pyx_t_6;
      __pyx_v_ss = __pyx_t_3;

      /* "utils.pxd":3347
 *     elif utc:
 *         off = tz_utcoffset(tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 *             yy, mm, dd = dt.year, dt.month, dt.day
*/
    }

    /* "utils.pxd":3351
 *             yy, mm, dd = dt.year, dt.month, dt.day
 *             hh, mi, ss = dt.hour, dt.minute, dt.second
 *         isdst = 0             # <<<<<<<<<<<<<<
 * 
 *     # Aware, local wall time: set DST flag from tzinfo.dst(dt)
*/
    __pyx_v_isdst = 0;

    /* "utils.pxd":3345
 * 
 *     # Aware -> UTC: subtract utcoffset
 *     elif utc:             # <<<<<<<<<<<<<<
 *         off = tz_utcoffset(tzinfo, dt)
 *         if off is not None:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":3355
 *     # Aware, local wall time: set DST flag from tzinfo.dst(dt)
 *     else:
 *         off = tz_dst(tzinfo, dt)             # <<<<<<<<<<<<<<
 *         if off is not None:
 *             isdst = 1 if td_to_us(off) else 0
*/
  /*else*/ {
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.dt = __pyx_v_dt;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_dst(__pyx_v_tzinfo, &__pyx_t_8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":3356
 *     else:
 *         off = tz_dst(tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             isdst = 1 if td_to_us(off) else 0
 *         else:
*/
    __pyx_t_2 = (((PyObject *)__pyx_v_off) != Py_None);
    if (__pyx_t_2) {

      /* "utils.pxd":3357
 *         off = tz_dst(tzinfo, dt)
 *         if off is not None:
 *             isdst = 1 if td_to_us(off) else 0             # <<<<<<<<<<<<<<
 *         else:
 *             isdst = -1
*/
      __pyx_t_2 = (__pyx_f_7cytimes_5utils_td_to_us(__pyx_v_off) != 0);
      if (__pyx_t_2) {
        __pyx_t_3 = 1;
      } else {
        __pyx_t_3 = 0;
      }
      __pyx_v_isdst = __pyx_t_3;

      /* "utils.pxd":3356
 *     else:
 *         off = tz_dst(tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             isdst = 1 if td_to_us(off) else 0
 *         else:
*/
      goto __pyx_L5;
    }

    /* "utils.pxd":3359
 *             isdst = 1 if td_to_us(off) else 0
 *         else:
 *             isdst = -1             # <<<<<<<<<<<<<<
 * 
 *     out.tm_sec, out.tm_min, out.tm_hour = ss, mi, hh
*/
    /*else*/ {
      __pyx_v_isdst = -1;
    }
    __pyx_L5:;
  }
  __pyx_L3:;

  /* "utils.pxd":3361
 *             isdst = -1
 * 
 *     out.tm_sec, out.tm_min, out.tm_hour = ss, mi, hh             # <<<<<<<<<<<<<<
 *     out.tm_mday, out.tm_mon, out.tm_year = dd, mm, yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
*/
  __pyx_t_3 = __pyx_v_ss;
  __pyx_t_6 = __pyx_v_mi;
  __pyx_t_7 = __pyx_v_hh;
  __pyx_v_out.tm_sec = __pyx_t_3;
  __pyx_v_out.tm_min = __pyx_t_6;
  __pyx_v_out.tm_hour = __pyx_t_7;

  /* "utils.pxd":3362
 * 
 *     out.tm_sec, out.tm_min, out.tm_hour = ss, mi, hh
 *     out.tm_mday, out.tm_mon, out.tm_year = dd, mm, yy             # <<<<<<<<<<<<<<
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd
*/
  __pyx_t_7 = __pyx_v_dd;
  __pyx_t_6 = __pyx_v_mm;
  __pyx_t_3 = __pyx_v_yy;
  __pyx_v_out.tm_mday = __pyx_t_7;
  __pyx_v_out.tm_mon = __pyx_t_6;
  __pyx_v_out.tm_year = __pyx_t_3;

  /* "utils.pxd":3363
 *     out.tm_sec, out.tm_min, out.tm_hour = ss, mi, hh
 *     out.tm_mday, out.tm_mon, out.tm_year = dd, mm, yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)             # <<<<<<<<<<<<<<
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = isdst
*/
  __pyx_v_out.tm_wday = __pyx_f_7cytimes_5utils_ymd_weekday(__pyx_v_yy, __pyx_v_mm, __pyx_v_dd);

  /* "utils.pxd":3364
 *     out.tm_mday, out.tm_mon, out.tm_year = dd, mm, yy
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd             # <<<<<<<<<<<<<<
 *     out.tm_isdst = isdst
 *     return out
*/
  __pyx_v_out.tm_yday = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm) + __pyx_v_dd);

  /* "utils.pxd":3365
 *     out.tm_wday = ymd_weekday(yy, mm, dd)
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = isdst             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
  __pyx_v_out.tm_isdst = __pyx_v_isdst;

  /* "utils.pxd":3366
 *     out.tm_yday = days_bf_month(yy, mm) + dd
 *     out.tm_isdst = isdst
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline str dt_to_ctime(datetime.datetime dt):
*/
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":3302
 *         )
 * 
 * cdef inline tm dt_to_tm(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to 'struct:tm' `<'struct:tm'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_to_tm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_XDECREF((PyObject *)__pyx_v_dt);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3368
 *     return out
 * 
 * cdef inline str dt_to_ctime(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Convert a datetime to a C `ctime-style` string `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_dt_to_ctime(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  int __pyx_v_hh;
  int __pyx_v_mi;
  int __pyx_v_ss;
  int __pyx_v_wkd;
  PyObject *__pyx_v_s_wkd = 0;
  PyObject *__pyx_v_s_mm = 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;
  PyObject *__pyx_t_6[13];
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_to_ctime", 0);

  /* "utils.pxd":3379
 *     """
 *     cdef:
 *         int yy = dt.year             # <<<<<<<<<<<<<<
 *         int mm = dt.month
 *         int dd = dt.day
*/
  __pyx_v_yy = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);

  /* "utils.pxd":3380
 *     cdef:
 *         int yy = dt.year
 *         int mm = dt.month             # <<<<<<<<<<<<<<
 *         int dd = dt.day
 *         int hh = dt.hour
*/
  __pyx_v_mm = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);

  /* "utils.pxd":3381
 *         int yy = dt.year
 *         int mm = dt.month
 *         int dd = dt.day             # <<<<<<<<<<<<<<
 *         int hh = dt.hour
 *         int mi = dt.minute
*/
  __pyx_v_dd = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);

  /* "utils.pxd":3382
 *         int mm = dt.month
 *         int dd = dt.day
 *         int hh = dt.hour             # <<<<<<<<<<<<<<
 *         int mi = dt.minute
 *         int ss = dt.second
*/
  __pyx_v_hh = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);

  /* "utils.pxd":3383
 *         int dd = dt.day
 *         int hh = dt.hour
 *         int mi = dt.minute             # <<<<<<<<<<<<<<
 *         int ss = dt.second
 *         int wkd = ymd_weekday(yy, mm, dd)
*/
  __pyx_v_mi = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);

  /* "utils.pxd":3384
 *         int hh = dt.hour
 *         int mi = dt.minute
 *         int ss = dt.second             # <<<<<<<<<<<<<<
 *         int wkd = ymd_weekday(yy, mm, dd)
 *         str s_wkd, s_mm
*/
  __pyx_v_ss = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);

  /* "utils.pxd":3385
 *         int mi = dt.minute
 *         int ss = dt.second
 *         int wkd = ymd_weekday(yy, mm, dd)             # <<<<<<<<<<<<<<
 *         str s_wkd, s_mm
 * 
*/
  __pyx_v_wkd = __pyx_f_7cytimes_5utils_ymd_weekday(__pyx_v_yy, __pyx_v_mm, __pyx_v_dd);

  /* "utils.pxd":3389
 * 
 *     # Weekday
 *     if wkd == 0:             # <<<<<<<<<<<<<<
 *         s_wkd = "Mon"
 *     elif wkd == 1:
*/
  switch (__pyx_v_wkd) {
    case 0:

    /* "utils.pxd":3390
 *     # Weekday
 *     if wkd == 0:
 *         s_wkd = "Mon"             # <<<<<<<<<<<<<<
 *     elif wkd == 1:
 *         s_wkd = "Tue"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Mon);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Mon;

    /* "utils.pxd":3389
 * 
 *     # Weekday
 *     if wkd == 0:             # <<<<<<<<<<<<<<
 *         s_wkd = "Mon"
 *     elif wkd == 1:
*/
    break;
    case 1:

    /* "utils.pxd":3392
 *         s_wkd = "Mon"
 *     elif wkd == 1:
 *         s_wkd = "Tue"             # <<<<<<<<<<<<<<
 *     elif wkd == 2:
 *         s_wkd = "Wed"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Tue);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Tue;

    /* "utils.pxd":3391
 *     if wkd == 0:
 *         s_wkd = "Mon"
 *     elif wkd == 1:             # <<<<<<<<<<<<<<
 *         s_wkd = "Tue"
 *     elif wkd == 2:
*/
    break;
    case 2:

    /* "utils.pxd":3394
 *         s_wkd = "Tue"
 *     elif wkd == 2:
 *         s_wkd = "Wed"             # <<<<<<<<<<<<<<
 *     elif wkd == 3:
 *         s_wkd = "Thu"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Wed);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Wed;

    /* "utils.pxd":3393
 *     elif wkd == 1:
 *         s_wkd = "Tue"
 *     elif wkd == 2:             # <<<<<<<<<<<<<<
 *         s_wkd = "Wed"
 *     elif wkd == 3:
*/
    break;
    case 3:

    /* "utils.pxd":3396
 *         s_wkd = "Wed"
 *     elif wkd == 3:
 *         s_wkd = "Thu"             # <<<<<<<<<<<<<<
 *     elif wkd == 4:
 *         s_wkd = "Fri"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Thu);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Thu;

    /* "utils.pxd":3395
 *     elif wkd == 2:
 *         s_wkd = "Wed"
 *     elif wkd == 3:             # <<<<<<<<<<<<<<
 *         s_wkd = "Thu"
 *     elif wkd == 4:
*/
    break;
    case 4:

    /* "utils.pxd":3398
 *         s_wkd = "Thu"
 *     elif wkd == 4:
 *         s_wkd = "Fri"             # <<<<<<<<<<<<<<
 *     elif wkd == 5:
 *         s_wkd = "Sat"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Fri);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Fri;

    /* "utils.pxd":3397
 *     elif wkd == 3:
 *         s_wkd = "Thu"
 *     elif wkd == 4:             # <<<<<<<<<<<<<<
 *         s_wkd = "Fri"
 *     elif wkd == 5:
*/
    break;
    case 5:

    /* "utils.pxd":3400
 *         s_wkd = "Fri"
 *     elif wkd == 5:
 *         s_wkd = "Sat"             # <<<<<<<<<<<<<<
 *     else:
 *         s_wkd = "Sun"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Sat);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Sat;

    /* "utils.pxd":3399
 *     elif wkd == 4:
 *         s_wkd = "Fri"
 *     elif wkd == 5:             # <<<<<<<<<<<<<<
 *         s_wkd = "Sat"
 *     else:
*/
    break;
    default:

    /* "utils.pxd":3402
 *         s_wkd = "Sat"
 *     else:
 *         s_wkd = "Sun"             # <<<<<<<<<<<<<<
 * 
 *     # Month
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Sun);
    __pyx_v_s_wkd = __pyx_mstate_global->__pyx_n_u_Sun;
    break;
  }

  /* "utils.pxd":3405
 * 
 *     # Month
 *     if mm == 1:             # <<<<<<<<<<<<<<
 *         s_mm = "Jan"
 *     elif mm == 2:
*/
  switch (__pyx_v_mm) {
    case 1:

    /* "utils.pxd":3406
 *     # Month
 *     if mm == 1:
 *         s_mm = "Jan"             # <<<<<<<<<<<<<<
 *     elif mm == 2:
 *         s_mm = "Feb"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Jan);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Jan;

    /* "utils.pxd":3405
 * 
 *     # Month
 *     if mm == 1:             # <<<<<<<<<<<<<<
 *         s_mm = "Jan"
 *     elif mm == 2:
*/
    break;
    case 2:

    /* "utils.pxd":3408
 *         s_mm = "Jan"
 *     elif mm == 2:
 *         s_mm = "Feb"             # <<<<<<<<<<<<<<
 *     elif mm == 3:
 *         s_mm = "Mar"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Feb);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Feb;

    /* "utils.pxd":3407
 *     if mm == 1:
 *         s_mm = "Jan"
 *     elif mm == 2:             # <<<<<<<<<<<<<<
 *         s_mm = "Feb"
 *     elif mm == 3:
*/
    break;
    case 3:

    /* "utils.pxd":3410
 *         s_mm = "Feb"
 *     elif mm == 3:
 *         s_mm = "Mar"             # <<<<<<<<<<<<<<
 *     elif mm == 4:
 *         s_mm = "Apr"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Mar);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Mar;

    /* "utils.pxd":3409
 *     elif mm == 2:
 *         s_mm = "Feb"
 *     elif mm == 3:             # <<<<<<<<<<<<<<
 *         s_mm = "Mar"
 *     elif mm == 4:
*/
    break;
    case 4:

    /* "utils.pxd":3412
 *         s_mm = "Mar"
 *     elif mm == 4:
 *         s_mm = "Apr"             # <<<<<<<<<<<<<<
 *     elif mm == 5:
 *         s_mm = "May"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Apr);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Apr;

    /* "utils.pxd":3411
 *     elif mm == 3:
 *         s_mm = "Mar"
 *     elif mm == 4:             # <<<<<<<<<<<<<<
 *         s_mm = "Apr"
 *     elif mm == 5:
*/
    break;
    case 5:

    /* "utils.pxd":3414
 *         s_mm = "Apr"
 *     elif mm == 5:
 *         s_mm = "May"             # <<<<<<<<<<<<<<
 *     elif mm == 6:
 *         s_mm = "Jun"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_May);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_May;

    /* "utils.pxd":3413
 *     elif mm == 4:
 *         s_mm = "Apr"
 *     elif mm == 5:             # <<<<<<<<<<<<<<
 *         s_mm = "May"
 *     elif mm == 6:
*/
    break;
    case 6:

    /* "utils.pxd":3416
 *         s_mm = "May"
 *     elif mm == 6:
 *         s_mm = "Jun"             # <<<<<<<<<<<<<<
 *     elif mm == 7:
 *         s_mm = "Jul"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Jun);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Jun;

    /* "utils.pxd":3415
 *     elif mm == 5:
 *         s_mm = "May"
 *     elif mm == 6:             # <<<<<<<<<<<<<<
 *         s_mm = "Jun"
 *     elif mm == 7:
*/
    break;
    case 7:

    /* "utils.pxd":3418
 *         s_mm = "Jun"
 *     elif mm == 7:
 *         s_mm = "Jul"             # <<<<<<<<<<<<<<
 *     elif mm == 8:
 *         s_mm = "Aug"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Jul);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Jul;

    /* "utils.pxd":3417
 *     elif mm == 6:
 *         s_mm = "Jun"
 *     elif mm == 7:             # <<<<<<<<<<<<<<
 *         s_mm = "Jul"
 *     elif mm == 8:
*/
    break;
    case 8:

    /* "utils.pxd":3420
 *         s_mm = "Jul"
 *     elif mm == 8:
 *         s_mm = "Aug"             # <<<<<<<<<<<<<<
 *     elif mm == 9:
 *         s_mm = "Sep"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Aug);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Aug;

    /* "utils.pxd":3419
 *     elif mm == 7:
 *         s_mm = "Jul"
 *     elif mm == 8:             # <<<<<<<<<<<<<<
 *         s_mm = "Aug"
 *     elif mm == 9:
*/
    break;
    case 9:

    /* "utils.pxd":3422
 *         s_mm = "Aug"
 *     elif mm == 9:
 *         s_mm = "Sep"             # <<<<<<<<<<<<<<
 *     elif mm == 10:
 *         s_mm = "Oct"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Sep);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Sep;

    /* "utils.pxd":3421
 *     elif mm == 8:
 *         s_mm = "Aug"
 *     elif mm == 9:             # <<<<<<<<<<<<<<
 *         s_mm = "Sep"
 *     elif mm == 10:
*/
    break;
    case 10:

    /* "utils.pxd":3424
 *         s_mm = "Sep"
 *     elif mm == 10:
 *         s_mm = "Oct"             # <<<<<<<<<<<<<<
 *     elif mm == 11:
 *         s_mm = "Nov"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Oct);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Oct;

    /* "utils.pxd":3423
 *     elif mm == 9:
 *         s_mm = "Sep"
 *     elif mm == 10:             # <<<<<<<<<<<<<<
 *         s_mm = "Oct"
 *     elif mm == 11:
*/
    break;
    case 11:

    /* "utils.pxd":3426
 *         s_mm = "Oct"
 *     elif mm == 11:
 *         s_mm = "Nov"             # <<<<<<<<<<<<<<
 *     else:
 *         s_mm = "Dec"
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Nov);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Nov;

    /* "utils.pxd":3425
 *     elif mm == 10:
 *         s_mm = "Oct"
 *     elif mm == 11:             # <<<<<<<<<<<<<<
 *         s_mm = "Nov"
 *     else:
*/
    break;
    default:

    /* "utils.pxd":3428
 *         s_mm = "Nov"
 *     else:
 *         s_mm = "Dec"             # <<<<<<<<<<<<<<
 * 
 *     # Fromat
*/
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Dec);
    __pyx_v_s_mm = __pyx_mstate_global->__pyx_n_u_Dec;
    break;
  }

  /* "utils.pxd":3431
 * 
 *     # Fromat
 *     return "%s %s %2d %02d:%02d:%02d %04d" % (s_wkd, s_mm, dd, hh, mi, ss, yy)             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long dt_to_us(datetime.datetime dt, bint utc=False) except *:
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyUnicode_From_int(__pyx_v_dd, 2, ' ', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_hh, 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_mi, 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_ss, 2, '0', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_v_yy, 4, '0', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6[0] = __pyx_v_s_wkd;
  __pyx_t_6[1] = __pyx_mstate_global->__pyx_kp_u__8;
  __pyx_t_6[2] = __pyx_v_s_mm;
  __pyx_t_6[3] = __pyx_mstate_global->__pyx_kp_u__8;
  __pyx_t_6[4] = __pyx_t_1;
  __pyx_t_6[5] = __pyx_mstate_global->__pyx_kp_u__8;
  __pyx_t_6[6] = __pyx_t_2;
  __pyx_t_6[7] = __pyx_mstate_global->__pyx_kp_u__7;
  __pyx_t_6[8] = __pyx_t_3;
  __pyx_t_6[9] = __pyx_mstate_global->__pyx_kp_u__7;
  __pyx_t_6[10] = __pyx_t_4;
  __pyx_t_6[11] = __pyx_mstate_global->__pyx_kp_u__8;
  __pyx_t_6[12] = __pyx_t_5;
  __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 13, __Pyx_PyUnicode_GET_LENGTH(__pyx_v_s_wkd) + 1 * 6 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_s_mm) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_s_wkd) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_s_mm));
  if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3431, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = ((PyObject*)__pyx_t_7);
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3368
 *     return out
 * 
 * cdef inline str dt_to_ctime(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Convert a datetime to a C `ctime-style` string `<'str'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("cytimes.utils.dt_to_ctime", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s_wkd);
  __Pyx_XDECREF(__pyx_v_s_mm);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3433
 *     return "%s %s %2d %02d:%02d:%02d %04d" % (s_wkd, s_mm, dd, hh, mi, ss, yy)
 * 
 * cdef inline long long dt_to_us(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to microseconds since the Unix epoch `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_to_us(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_to_us *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  PY_LONG_LONG __pyx_v_ord;
  PY_LONG_LONG __pyx_v_us;
  PyDateTime_Delta *__pyx_v_off = 0;
  PY_LONG_LONG __pyx_r;
  __Pyx_RefNannyDeclarations
  PY_LONG_LONG __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_ord __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("dt_to_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }

  /* "utils.pxd":3448
 *     # Compute microseconds
 *     cdef:
 *         long long ord = dt_to_ord(dt, False)             # <<<<<<<<<<<<<<
 *         long long us  = (
 *             (ord - EPOCH_DAY)           * US_DAY +
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.utc = 0;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3448, __pyx_L1_error)
  __pyx_v_ord = __pyx_t_1;

  /* "utils.pxd":3453
 *             (<long long> dt.hour)       * US_HOUR +
 *             (<long long> dt.minute)     * US_MINUTE +
 *             (<long long> dt.second)     * US_SECOND +             # <<<<<<<<<<<<<<
 *             (<long long> dt.microsecond)
 *         )
*/
  __pyx_v_us = ((((((__pyx_v_ord - __pyx_v_7cytimes_5utils_EPOCH_DAY) * __pyx_v_7cytimes_5utils_US_DAY) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_HOUR)) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_MINUTE)) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt)));

  /* "utils.pxd":3456
 *             (<long long> dt.microsecond)
 *         )
 *     if not utc:             # <<<<<<<<<<<<<<
 *         return us
 * 
*/
  __pyx_t_3 = (!__pyx_v_utc);
  if (__pyx_t_3) {

    /* "utils.pxd":3457
 *         )
 *     if not utc:
 *         return us             # <<<<<<<<<<<<<<
 * 
 *     # Aware-only: get UTC offset; None means treat as naive
*/
    __pyx_r = __pyx_v_us;
    goto __pyx_L0;

    /* "utils.pxd":3456
 *             (<long long> dt.microsecond)
 *         )
 *     if not utc:             # <<<<<<<<<<<<<<
 *         return us
 * 
*/
  }

  /* "utils.pxd":3460
 * 
 *     # Aware-only: get UTC offset; None means treat as naive
 *     cdef datetime.timedelta off = dt_utcoffset(dt)             # <<<<<<<<<<<<<<
 *     return us if off is None else us - td_to_us(off)
 * 
*/
  __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_utcoffset(__pyx_v_dt)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 3460, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "utils.pxd":3461
 *     # Aware-only: get UTC offset; None means treat as naive
 *     cdef datetime.timedelta off = dt_utcoffset(dt)
 *     return us if off is None else us - td_to_us(off)             # <<<<<<<<<<<<<<
 * 
 * cdef inline double dt_to_sec(datetime.datetime dt, bint utc=False) except *:
*/
  __pyx_t_3 = (((PyObject *)__pyx_v_off) == Py_None);
  if (__pyx_t_3) {
    __pyx_t_1 = __pyx_v_us;
  } else {
    __pyx_t_1 = (__pyx_v_us - __pyx_f_7cytimes_5utils_td_to_us(__pyx_v_off));
  }
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":3433
 *     return "%s %s %2d %02d:%02d:%02d %04d" % (s_wkd, s_mm, dd, hh, mi, ss, yy)
 * 
 * cdef inline long long dt_to_us(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to microseconds since the Unix epoch `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.utils.dt_to_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3463
 *     return us if off is None else us - td_to_us(off)
 * 
 * cdef inline double dt_to_sec(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to seconds since the Unix epoch `<'float'>`.
 * 
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_dt_to_sec(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_to_sec *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  PY_LONG_LONG __pyx_v_us;
  double __pyx_r;
  PY_LONG_LONG __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_us __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }

  /* "utils.pxd":3476
 *     :returns `<'float'>`: Seconds since the Unix epoch.
 *     """
 *     cdef long long us = dt_to_us(dt, utc)             # <<<<<<<<<<<<<<
 *     return <double> us * 1e-6
 * 
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.utc = __pyx_v_utc;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3476, __pyx_L1_error)
  __pyx_v_us = __pyx_t_1;

  /* "utils.pxd":3477
 *     """
 *     cdef long long us = dt_to_us(dt, utc)
 *     return <double> us * 1e-6             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long dt_to_ord(datetime.datetime dt, bint utc=False) except -1:
*/
  __pyx_r = (((double)__pyx_v_us) * 1e-6);
  goto __pyx_L0;

  /* "utils.pxd":3463
 *     return us if off is None else us - td_to_us(off)
 * 
 * cdef inline double dt_to_sec(datetime.datetime dt, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to seconds since the Unix epoch `<'float'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.dt_to_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":3479
 *     return <double> us * 1e-6
 * 
 * cdef inline long long dt_to_ord(datetime.datetime dt, bint utc=False) except -1:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to its Gregorian ordinal day `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_to_ord(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_to_ord *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  PY_LONG_LONG __pyx_v_ord;
  PyDateTime_Delta *__pyx_v_off = 0;
  PY_LONG_LONG __pyx_v_us;
  PY_LONG_LONG __pyx_v_us_off;
  PY_LONG_LONG __pyx_v_adj;
  PY_LONG_LONG __pyx_r;
  __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("dt_to_ord", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }

  /* "utils.pxd":3494
 *     """
 *     # Compute ordinal from Y/M/D
 *     cdef long long ord = ymd_to_ord(dt.year, dt.month, dt.day)             # <<<<<<<<<<<<<<
 *     if not utc:
 *         return ord
*/
  __pyx_v_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt), __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt));

  /* "utils.pxd":3495
 *     # Compute ordinal from Y/M/D
 *     cdef long long ord = ymd_to_ord(dt.year, dt.month, dt.day)
 *     if not utc:             # <<<<<<<<<<<<<<
 *         return ord
 * 
*/
  __pyx_t_1 = (!__pyx_v_utc);
  if (__pyx_t_1) {

    /* "utils.pxd":3496
 *     cdef long long ord = ymd_to_ord(dt.year, dt.month, dt.day)
 *     if not utc:
 *         return ord             # <<<<<<<<<<<<<<
 * 
 *     # Aware-only: get UTC offset; None means treat as naive
*/
    __pyx_r = __pyx_v_ord;
    goto __pyx_L0;

    /* "utils.pxd":3495
 *     # Compute ordinal from Y/M/D
 *     cdef long long ord = ymd_to_ord(dt.year, dt.month, dt.day)
 *     if not utc:             # <<<<<<<<<<<<<<
 *         return ord
 * 
*/
  }

  /* "utils.pxd":3499
 * 
 *     # Aware-only: get UTC offset; None means treat as naive
 *     cdef datetime.timedelta off = dt_utcoffset(dt)             # <<<<<<<<<<<<<<
 *     if off is None:
 *         return ord
*/
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_utcoffset(__pyx_v_dt)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":3500
 *     # Aware-only: get UTC offset; None means treat as naive
 *     cdef datetime.timedelta off = dt_utcoffset(dt)
 *     if off is None:             # <<<<<<<<<<<<<<
 *         return ord
 * 
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_off) == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":3501
 *     cdef datetime.timedelta off = dt_utcoffset(dt)
 *     if off is None:
 *         return ord             # <<<<<<<<<<<<<<
 * 
 *     # Compare at microsecond precision: local TOD vs offset
*/
    __pyx_r = __pyx_v_ord;
    goto __pyx_L0;

    /* "utils.pxd":3500
 *     # Aware-only: get UTC offset; None means treat as naive
 *     cdef datetime.timedelta off = dt_utcoffset(dt)
 *     if off is None:             # <<<<<<<<<<<<<<
 *         return ord
 * 
*/
  }

  /* "utils.pxd":3508
 *         (<long long>dt.hour)            * US_HOUR +
 *         (<long long>dt.minute)          * US_MINUTE +
 *         (<long long>dt.second)          * US_SECOND +             # <<<<<<<<<<<<<<
 *         (<long long>dt.microsecond)
 *     )
*/
  __pyx_v_us = ((((((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_HOUR) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_MINUTE)) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt)) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt)));

  /* "utils.pxd":3515
 *     cdef long long us_off = (
 *         (<long long> off.day)        * US_DAY +
 *         (<long long> off.second)     * US_SECOND +             # <<<<<<<<<<<<<<
 *         (<long long> off.microsecond)
 *     )
*/
  __pyx_v_us_off = (((((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_off)) * __pyx_v_7cytimes_5utils_US_DAY) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_off)) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_off)));

  /* "utils.pxd":3520
 * 
 *     # Adjust ordinal according to the offset
 *     cdef long long adj = us - us_off             # <<<<<<<<<<<<<<
 *     if adj < 0:
 *         ord -= 1          # UTC is "earlier" calendar day
*/
  __pyx_v_adj = (__pyx_v_us - __pyx_v_us_off);

  /* "utils.pxd":3521
 *     # Adjust ordinal according to the offset
 *     cdef long long adj = us - us_off
 *     if adj < 0:             # <<<<<<<<<<<<<<
 *         ord -= 1          # UTC is "earlier" calendar day
 *     elif adj >= US_DAY:
*/
  __pyx_t_1 = (__pyx_v_adj < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":3522
 *     cdef long long adj = us - us_off
 *     if adj < 0:
 *         ord -= 1          # UTC is "earlier" calendar day             # <<<<<<<<<<<<<<
 *     elif adj >= US_DAY:
 *         ord += 1          # UTC is "later" calendar day
*/
    __pyx_v_ord = (__pyx_v_ord - 1);

    /* "utils.pxd":3521
 *     # Adjust ordinal according to the offset
 *     cdef long long adj = us - us_off
 *     if adj < 0:             # <<<<<<<<<<<<<<
 *         ord -= 1          # UTC is "earlier" calendar day
 *     elif adj >= US_DAY:
*/
    goto __pyx_L5;
  }

  /* "utils.pxd":3523
 *     if adj < 0:
 *         ord -= 1          # UTC is "earlier" calendar day
 *     elif adj >= US_DAY:             # <<<<<<<<<<<<<<
 *         ord += 1          # UTC is "later" calendar day
 *     return ord
*/
  __pyx_t_1 = (__pyx_v_adj >= __pyx_v_7cytimes_5utils_US_DAY);
  if (__pyx_t_1) {

    /* "utils.pxd":3524
 *         ord -= 1          # UTC is "earlier" calendar day
 *     elif adj >= US_DAY:
 *         ord += 1          # UTC is "later" calendar day             # <<<<<<<<<<<<<<
 *     return ord
 * 
*/
    __pyx_v_ord = (__pyx_v_ord + 1);

    /* "utils.pxd":3523
 *     if adj < 0:
 *         ord -= 1          # UTC is "earlier" calendar day
 *     elif adj >= US_DAY:             # <<<<<<<<<<<<<<
 *         ord += 1          # UTC is "later" calendar day
 *     return ord
*/
  }
  __pyx_L5:;

  /* "utils.pxd":3525
 *     elif adj >= US_DAY:
 *         ord += 1          # UTC is "later" calendar day
 *     return ord             # <<<<<<<<<<<<<<
 * 
 * cdef inline double dt_to_ts(datetime.datetime dt) except *:
*/
  __pyx_r = __pyx_v_ord;
  goto __pyx_L0;

  /* "utils.pxd":3479
 *     return <double> us * 1e-6
 * 
 * cdef inline long long dt_to_ord(datetime.datetime dt, bint utc=False) except -1:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to its Gregorian ordinal day `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_to_ord", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3527
 *     return ord
 * 
 * cdef inline double dt_to_ts(datetime.datetime dt) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to POSIX timestamp (seconds since the Unix epoch) `<'float'>`.
 * 
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_dt_to_ts(PyDateTime_DateTime *__pyx_v_dt) {
  double __pyx_v_t;
  double __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  double __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_sec __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_to_ts", 0);

  /* "utils.pxd":3541
 *     """
 *     # Timezone-aware
 *     if dt.tzinfo is not None:             # <<<<<<<<<<<<<<
 *         return dt_to_sec(dt, True)
 * 
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "utils.pxd":3542
 *     # Timezone-aware
 *     if dt.tzinfo is not None:
 *         return dt_to_sec(dt, True)             # <<<<<<<<<<<<<<
 * 
 *     # Timezone-naive: interpret as local time
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.utc = 1;
    __pyx_t_3 = __pyx_f_7cytimes_5utils_dt_to_sec(__pyx_v_dt, &__pyx_t_4); if (unlikely(__pyx_t_3 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(5, 3542, __pyx_L1_error)
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;

    /* "utils.pxd":3541
 *     """
 *     # Timezone-aware
 *     if dt.tzinfo is not None:             # <<<<<<<<<<<<<<
 *         return dt_to_sec(dt, True)
 * 
*/
  }

  /* "utils.pxd":3545
 * 
 *     # Timezone-naive: interpret as local time
 *     cdef double t = <double> dt_local_mktime(dt)             # <<<<<<<<<<<<<<
 *     return t + (<double> dt.microsecond) * 1e-6
 * 
*/
  __pyx_t_5 = __pyx_f_7cytimes_5utils_dt_local_mktime(__pyx_v_dt); if (unlikely(__pyx_t_5 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3545, __pyx_L1_error)
  __pyx_v_t = ((double)__pyx_t_5);

  /* "utils.pxd":3546
 *     # Timezone-naive: interpret as local time
 *     cdef double t = <double> dt_local_mktime(dt)
 *     return t + (<double> dt.microsecond) * 1e-6             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long dt_as_epoch(datetime.datetime dt, str as_unit, bint utc=False) except *:
*/
  __pyx_r = (__pyx_v_t + (((double)__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt)) * 1e-6));
  goto __pyx_L0;

  /* "utils.pxd":3527
 *     return ord
 * 
 * cdef inline double dt_to_ts(datetime.datetime dt) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to POSIX timestamp (seconds since the Unix epoch) `<'float'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_to_ts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3548
 *     return t + (<double> dt.microsecond) * 1e-6
 * 
 * cdef inline long long dt_as_epoch(datetime.datetime dt, str as_unit, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count since the Unix epoch `<'int'>`,
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_as_epoch(PyDateTime_DateTime *__pyx_v_dt, PyObject *__pyx_v_as_unit, struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  PyDateTime_Delta *__pyx_v_off = 0;
  Py_ssize_t __pyx_v_size;
  PY_LONG_LONG __pyx_v_n;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  PY_LONG_LONG __pyx_v_ss;
  PY_LONG_LONG __pyx_v_us;
  Py_UCS4 __pyx_v_ch;
  PY_LONG_LONG __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_dt_add __pyx_t_5;
  Py_UCS4 __pyx_t_6;
  PY_LONG_LONG __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_ord __pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_as_epoch", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_dt);

  /* "utils.pxd":3583
 *         * 'us' reproduces the exact microsecond field.
 *     """
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_as_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":3584
 *     """
 *     if as_unit is None:
 *         _raise_invalid_nptime_str_unit_error(as_unit)             # <<<<<<<<<<<<<<
 *     cdef:
 *         datetime.timedelta off
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_as_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 3584, __pyx_L1_error)

    /* "utils.pxd":3583
 *         * 'us' reproduces the exact microsecond field.
 *     """
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 *     cdef:
*/
  }

  /* "utils.pxd":3587
 *     cdef:
 *         datetime.timedelta off
 *         Py_ssize_t size = str_len(as_unit)             # <<<<<<<<<<<<<<
 *         long long n, q, r, hh, mi, ss, us
 *         Py_UCS4 ch
*/
  __pyx_v_size = PyUnicode_GET_LENGTH(__pyx_v_as_unit);

  /* "utils.pxd":3592
 * 
 *     # Optional UTC adjustment
 *     if utc:             # <<<<<<<<<<<<<<
 *         off = tz_utcoffset(dt.tzinfo, dt)
 *         if off is not None:
*/
  if (__pyx_v_utc) {

    /* "utils.pxd":3593
 *     # Optional UTC adjustment
 *     if utc:
 *         off = tz_utcoffset(dt.tzinfo, dt)             # <<<<<<<<<<<<<<
 *         if off is not None:
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
*/
    __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dt = __pyx_v_dt;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_t_2, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3593, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":3594
 *     if utc:
 *         off = tz_utcoffset(dt.tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 * 
*/
    __pyx_t_1 = (((PyObject *)__pyx_v_off) != Py_None);
    if (__pyx_t_1) {

      /* "utils.pxd":3595
 *         off = tz_utcoffset(dt.tzinfo, dt)
 *         if off is not None:
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'W', 'M', 'Q', 'Y'
*/
      __pyx_t_5.__pyx_n = 4;
      __pyx_t_5.days = (-__pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_off));
      __pyx_t_5.seconds = (-__pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_off));
      __pyx_t_5.microseconds = (-__pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_off));
      __pyx_t_5.dtclass = Py_None;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_add(__pyx_v_dt, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3595, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_dt, ((PyDateTime_DateTime *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":3594
 *     if utc:
 *         off = tz_utcoffset(dt.tzinfo, dt)
 *         if off is not None:             # <<<<<<<<<<<<<<
 *             dt = dt_add(dt, -off.day, -off.second, -off.microsecond, None)
 * 
*/
    }

    /* "utils.pxd":3592
 * 
 *     # Optional UTC adjustment
 *     if utc:             # <<<<<<<<<<<<<<
 *         off = tz_utcoffset(dt.tzinfo, dt)
 *         if off is not None:
*/
  }

  /* "utils.pxd":3598
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'W', 'M', 'Q', 'Y'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         # . year
*/
  __pyx_t_1 = (__pyx_v_size == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":3599
 *     # Unit: 's', 'm', 'h', 'D', 'W', 'M', 'Q', 'Y'
 *     if size == 1:
 *         ch = str_read(as_unit, 0)             # <<<<<<<<<<<<<<
 *         # . year
 *         if ch == "Y":
*/
    __pyx_t_6 = PyUnicode_ReadChar(__pyx_v_as_unit, 0); if (unlikely(__pyx_t_6 == ((Py_UCS4)-1))) __PYX_ERR(5, 3599, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_6;

    /* "utils.pxd":3601
 *         ch = str_read(as_unit, 0)
 *         # . year
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return dt.year - EPOCH_YEAR
 *         # . quarter
*/
    __pyx_t_1 = (__pyx_v_ch == 89);
    if (__pyx_t_1) {

      /* "utils.pxd":3602
 *         # . year
 *         if ch == "Y":
 *             return dt.year - EPOCH_YEAR             # <<<<<<<<<<<<<<
 *         # . quarter
 *         if ch == "Q":
*/
      __pyx_r = (__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt) - __pyx_v_7cytimes_5utils_EPOCH_YEAR);
      goto __pyx_L0;

      /* "utils.pxd":3601
 *         ch = str_read(as_unit, 0)
 *         # . year
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return dt.year - EPOCH_YEAR
 *         # . quarter
*/
    }

    /* "utils.pxd":3604
 *             return dt.year - EPOCH_YEAR
 *         # . quarter
 *         if ch == "Q":             # <<<<<<<<<<<<<<
 *             return (dt.year - EPOCH_YEAR) * 4 + quarter_of_month(dt.month) - 1
 *         # . month
*/
    __pyx_t_1 = (__pyx_v_ch == 81);
    if (__pyx_t_1) {

      /* "utils.pxd":3605
 *         # . quarter
 *         if ch == "Q":
 *             return (dt.year - EPOCH_YEAR) * 4 + quarter_of_month(dt.month) - 1             # <<<<<<<<<<<<<<
 *         # . month
 *         if ch == "M":
*/
      __pyx_r = ((((__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt) - __pyx_v_7cytimes_5utils_EPOCH_YEAR) * 4) + __pyx_f_7cytimes_5utils_quarter_of_month(__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt))) - 1);
      goto __pyx_L0;

      /* "utils.pxd":3604
 *             return dt.year - EPOCH_YEAR
 *         # . quarter
 *         if ch == "Q":             # <<<<<<<<<<<<<<
 *             return (dt.year - EPOCH_YEAR) * 4 + quarter_of_month(dt.month) - 1
 *         # . month
*/
    }

    /* "utils.pxd":3607
 *             return (dt.year - EPOCH_YEAR) * 4 + quarter_of_month(dt.month) - 1
 *         # . month
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return (dt.year - EPOCH_YEAR) * 12 + dt.month - 1
 *         # . week
*/
    __pyx_t_1 = (__pyx_v_ch == 77);
    if (__pyx_t_1) {

      /* "utils.pxd":3608
 *         # . month
 *         if ch == "M":
 *             return (dt.year - EPOCH_YEAR) * 12 + dt.month - 1             # <<<<<<<<<<<<<<
 *         # . week
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
*/
      __pyx_r = ((((__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt) - __pyx_v_7cytimes_5utils_EPOCH_YEAR) * 12) + __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt)) - 1);
      goto __pyx_L0;

      /* "utils.pxd":3607
 *             return (dt.year - EPOCH_YEAR) * 4 + quarter_of_month(dt.month) - 1
 *         # . month
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return (dt.year - EPOCH_YEAR) * 12 + dt.month - 1
 *         # . week
*/
    }

    /* "utils.pxd":3610
 *             return (dt.year - EPOCH_YEAR) * 12 + dt.month - 1
 *         # . week
 *         n = dt_to_ord(dt, False) - EPOCH_DAY             # <<<<<<<<<<<<<<
 *         if ch == "W":
 *             with cython.cdivision(True):
*/
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.utc = 0;
    __pyx_t_7 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_8); if (unlikely(__pyx_t_7 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3610, __pyx_L1_error)
    __pyx_v_n = (__pyx_t_7 - __pyx_v_7cytimes_5utils_EPOCH_DAY);

    /* "utils.pxd":3611
 *         # . week
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = n / 7; r = n % 7
*/
    __pyx_t_1 = (__pyx_v_ch == 87);
    if (__pyx_t_1) {

      /* "utils.pxd":3613
 *         if ch == "W":
 *             with cython.cdivision(True):
 *                 q = n / 7; r = n % 7             # <<<<<<<<<<<<<<
 *                 if r < 0:
 *                     q -= 1
*/
      __pyx_v_q = (__pyx_v_n / 7);
      __pyx_v_r = (__pyx_v_n % 7);

      /* "utils.pxd":3614
 *             with cython.cdivision(True):
 *                 q = n / 7; r = n % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     q -= 1
 *             return q
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {

        /* "utils.pxd":3615
 *                 q = n / 7; r = n % 7
 *                 if r < 0:
 *                     q -= 1             # <<<<<<<<<<<<<<
 *             return q
 *         # . day
*/
        __pyx_v_q = (__pyx_v_q - 1);

        /* "utils.pxd":3614
 *             with cython.cdivision(True):
 *                 q = n / 7; r = n % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     q -= 1
 *             return q
*/
      }

      /* "utils.pxd":3616
 *                 if r < 0:
 *                     q -= 1
 *             return q             # <<<<<<<<<<<<<<
 *         # . day
 *         if ch == "D":
*/
      __pyx_r = __pyx_v_q;
      goto __pyx_L0;

      /* "utils.pxd":3611
 *         # . week
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = n / 7; r = n % 7
*/
    }

    /* "utils.pxd":3618
 *             return q
 *         # . day
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return n
 *         # . hour
*/
    __pyx_t_1 = (__pyx_v_ch == 68);
    if (__pyx_t_1) {

      /* "utils.pxd":3619
 *         # . day
 *         if ch == "D":
 *             return n             # <<<<<<<<<<<<<<
 *         # . hour
 *         hh = dt.hour
*/
      __pyx_r = __pyx_v_n;
      goto __pyx_L0;

      /* "utils.pxd":3618
 *             return q
 *         # . day
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return n
 *         # . hour
*/
    }

    /* "utils.pxd":3621
 *             return n
 *         # . hour
 *         hh = dt.hour             # <<<<<<<<<<<<<<
 *         if ch == "h":
 *             return n * 24 + hh
*/
    __pyx_v_hh = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);

    /* "utils.pxd":3622
 *         # . hour
 *         hh = dt.hour
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return n * 24 + hh
 *         # . minute
*/
    __pyx_t_1 = (__pyx_v_ch == 0x68);
    if (__pyx_t_1) {

      /* "utils.pxd":3623
 *         hh = dt.hour
 *         if ch == "h":
 *             return n * 24 + hh             # <<<<<<<<<<<<<<
 *         # . minute
 *         mi = dt.minute
*/
      __pyx_r = ((__pyx_v_n * 24) + __pyx_v_hh);
      goto __pyx_L0;

      /* "utils.pxd":3622
 *         # . hour
 *         hh = dt.hour
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return n * 24 + hh
 *         # . minute
*/
    }

    /* "utils.pxd":3625
 *             return n * 24 + hh
 *         # . minute
 *         mi = dt.minute             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return n * 1_440 + hh * 60 + mi
*/
    __pyx_v_mi = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);

    /* "utils.pxd":3626
 *         # . minute
 *         mi = dt.minute
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return n * 1_440 + hh * 60 + mi
 *         # . second
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":3627
 *         mi = dt.minute
 *         if ch == "m":
 *             return n * 1_440 + hh * 60 + mi             # <<<<<<<<<<<<<<
 *         # . second
 *         ss = dt.second
*/
      __pyx_r = (((__pyx_v_n * 0x5A0) + (__pyx_v_hh * 60)) + __pyx_v_mi);
      goto __pyx_L0;

      /* "utils.pxd":3626
 *         # . minute
 *         mi = dt.minute
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return n * 1_440 + hh * 60 + mi
 *         # . second
*/
    }

    /* "utils.pxd":3629
 *             return n * 1_440 + hh * 60 + mi
 *         # . second
 *         ss = dt.second             # <<<<<<<<<<<<<<
 *         if ch == "s":
 *             return n * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
*/
    __pyx_v_ss = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);

    /* "utils.pxd":3630
 *         # . second
 *         ss = dt.second
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return n * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 0x73);
    if (__pyx_t_1) {

      /* "utils.pxd":3631
 *         ss = dt.second
 *         if ch == "s":
 *             return n * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'ns', 'us', 'ms'
*/
      __pyx_r = ((((__pyx_v_n * __pyx_v_7cytimes_5utils_SS_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_SS_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_SS_MINUTE)) + __pyx_v_ss);
      goto __pyx_L0;

      /* "utils.pxd":3630
 *         # . second
 *         ss = dt.second
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return n * SS_DAY + hh * SS_HOUR + mi * SS_MINUTE + ss
 * 
*/
    }

    /* "utils.pxd":3598
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'W', 'M', 'Q', 'Y'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         # . year
*/
    goto __pyx_L6;
  }

  /* "utils.pxd":3634
 * 
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         # . millisecond
*/
  __pyx_t_9 = (__pyx_v_size == 2);
  if (__pyx_t_9) {
  } else {
    __pyx_t_1 = __pyx_t_9;
    goto __pyx_L16_bool_binop_done;
  }
  __pyx_t_6 = PyUnicode_ReadChar(__pyx_v_as_unit, 1); if (unlikely(__pyx_t_6 == ((Py_UCS4)-1))) __PYX_ERR(5, 3634, __pyx_L1_error)
  __pyx_t_9 = (__pyx_t_6 == 0x73);
  __pyx_t_1 = __pyx_t_9;
  __pyx_L16_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":3635
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":
 *         ch = str_read(as_unit, 0)             # <<<<<<<<<<<<<<
 *         # . millisecond
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
*/
    __pyx_t_6 = PyUnicode_ReadChar(__pyx_v_as_unit, 0); if (unlikely(__pyx_t_6 == ((Py_UCS4)-1))) __PYX_ERR(5, 3635, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_6;

    /* "utils.pxd":3637
 *         ch = str_read(as_unit, 0)
 *         # . millisecond
 *         n = dt_to_ord(dt, False) - EPOCH_DAY             # <<<<<<<<<<<<<<
 *         hh, mi, ss, us = dt.hour, dt.minute, dt.second, dt.microsecond
 *         if ch == "m":
*/
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.utc = 0;
    __pyx_t_7 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_8); if (unlikely(__pyx_t_7 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3637, __pyx_L1_error)
    __pyx_v_n = (__pyx_t_7 - __pyx_v_7cytimes_5utils_EPOCH_DAY);

    /* "utils.pxd":3638
 *         # . millisecond
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi, ss, us = dt.hour, dt.minute, dt.second, dt.microsecond             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             with cython.cdivision(True):
*/
    __pyx_t_10 = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
    __pyx_t_11 = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
    __pyx_t_12 = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
    __pyx_t_13 = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
    __pyx_v_hh = __pyx_t_10;
    __pyx_v_mi = __pyx_t_11;
    __pyx_v_ss = __pyx_t_12;
    __pyx_v_us = __pyx_t_13;

    /* "utils.pxd":3639
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi, ss, us = dt.hour, dt.minute, dt.second, dt.microsecond
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 us = us / 1_000
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":3641
 *         if ch == "m":
 *             with cython.cdivision(True):
 *                 us = us / 1_000             # <<<<<<<<<<<<<<
 *             return n * MS_DAY + hh * MS_HOUR + mi * MS_MINUTE + ss * MS_SECOND + us
 *         # . microsecond
*/
      __pyx_v_us = (__pyx_v_us / 0x3E8);

      /* "utils.pxd":3642
 *             with cython.cdivision(True):
 *                 us = us / 1_000
 *             return n * MS_DAY + hh * MS_HOUR + mi * MS_MINUTE + ss * MS_SECOND + us             # <<<<<<<<<<<<<<
 *         # . microsecond
 *         if ch == "u":
*/
      __pyx_r = (((((__pyx_v_n * __pyx_v_7cytimes_5utils_MS_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_MS_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_MS_MINUTE)) + (__pyx_v_ss * __pyx_v_7cytimes_5utils_MS_SECOND)) + __pyx_v_us);
      goto __pyx_L0;

      /* "utils.pxd":3639
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi, ss, us = dt.hour, dt.minute, dt.second, dt.microsecond
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 us = us / 1_000
*/
    }

    /* "utils.pxd":3644
 *             return n * MS_DAY + hh * MS_HOUR + mi * MS_MINUTE + ss * MS_SECOND + us
 *         # . microsecond
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return n * US_DAY + hh * US_HOUR + mi * US_MINUTE + ss * US_SECOND + us
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 0x75);
    if (__pyx_t_1) {

      /* "utils.pxd":3645
 *         # . microsecond
 *         if ch == "u":
 *             return n * US_DAY + hh * US_HOUR + mi * US_MINUTE + ss * US_SECOND + us             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'min' for pandas compatibility
*/
      __pyx_r = (((((__pyx_v_n * __pyx_v_7cytimes_5utils_US_DAY) + (__pyx_v_hh * __pyx_v_7cytimes_5utils_US_HOUR)) + (__pyx_v_mi * __pyx_v_7cytimes_5utils_US_MINUTE)) + (__pyx_v_ss * __pyx_v_7cytimes_5utils_US_SECOND)) + __pyx_v_us);
      goto __pyx_L0;

      /* "utils.pxd":3644
 *             return n * MS_DAY + hh * MS_HOUR + mi * MS_MINUTE + ss * MS_SECOND + us
 *         # . microsecond
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return n * US_DAY + hh * US_HOUR + mi * US_MINUTE + ss * US_SECOND + us
 * 
*/
    }

    /* "utils.pxd":3634
 * 
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         # . millisecond
*/
    goto __pyx_L6;
  }

  /* "utils.pxd":3648
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":             # <<<<<<<<<<<<<<
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi = dt.hour, dt.minute
*/
  __pyx_t_9 = (__pyx_v_size == 3);
  if (__pyx_t_9) {
  } else {
    __pyx_t_1 = __pyx_t_9;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_9 = (__Pyx_PyUnicode_Equals(__pyx_v_as_unit, __pyx_mstate_global->__pyx_n_u_min, Py_EQ)); if (unlikely((__pyx_t_9 < 0))) __PYX_ERR(5, 3648, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_9;
  __pyx_L20_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":3649
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":
 *         n = dt_to_ord(dt, False) - EPOCH_DAY             # <<<<<<<<<<<<<<
 *         hh, mi = dt.hour, dt.minute
 *         return n * 1_440 + hh * 60 + mi
*/
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.utc = 0;
    __pyx_t_7 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_8); if (unlikely(__pyx_t_7 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3649, __pyx_L1_error)
    __pyx_v_n = (__pyx_t_7 - __pyx_v_7cytimes_5utils_EPOCH_DAY);

    /* "utils.pxd":3650
 *     elif size == 3 and as_unit == "min":
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi = dt.hour, dt.minute             # <<<<<<<<<<<<<<
 *         return n * 1_440 + hh * 60 + mi
 * 
*/
    __pyx_t_13 = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
    __pyx_t_12 = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
    __pyx_v_hh = __pyx_t_13;
    __pyx_v_mi = __pyx_t_12;

    /* "utils.pxd":3651
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi = dt.hour, dt.minute
 *         return n * 1_440 + hh * 60 + mi             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __pyx_r = (((__pyx_v_n * 0x5A0) + (__pyx_v_hh * 60)) + __pyx_v_mi);
    goto __pyx_L0;

    /* "utils.pxd":3648
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":             # <<<<<<<<<<<<<<
 *         n = dt_to_ord(dt, False) - EPOCH_DAY
 *         hh, mi = dt.hour, dt.minute
*/
  }
  __pyx_L6:;

  /* "utils.pxd":3654
 * 
 *     # Unsupported unit
 *     _raise_invalid_nptime_str_unit_error(as_unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long dt_as_epoch_W_iso(datetime.datetime dt, int weekday, bint utc=False) except *:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_as_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 3654, __pyx_L1_error)

  /* "utils.pxd":3548
 *     return t + (<double> dt.microsecond) * 1e-6
 * 
 * cdef inline long long dt_as_epoch(datetime.datetime dt, str as_unit, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count since the Unix epoch `<'int'>`,
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt_as_epoch", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_XDECREF((PyObject *)__pyx_v_dt);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3656
 *     _raise_invalid_nptime_str_unit_error(as_unit)
 * 
 * cdef inline long long dt_as_epoch_W_iso(datetime.datetime dt, int weekday, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count of whole
 *     weeks since the Unix epoch, where weeks are aligned to a chosen
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_dt_as_epoch_W_iso(PyDateTime_DateTime *__pyx_v_dt, int __pyx_v_weekday, struct __pyx_opt_args_7cytimes_5utils_dt_as_epoch_W_iso *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  PY_LONG_LONG __pyx_v_adj;
  PY_LONG_LONG __pyx_v_n;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_r;
  long __pyx_t_1;
  long __pyx_t_2;
  int __pyx_t_3;
  long __pyx_t_4;
  int __pyx_t_5;
  PY_LONG_LONG __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_ord __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }

  /* "utils.pxd":3678
 *     - Uses mathematical floor division so dates before the epoch are handled correctly.
 *     """
 *     cdef long long adj = 4 - min(max(weekday, 1), 7)             # <<<<<<<<<<<<<<
 *     cdef long long n = dt_to_ord(dt, utc) - EPOCH_DAY + adj
 *     cdef long long q, r
*/
  __pyx_t_1 = 7;
  __pyx_t_2 = 1;
  __pyx_t_3 = __pyx_v_weekday;
  __pyx_t_5 = (__pyx_t_2 > __pyx_t_3);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_t_2;
  } else {
    __pyx_t_4 = __pyx_t_3;
  }
  __pyx_t_2 = __pyx_t_4;
  __pyx_t_5 = (__pyx_t_1 < __pyx_t_2);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_t_1;
  } else {
    __pyx_t_4 = __pyx_t_2;
  }
  __pyx_v_adj = (4 - __pyx_t_4);

  /* "utils.pxd":3679
 *     """
 *     cdef long long adj = 4 - min(max(weekday, 1), 7)
 *     cdef long long n = dt_to_ord(dt, utc) - EPOCH_DAY + adj             # <<<<<<<<<<<<<<
 *     cdef long long q, r
 *     with cython.cdivision(True):
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.utc = __pyx_v_utc;
  __pyx_t_6 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_7); if (unlikely(__pyx_t_6 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3679, __pyx_L1_error)
  __pyx_v_n = ((__pyx_t_6 - __pyx_v_7cytimes_5utils_EPOCH_DAY) + __pyx_v_adj);

  /* "utils.pxd":3682
 *     cdef long long q, r
 *     with cython.cdivision(True):
 *         q = n / 7; r = n % 7             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
  __pyx_v_q = (__pyx_v_n / 7);
  __pyx_v_r = (__pyx_v_n % 7);

  /* "utils.pxd":3683
 *     with cython.cdivision(True):
 *         q = n / 7; r = n % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return q
*/
  __pyx_t_5 = (__pyx_v_r < 0);
  if (__pyx_t_5) {

    /* "utils.pxd":3684
 *         q = n / 7; r = n % 7
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *     return q
 * 
*/
    __pyx_v_q = (__pyx_v_q - 1);

    /* "utils.pxd":3683
 *     with cython.cdivision(True):
 *         q = n / 7; r = n % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *     return q
*/
  }

  /* "utils.pxd":3685
 *         if r < 0:
 *             q -= 1
 *     return q             # <<<<<<<<<<<<<<
 * 
 * # . conversion: from
*/
  __pyx_r = __pyx_v_q;
  goto __pyx_L0;

  /* "utils.pxd":3656
 *     _raise_invalid_nptime_str_unit_error(as_unit)
 * 
 * cdef inline long long dt_as_epoch_W_iso(datetime.datetime dt, int weekday, bint utc=False) except *:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to an integer count of whole
 *     weeks since the Unix epoch, where weeks are aligned to a chosen
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.dt_as_epoch_W_iso", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":3688
 * 
 * # . conversion: from
 * cdef inline datetime.datetime dt_fr_us(long long value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from microseconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_us(PY_LONG_LONG __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_dt_fr_us *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_dtm __pyx_v__dtm;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3697
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     cdef dtm _dtm = dtm_fr_us(value)             # <<<<<<<<<<<<<<
 *     return dt_new(
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
*/
  __pyx_v__dtm = __pyx_f_7cytimes_5utils_dtm_fr_us(__pyx_v_value);

  /* "utils.pxd":3698
 *     """
 *     cdef dtm _dtm = dtm_fr_us(value)
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
 *         _dtm.second, _dtm.microsecond, tzinfo, 0, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":3700
 *     return dt_new(
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
 *         _dtm.second, _dtm.microsecond, tzinfo, 0, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2.__pyx_n = 10;
  __pyx_t_2.year = __pyx_v__dtm.year;
  __pyx_t_2.month = __pyx_v__dtm.month;
  __pyx_t_2.day = __pyx_v__dtm.day;
  __pyx_t_2.hour = __pyx_v__dtm.hour;
  __pyx_t_2.minute = __pyx_v__dtm.minute;
  __pyx_t_2.second = __pyx_v__dtm.second;
  __pyx_t_2.microsecond = __pyx_v__dtm.microsecond;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3698, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3688
 * 
 * # . conversion: from
 * cdef inline datetime.datetime dt_fr_us(long long value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from microseconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3703
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_sec(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from seconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_sec(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_dt_fr_sec *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PY_LONG_LONG __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_us __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3712
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     return dt_fr_us(sec_to_us(value), tzinfo, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_ord(int value, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_sec_to_us(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3712, __pyx_L1_error)
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.tzinfo = __pyx_v_tzinfo;
  __pyx_t_3.dtclass = __pyx_v_dtclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_us(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3712, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3703
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_sec(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from seconds since the Unix epoch `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3714
 *     return dt_fr_us(sec_to_us(value), tzinfo, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ord(int value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_ord(int __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_dt_fr_ord *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_ord", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3723
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_ord(value)             # <<<<<<<<<<<<<<
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_value);

  /* "utils.pxd":3724
 *     """
 *     cdef ymd _ymd = ymd_fr_ord(value)
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_iso(int year, int week, int weekday, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 10;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.hour = 0;
  __pyx_t_2.minute = 0;
  __pyx_t_2.second = 0;
  __pyx_t_2.microsecond = 0;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3724, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3714
 *     return dt_fr_us(sec_to_us(value), tzinfo, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ord(int value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a Gregorian ordinal (0001-01-01 = 1) `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_ord", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3726
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_iso(int year, int week, int weekday, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from ISO calendar values (year, week, weekday) `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_iso(int __pyx_v_year, int __pyx_v_week, int __pyx_v_weekday, struct __pyx_opt_args_7cytimes_5utils_dt_fr_iso *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_iso", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3739
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_iso(year, week, weekday)             # <<<<<<<<<<<<<<
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_iso(__pyx_v_year, __pyx_v_week, __pyx_v_weekday);

  /* "utils.pxd":3740
 *     """
 *     cdef ymd _ymd = ymd_fr_iso(year, week, weekday)
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_doy(int year, int doy, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 10;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.hour = 0;
  __pyx_t_2.minute = 0;
  __pyx_t_2.second = 0;
  __pyx_t_2.microsecond = 0;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3740, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3726
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_iso(int year, int week, int weekday, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from ISO calendar values (year, week, weekday) `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_iso", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3742
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_doy(int year, int doy, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from Gregorian year and day-of-year `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_doy(int __pyx_v_year, int __pyx_v_doy, struct __pyx_opt_args_7cytimes_5utils_dt_fr_doy *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_doy", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3753
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     cdef ymd _ymd = ymd_fr_doy(year, doy)             # <<<<<<<<<<<<<<
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_doy(__pyx_v_year, __pyx_v_doy);

  /* "utils.pxd":3754
 *     """
 *     cdef ymd _ymd = ymd_fr_doy(year, doy)
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_ts(double value, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 10;
  __pyx_t_2.year = __pyx_v__ymd.year;
  __pyx_t_2.month = __pyx_v__ymd.month;
  __pyx_t_2.day = __pyx_v__ymd.day;
  __pyx_t_2.hour = 0;
  __pyx_t_2.minute = 0;
  __pyx_t_2.second = 0;
  __pyx_t_2.microsecond = 0;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3742
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_doy(int year, int doy, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from Gregorian year and day-of-year `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_doy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3756
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ts(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a POSIX timestamp with optional timezone `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_ts(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_dt_fr_ts *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_v_dt = 0;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cpython_8datetime_datetime_from_timestamp __pyx_t_3;
  int __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_ts", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3772
 *     >>> datetime.datetime.fromtimestamp(value, tzinfo)
 *     """
 *     cdef datetime.datetime dt = datetime.datetime_from_timestamp(value, tzinfo)             # <<<<<<<<<<<<<<
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.tz = __pyx_v_tzinfo;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cpython_8datetime_datetime_from_timestamp(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dt = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":3773
 *     """
 *     cdef datetime.datetime dt = datetime.datetime_from_timestamp(value, tzinfo)
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_date(datetime.date date, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_4 = (__pyx_v_dtclass == Py_None);
  if (__pyx_t_4) {
    __Pyx_INCREF((PyObject *)__pyx_v_dt);
    __pyx_t_2 = ((PyObject *)__pyx_v_dt);
  } else {
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_5)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3756
 *     return dt_new(_ymd.year, _ymd.month, _ymd.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_ts(double value, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from a POSIX timestamp with optional timezone `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_ts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dt);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3775
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_date(datetime.date date, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from date (include subclass) `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_date(PyDateTime_Date *__pyx_v_date, struct __pyx_opt_args_7cytimes_5utils_dt_fr_date *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_date", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":3785
 *         with the same date fields (time fields are set to 0).
 *     """
 *     return dt_new(date.year, date.month, date.day, 0, 0, 0, 0, tzinfo, 0, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_fr_dt(datetime.datetime dt, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 10;
  __pyx_t_2.year = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);
  __pyx_t_2.month = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);
  __pyx_t_2.day = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);
  __pyx_t_2.hour = 0;
  __pyx_t_2.minute = 0;
  __pyx_t_2.second = 0;
  __pyx_t_2.microsecond = 0;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3775
 *     return dt if dtclass is None else dt_fr_dt(dt, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_date(datetime.date date, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from date (include subclass) `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3787
 *     return dt_new(date.year, date.month, date.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_dt(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from another datetime (include subclass) `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_dt(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_dt", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }
  __Pyx_INCREF(__pyx_v_dtclass);

  /* "utils.pxd":3797
 *         with the same fields and tzinfo.
 *     """
 *     if dtclass is None:             # <<<<<<<<<<<<<<
 *         dtclass = datetime.datetime
 *     if dtclass is type(dt):
*/
  __pyx_t_1 = (__pyx_v_dtclass == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":3798
 *     """
 *     if dtclass is None:
 *         dtclass = datetime.datetime             # <<<<<<<<<<<<<<
 *     if dtclass is type(dt):
 *         return dt
*/
    __Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime);
    __Pyx_DECREF_SET(__pyx_v_dtclass, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime));

    /* "utils.pxd":3797
 *         with the same fields and tzinfo.
 *     """
 *     if dtclass is None:             # <<<<<<<<<<<<<<
 *         dtclass = datetime.datetime
 *     if dtclass is type(dt):
*/
  }

  /* "utils.pxd":3799
 *     if dtclass is None:
 *         dtclass = datetime.datetime
 *     if dtclass is type(dt):             # <<<<<<<<<<<<<<
 *         return dt
 *     return dt_new(
*/
  __pyx_t_1 = (__pyx_v_dtclass == ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_dt))));
  if (__pyx_t_1) {

    /* "utils.pxd":3800
 *         dtclass = datetime.datetime
 *     if dtclass is type(dt):
 *         return dt             # <<<<<<<<<<<<<<
 *     return dt_new(
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_dt);
    __pyx_r = __pyx_v_dt;
    goto __pyx_L0;

    /* "utils.pxd":3799
 *     if dtclass is None:
 *         dtclass = datetime.datetime
 *     if dtclass is type(dt):             # <<<<<<<<<<<<<<
 *         return dt
 *     return dt_new(
*/
  }

  /* "utils.pxd":3801
 *     if dtclass is type(dt):
 *         return dt
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":3803
 *     return dt_new(
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3803, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "utils.pxd":3801
 *     if dtclass is type(dt):
 *         return dt
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
  __pyx_t_4.__pyx_n = 10;
  __pyx_t_4.year = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_4.month = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_4.day = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_t_4.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_4.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_4.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_t_4.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_4.tzinfo = __pyx_t_2;
  __pyx_t_4.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_t_4.dtclass = __pyx_v_dtclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3801, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3787
 *     return dt_new(date.year, date.month, date.day, 0, 0, 0, 0, tzinfo, 0, dtclass)
 * 
 * cdef inline datetime.datetime dt_fr_dt(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from another datetime (include subclass) `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dtclass);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3806
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_time(datetime.time time, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from time (include subclass) `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_fr_time(PyDateTime_Time *__pyx_v_time, struct __pyx_opt_args_7cytimes_5utils_dt_fr_time *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_fr_time", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }

  /* "utils.pxd":3815
 *         with the same time fields and tzinfo (date fields are set to 1970-01-01).
 *     """
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         1970, 1, 1, time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":3817
 *     return dt_new(
 *         1970, 1, 1, time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(__pyx_v_time); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "utils.pxd":3815
 *         with the same time fields and tzinfo (date fields are set to 1970-01-01).
 *     """
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         1970, 1, 1, time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, dtclass,
*/
  __pyx_t_3.__pyx_n = 10;
  __pyx_t_3.year = 0x7B2;
  __pyx_t_3.month = 1;
  __pyx_t_3.day = 1;
  __pyx_t_3.hour = __pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time);
  __pyx_t_3.minute = __pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time);
  __pyx_t_3.second = __pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time);
  __pyx_t_3.microsecond = __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(__pyx_v_time);
  __pyx_t_3.tzinfo = __pyx_t_1;
  __pyx_t_3.fold = __pyx_f_7cpython_8datetime_4time_4fold_fold(__pyx_v_time);
  __pyx_t_3.dtclass = __pyx_v_dtclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3806
 *     )
 * 
 * cdef inline datetime.datetime dt_fr_time(datetime.time time, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create datetime from time (include subclass) `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_fr_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3820
 *     )
 * 
 * cdef inline datetime.datetime dt_combine(datetime.date date=None, datetime.time time=None, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a `datetime.datetime` by combining a date and a time `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_combine(struct __pyx_opt_args_7cytimes_5utils_dt_combine *__pyx_optional_args) {
  PyDateTime_Date *__pyx_v_date = ((PyDateTime_Date *)Py_None);
  PyDateTime_Time *__pyx_v_time = ((PyDateTime_Time *)Py_None);
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  int __pyx_v_hh;
  int __pyx_v_mi;
  int __pyx_v_ss;
  int __pyx_v_us;
  int __pyx_v_fold;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_date_now __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_combine", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_date = __pyx_optional_args->date;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_time = __pyx_optional_args->time;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_dtclass = __pyx_optional_args->dtclass;
          }
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_date);
  __Pyx_INCREF(__pyx_v_tzinfo);

  /* "utils.pxd":3835
 *     cdef int yy, mm, dd, hh, mi, ss, us, fold
 *     # Date
 *     if date is None:             # <<<<<<<<<<<<<<
 *         date = date_now(None, None)
 *     yy, mm, dd = date.year, date.month, date.day
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_date) == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":3836
 *     # Date
 *     if date is None:
 *         date = date_now(None, None)             # <<<<<<<<<<<<<<
 *     yy, mm, dd = date.year, date.month, date.day
 * 
*/
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.tzinfo = Py_None;
    __pyx_t_3.dclass = Py_None;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_date_now(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3836, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_date, ((PyDateTime_Date *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "utils.pxd":3835
 *     cdef int yy, mm, dd, hh, mi, ss, us, fold
 *     # Date
 *     if date is None:             # <<<<<<<<<<<<<<
 *         date = date_now(None, None)
 *     yy, mm, dd = date.year, date.month, date.day
*/
  }

  /* "utils.pxd":3837
 *     if date is None:
 *         date = date_now(None, None)
 *     yy, mm, dd = date.year, date.month, date.day             # <<<<<<<<<<<<<<
 * 
 *     # Time
*/
  __pyx_t_4 = __pyx_f_7cpython_8datetime_4date_4year_year(__pyx_v_date);
  __pyx_t_5 = __pyx_f_7cpython_8datetime_4date_5month_month(__pyx_v_date);
  __pyx_t_6 = __pyx_f_7cpython_8datetime_4date_3day_day(__pyx_v_date);
  __pyx_v_yy = __pyx_t_4;
  __pyx_v_mm = __pyx_t_5;
  __pyx_v_dd = __pyx_t_6;

  /* "utils.pxd":3840
 * 
 *     # Time
 *     if time is None:             # <<<<<<<<<<<<<<
 *         hh = mi = ss = us = fold = 0
 *     else:
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_time) == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":3841
 *     # Time
 *     if time is None:
 *         hh = mi = ss = us = fold = 0             # <<<<<<<<<<<<<<
 *     else:
 *         hh, mi, ss = time.hour, time.minute, time.second
*/
    __pyx_v_hh = 0;
    __pyx_v_mi = 0;
    __pyx_v_ss = 0;
    __pyx_v_us = 0;
    __pyx_v_fold = 0;

    /* "utils.pxd":3840
 * 
 *     # Time
 *     if time is None:             # <<<<<<<<<<<<<<
 *         hh = mi = ss = us = fold = 0
 *     else:
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":3843
 *         hh = mi = ss = us = fold = 0
 *     else:
 *         hh, mi, ss = time.hour, time.minute, time.second             # <<<<<<<<<<<<<<
 *         us, fold   = time.microsecond, time.fold
 *         if tzinfo is None:
*/
  /*else*/ {
    __pyx_t_6 = __pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time);
    __pyx_t_5 = __pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time);
    __pyx_t_4 = __pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time);
    __pyx_v_hh = __pyx_t_6;
    __pyx_v_mi = __pyx_t_5;
    __pyx_v_ss = __pyx_t_4;

    /* "utils.pxd":3844
 *     else:
 *         hh, mi, ss = time.hour, time.minute, time.second
 *         us, fold   = time.microsecond, time.fold             # <<<<<<<<<<<<<<
 *         if tzinfo is None:
 *             tzinfo = time.tzinfo
*/
    __pyx_t_4 = __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(__pyx_v_time);
    __pyx_t_5 = __pyx_f_7cpython_8datetime_4time_4fold_fold(__pyx_v_time);
    __pyx_v_us = __pyx_t_4;
    __pyx_v_fold = __pyx_t_5;

    /* "utils.pxd":3845
 *         hh, mi, ss = time.hour, time.minute, time.second
 *         us, fold   = time.microsecond, time.fold
 *         if tzinfo is None:             # <<<<<<<<<<<<<<
 *             tzinfo = time.tzinfo
 * 
*/
    __pyx_t_1 = (__pyx_v_tzinfo == Py_None);
    if (__pyx_t_1) {

      /* "utils.pxd":3846
 *         us, fold   = time.microsecond, time.fold
 *         if tzinfo is None:
 *             tzinfo = time.tzinfo             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
      __pyx_t_2 = __pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(__pyx_v_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3846, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_tzinfo, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "utils.pxd":3845
 *         hh, mi, ss = time.hour, time.minute, time.second
 *         us, fold   = time.microsecond, time.fold
 *         if tzinfo is None:             # <<<<<<<<<<<<<<
 *             tzinfo = time.tzinfo
 * 
*/
    }
  }
  __pyx_L4:;

  /* "utils.pxd":3849
 * 
 *     # New datetime
 *     return dt_new(yy, mm, dd, hh, mi, ss, us, tzinfo, fold, dtclass)             # <<<<<<<<<<<<<<
 * 
 * # . manipulation
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7.__pyx_n = 10;
  __pyx_t_7.year = __pyx_v_yy;
  __pyx_t_7.month = __pyx_v_mm;
  __pyx_t_7.day = __pyx_v_dd;
  __pyx_t_7.hour = __pyx_v_hh;
  __pyx_t_7.minute = __pyx_v_mi;
  __pyx_t_7.second = __pyx_v_ss;
  __pyx_t_7.microsecond = __pyx_v_us;
  __pyx_t_7.tzinfo = __pyx_v_tzinfo;
  __pyx_t_7.fold = __pyx_v_fold;
  __pyx_t_7.dtclass = __pyx_v_dtclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 3849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3820
 *     )
 * 
 * cdef inline datetime.datetime dt_combine(datetime.date date=None, datetime.time time=None, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a `datetime.datetime` by combining a date and a time `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_combine", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_date);
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3852
 * 
 * # . manipulation
 * cdef inline datetime.datetime dt_add(datetime.datetime dt, int days=0, int seconds=0, int microseconds=0, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Add a day/second/microsecond delta to a `datetime.datetime` `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_add(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_add *__pyx_optional_args) {
  int __pyx_v_days = ((int)0);
  int __pyx_v_seconds = ((int)0);
  int __pyx_v_microseconds = ((int)0);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PY_LONG_LONG __pyx_v_us;
  __pyx_t_7cytimes_5utils_dtm __pyx_v__dtm;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_ord __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_us __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_add", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_days = __pyx_optional_args->days;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_seconds = __pyx_optional_args->seconds;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_microseconds = __pyx_optional_args->microseconds;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_dtclass = __pyx_optional_args->dtclass;
          }
        }
      }
    }
  }

  /* "utils.pxd":3873
 *     # Fast-path: days only  preserve time fields and bump ordinal
 *     cdef ymd _ymd
 *     if seconds == 0 and microseconds == 0:             # <<<<<<<<<<<<<<
 *         # Early exit
 *         if days == 0:
*/
  __pyx_t_2 = (__pyx_v_seconds == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_microseconds == 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":3875
 *     if seconds == 0 and microseconds == 0:
 *         # Early exit
 *         if days == 0:             # <<<<<<<<<<<<<<
 *             return dt_fr_dt(dt, dtclass)
 * 
*/
    __pyx_t_1 = (__pyx_v_days == 0);
    if (__pyx_t_1) {

      /* "utils.pxd":3876
 *         # Early exit
 *         if days == 0:
 *             return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *         # Compute new ordinal, then back to Y/M/D
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.dtclass = __pyx_v_dtclass;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3876, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":3875
 *     if seconds == 0 and microseconds == 0:
 *         # Early exit
 *         if days == 0:             # <<<<<<<<<<<<<<
 *             return dt_fr_dt(dt, dtclass)
 * 
*/
    }

    /* "utils.pxd":3879
 * 
 *         # Compute new ordinal, then back to Y/M/D
 *         _ymd = ymd_fr_ord(dt_to_ord(dt, False) + days)             # <<<<<<<<<<<<<<
 * 
 *         # New datetime
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.utc = 0;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_dt_to_ord(__pyx_v_dt, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((PY_LONG_LONG)-1LL))) __PYX_ERR(5, 3879, __pyx_L1_error)
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_t_5 + __pyx_v_days));

    /* "utils.pxd":3882
 * 
 *         # New datetime
 *         return dt_new(             # <<<<<<<<<<<<<<
 *             _ymd.year, _ymd.month, _ymd.day, dt.hour, dt.minute,
 *             dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);

    /* "utils.pxd":3884
 *         return dt_new(
 *             _ymd.year, _ymd.month, _ymd.day, dt.hour, dt.minute,
 *             dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3884, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "utils.pxd":3882
 * 
 *         # New datetime
 *         return dt_new(             # <<<<<<<<<<<<<<
 *             _ymd.year, _ymd.month, _ymd.day, dt.hour, dt.minute,
 *             dt.second, dt.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
    __pyx_t_8.__pyx_n = 10;
    __pyx_t_8.year = __pyx_v__ymd.year;
    __pyx_t_8.month = __pyx_v__ymd.month;
    __pyx_t_8.day = __pyx_v__ymd.day;
    __pyx_t_8.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
    __pyx_t_8.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
    __pyx_t_8.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
    __pyx_t_8.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
    __pyx_t_8.tzinfo = __pyx_t_3;
    __pyx_t_8.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
    __pyx_t_8.dtclass = __pyx_v_dtclass;
    __pyx_t_7 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_8)); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3882, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_7);
    __pyx_t_7 = 0;
    goto __pyx_L0;

    /* "utils.pxd":3873
 *     # Fast-path: days only  preserve time fields and bump ordinal
 *     cdef ymd _ymd
 *     if seconds == 0 and microseconds == 0:             # <<<<<<<<<<<<<<
 *         # Early exit
 *         if days == 0:
*/
  }

  /* "utils.pxd":3888
 * 
 *     # General path: add delta in microseconds
 *     cdef long long us = dt_to_us(dt, False)             # <<<<<<<<<<<<<<
 *     us += (
 *         (<long long> days)          * US_DAY +
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.utc = 0;
  __pyx_t_5 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt, &__pyx_t_9); if (unlikely(__pyx_t_5 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 3888, __pyx_L1_error)
  __pyx_v_us = __pyx_t_5;

  /* "utils.pxd":3889
 *     # General path: add delta in microseconds
 *     cdef long long us = dt_to_us(dt, False)
 *     us += (             # <<<<<<<<<<<<<<
 *         (<long long> days)          * US_DAY +
 *         (<long long> seconds)       * US_SECOND +
*/
  __pyx_v_us = (__pyx_v_us + (((((PY_LONG_LONG)__pyx_v_days) * __pyx_v_7cytimes_5utils_US_DAY) + (((PY_LONG_LONG)__pyx_v_seconds) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_v_microseconds)));

  /* "utils.pxd":3896
 * 
 *     # Compute new date & time
 *     cdef dtm _dtm = dtm_fr_us(us)             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
  __pyx_v__dtm = __pyx_f_7cytimes_5utils_dtm_fr_us(__pyx_v_us);

  /* "utils.pxd":3899
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
 *         _dtm.second, _dtm.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":3901
 *     return dt_new(
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
 *         _dtm.second, _dtm.microsecond, dt.tzinfo, dt.fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_7 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 3901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "utils.pxd":3899
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         _dtm.year, _dtm.month, _dtm.day, _dtm.hour, _dtm.minute,
 *         _dtm.second, _dtm.microsecond, dt.tzinfo, dt.fold, dtclass,
*/
  __pyx_t_8.__pyx_n = 10;
  __pyx_t_8.year = __pyx_v__dtm.year;
  __pyx_t_8.month = __pyx_v__dtm.month;
  __pyx_t_8.day = __pyx_v__dtm.day;
  __pyx_t_8.hour = __pyx_v__dtm.hour;
  __pyx_t_8.minute = __pyx_v__dtm.minute;
  __pyx_t_8.second = __pyx_v__dtm.second;
  __pyx_t_8.microsecond = __pyx_v__dtm.microsecond;
  __pyx_t_8.tzinfo = __pyx_t_7;
  __pyx_t_8.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_t_8.dtclass = __pyx_v_dtclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 3899, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3852
 * 
 * # . manipulation
 * cdef inline datetime.datetime dt_add(datetime.datetime dt, int days=0, int seconds=0, int microseconds=0, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Add a day/second/microsecond delta to a `datetime.datetime` `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("cytimes.utils.dt_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":3904
 *     )
 * 
 * cdef inline datetime.datetime dt_add_delta(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_add_delta(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_add_delta *__pyx_optional_args) {
  int __pyx_v_years = ((int)0);
  int __pyx_v_quarters = ((int)0);
  int __pyx_v_months = ((int)0);
  int __pyx_v_weeks = ((int)0);
  PY_LONG_LONG __pyx_v_days = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_hours = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_minutes = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_seconds = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_milliseconds = ((PY_LONG_LONG)0);
  PY_LONG_LONG __pyx_v_microseconds = ((PY_LONG_LONG)0);
  int __pyx_v_year = ((int)-1);
  int __pyx_v_month = ((int)-1);
  int __pyx_v_day = ((int)-1);
  int __pyx_v_weekday = ((int)-1);
  int __pyx_v_hour = ((int)-1);
  int __pyx_v_minute = ((int)-1);
  int __pyx_v_second = ((int)-1);
  int __pyx_v_millisecond = ((int)-1);
  int __pyx_v_microsecond = ((int)-1);

  /* "utils.pxd":3908
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
 *     int year=-1, int month=-1, int day=-1, int weekday=-1, int hour=-1, int minute=-1,
 *     int second=-1, int millisecond=-1, int microsecond=-1, object dtclass=None             # <<<<<<<<<<<<<<
 * ):
 *     """Add relative and absolute deltas to datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  int __pyx_v_o_yy;
  int __pyx_v_yy;
  int __pyx_v_o_mm;
  int __pyx_v_mm;
  int __pyx_v_o_dd;
  int __pyx_v_dd;
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  PY_LONG_LONG __pyx_v_rel_days;
  PY_LONG_LONG __pyx_v_o_hh;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_o_mi;
  PY_LONG_LONG __pyx_v_mi;
  PY_LONG_LONG __pyx_v_o_ss;
  PY_LONG_LONG __pyx_v_ss;
  PY_LONG_LONG __pyx_v_o_us;
  PY_LONG_LONG __pyx_v_us;
  PY_LONG_LONG __pyx_v_old_ord;
  PY_LONG_LONG __pyx_v_new_ord;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PY_LONG_LONG __pyx_t_4;
  long __pyx_t_5;
  long __pyx_t_6;
  int __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_10;
  PyObject *__pyx_t_11 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_add_delta", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_years = __pyx_optional_args->years;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_quarters = __pyx_optional_args->quarters;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_months = __pyx_optional_args->months;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_weeks = __pyx_optional_args->weeks;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_days = __pyx_optional_args->days;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_hours = __pyx_optional_args->hours;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_minutes = __pyx_optional_args->minutes;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_seconds = __pyx_optional_args->seconds;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_milliseconds = __pyx_optional_args->milliseconds;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_microseconds = __pyx_optional_args->microseconds;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_year = __pyx_optional_args->year;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_month = __pyx_optional_args->month;
                            if (__pyx_optional_args->__pyx_n > 12) {
                              __pyx_v_day = __pyx_optional_args->day;
                              if (__pyx_optional_args->__pyx_n > 13) {
                                __pyx_v_weekday = __pyx_optional_args->weekday;
                                if (__pyx_optional_args->__pyx_n > 14) {
                                  __pyx_v_hour = __pyx_optional_args->hour;
                                  if (__pyx_optional_args->__pyx_n > 15) {
                                    __pyx_v_minute = __pyx_optional_args->minute;
                                    if (__pyx_optional_args->__pyx_n > 16) {
                                      __pyx_v_second = __pyx_optional_args->second;
                                      if (__pyx_optional_args->__pyx_n > 17) {
                                        __pyx_v_millisecond = __pyx_optional_args->millisecond;
                                        if (__pyx_optional_args->__pyx_n > 18) {
                                          __pyx_v_microsecond = __pyx_optional_args->microsecond;
                                          if (__pyx_optional_args->__pyx_n > 19) {
                                            __pyx_v_dtclass = __pyx_optional_args->dtclass;
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  /* "utils.pxd":3949
 *     # ----------------------------------------------------
 *     cdef:
 *         int o_yy = dt.year             # <<<<<<<<<<<<<<
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = dt.month
*/
  __pyx_v_o_yy = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);

  /* "utils.pxd":3950
 *     cdef:
 *         int o_yy = dt.year
 *         int yy = (year if year > 0 else o_yy) + years             # <<<<<<<<<<<<<<
 *         int o_mm = dt.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
*/
  __pyx_t_2 = (__pyx_v_year > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_year;
  } else {
    __pyx_t_1 = __pyx_v_o_yy;
  }
  __pyx_v_yy = (__pyx_t_1 + __pyx_v_years);

  /* "utils.pxd":3951
 *         int o_yy = dt.year
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = dt.month             # <<<<<<<<<<<<<<
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = dt.day
*/
  __pyx_v_o_mm = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);

  /* "utils.pxd":3952
 *         int yy = (year if year > 0 else o_yy) + years
 *         int o_mm = dt.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)             # <<<<<<<<<<<<<<
 *         int o_dd = dt.day
 *         int dd = (day if day > 0 else o_dd)
*/
  __pyx_t_2 = (__pyx_v_month > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_month;
  } else {
    __pyx_t_1 = __pyx_v_o_mm;
  }
  __pyx_v_mm = ((__pyx_t_1 + __pyx_v_months) + (__pyx_v_quarters * 3));

  /* "utils.pxd":3953
 *         int o_mm = dt.month
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = dt.day             # <<<<<<<<<<<<<<
 *         int dd = (day if day > 0 else o_dd)
 *         long long q, r
*/
  __pyx_v_o_dd = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);

  /* "utils.pxd":3954
 *         int mm = (month if month > 0 else o_mm) + months + (quarters * 3)
 *         int o_dd = dt.day
 *         int dd = (day if day > 0 else o_dd)             # <<<<<<<<<<<<<<
 *         long long q, r
 *     # . normalize month
*/
  __pyx_t_2 = (__pyx_v_day > 0);
  if (__pyx_t_2) {
    __pyx_t_1 = __pyx_v_day;
  } else {
    __pyx_t_1 = __pyx_v_o_dd;
  }
  __pyx_v_dd = __pyx_t_1;

  /* "utils.pxd":3957
 *         long long q, r
 *     # . normalize month
 *     if not 0 < mm <= 12:             # <<<<<<<<<<<<<<
 *         mm -= 1
 *         with cython.cdivision(True):
*/
  __pyx_t_2 = (0 < __pyx_v_mm);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_v_mm <= 12);
  }
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {

    /* "utils.pxd":3958
 *     # . normalize month
 *     if not 0 < mm <= 12:
 *         mm -= 1             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
*/
    __pyx_v_mm = (__pyx_v_mm - 1);

    /* "utils.pxd":3960
 *         mm -= 1
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += 12
*/
    __pyx_v_q = (((long)__pyx_v_mm) / 12);
    __pyx_v_r = (__pyx_v_mm % 12);

    /* "utils.pxd":3961
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1
*/
    __pyx_t_3 = (__pyx_v_r < 0);
    if (__pyx_t_3) {

      /* "utils.pxd":3962
 *             q = mm / 12; r = mm % 12
 *         if r < 0:
 *             q -= 1; r += 12             # <<<<<<<<<<<<<<
 *         yy += q; mm = r + 1
 *     # . relative days
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + 12);

      /* "utils.pxd":3961
 *         with cython.cdivision(True):
 *             q = mm / 12; r = mm % 12
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1
*/
    }

    /* "utils.pxd":3963
 *         if r < 0:
 *             q -= 1; r += 12
 *         yy += q; mm = r + 1             # <<<<<<<<<<<<<<
 *     # . relative days
 *     cdef long long rel_days = days + (weeks * 7)
*/
    __pyx_v_yy = (__pyx_v_yy + __pyx_v_q);
    __pyx_v_mm = (__pyx_v_r + 1);

    /* "utils.pxd":3957
 *         long long q, r
 *     # . normalize month
 *     if not 0 < mm <= 12:             # <<<<<<<<<<<<<<
 *         mm -= 1
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":3965
 *         yy += q; mm = r + 1
 *     # . relative days
 *     cdef long long rel_days = days + (weeks * 7)             # <<<<<<<<<<<<<<
 * 
 *     # Time fields
*/
  __pyx_v_rel_days = (__pyx_v_days + (__pyx_v_weeks * 7));

  /* "utils.pxd":3970
 *     # ----------------------------------------------------
 *     cdef:
 *         long long o_hh = dt.hour             # <<<<<<<<<<<<<<
 *         long long hh = (hour if hour >= 0 else o_hh) + hours
 *         long long o_mi = dt.minute
*/
  __pyx_v_o_hh = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);

  /* "utils.pxd":3971
 *     cdef:
 *         long long o_hh = dt.hour
 *         long long hh = (hour if hour >= 0 else o_hh) + hours             # <<<<<<<<<<<<<<
 *         long long o_mi = dt.minute
 *         long long mi = (minute if minute >= 0 else o_mi) + minutes
*/
  __pyx_t_3 = (__pyx_v_hour >= 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __pyx_v_hour;
  } else {
    __pyx_t_4 = __pyx_v_o_hh;
  }
  __pyx_v_hh = (__pyx_t_4 + __pyx_v_hours);

  /* "utils.pxd":3972
 *         long long o_hh = dt.hour
 *         long long hh = (hour if hour >= 0 else o_hh) + hours
 *         long long o_mi = dt.minute             # <<<<<<<<<<<<<<
 *         long long mi = (minute if minute >= 0 else o_mi) + minutes
 *         long long o_ss = dt.second
*/
  __pyx_v_o_mi = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);

  /* "utils.pxd":3973
 *         long long hh = (hour if hour >= 0 else o_hh) + hours
 *         long long o_mi = dt.minute
 *         long long mi = (minute if minute >= 0 else o_mi) + minutes             # <<<<<<<<<<<<<<
 *         long long o_ss = dt.second
 *         long long ss = (second if second >= 0 else o_ss) + seconds
*/
  __pyx_t_3 = (__pyx_v_minute >= 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __pyx_v_minute;
  } else {
    __pyx_t_4 = __pyx_v_o_mi;
  }
  __pyx_v_mi = (__pyx_t_4 + __pyx_v_minutes);

  /* "utils.pxd":3974
 *         long long o_mi = dt.minute
 *         long long mi = (minute if minute >= 0 else o_mi) + minutes
 *         long long o_ss = dt.second             # <<<<<<<<<<<<<<
 *         long long ss = (second if second >= 0 else o_ss) + seconds
 *         long long o_us = dt.microsecond
*/
  __pyx_v_o_ss = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);

  /* "utils.pxd":3975
 *         long long mi = (minute if minute >= 0 else o_mi) + minutes
 *         long long o_ss = dt.second
 *         long long ss = (second if second >= 0 else o_ss) + seconds             # <<<<<<<<<<<<<<
 *         long long o_us = dt.microsecond
 *         long long us = combine_absolute_ms_us(millisecond, microsecond)
*/
  __pyx_t_3 = (__pyx_v_second >= 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __pyx_v_second;
  } else {
    __pyx_t_4 = __pyx_v_o_ss;
  }
  __pyx_v_ss = (__pyx_t_4 + __pyx_v_seconds);

  /* "utils.pxd":3976
 *         long long o_ss = dt.second
 *         long long ss = (second if second >= 0 else o_ss) + seconds
 *         long long o_us = dt.microsecond             # <<<<<<<<<<<<<<
 *         long long us = combine_absolute_ms_us(millisecond, microsecond)
 *     us = (us if us >= 0 else o_us) + milliseconds * US_MILLISECOND + microseconds
*/
  __pyx_v_o_us = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);

  /* "utils.pxd":3977
 *         long long ss = (second if second >= 0 else o_ss) + seconds
 *         long long o_us = dt.microsecond
 *         long long us = combine_absolute_ms_us(millisecond, microsecond)             # <<<<<<<<<<<<<<
 *     us = (us if us >= 0 else o_us) + milliseconds * US_MILLISECOND + microseconds
 *     # . normalize microseconds
*/
  __pyx_v_us = __pyx_f_7cytimes_5utils_combine_absolute_ms_us(__pyx_v_millisecond, __pyx_v_microsecond);

  /* "utils.pxd":3978
 *         long long o_us = dt.microsecond
 *         long long us = combine_absolute_ms_us(millisecond, microsecond)
 *     us = (us if us >= 0 else o_us) + milliseconds * US_MILLISECOND + microseconds             # <<<<<<<<<<<<<<
 *     # . normalize microseconds
 *     if not 0 <= us < US_SECOND:
*/
  __pyx_t_3 = (__pyx_v_us >= 0);
  if (__pyx_t_3) {
    __pyx_t_4 = __pyx_v_us;
  } else {
    __pyx_t_4 = __pyx_v_o_us;
  }
  __pyx_v_us = ((__pyx_t_4 + (__pyx_v_milliseconds * __pyx_v_7cytimes_5utils_US_MILLISECOND)) + __pyx_v_microseconds);

  /* "utils.pxd":3980
 *     us = (us if us >= 0 else o_us) + milliseconds * US_MILLISECOND + microseconds
 *     # . normalize microseconds
 *     if not 0 <= us < US_SECOND:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = us / US_SECOND; r = us % US_SECOND
*/
  __pyx_t_3 = (0 <= __pyx_v_us);
  if (__pyx_t_3) {
    __pyx_t_3 = (__pyx_v_us < __pyx_v_7cytimes_5utils_US_SECOND);
  }
  __pyx_t_2 = (!__pyx_t_3);
  if (__pyx_t_2) {

    /* "utils.pxd":3982
 *     if not 0 <= us < US_SECOND:
 *         with cython.cdivision(True):
 *             q = us / US_SECOND; r = us % US_SECOND             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += US_SECOND
*/
    __pyx_v_q = (__pyx_v_us / __pyx_v_7cytimes_5utils_US_SECOND);
    __pyx_v_r = (__pyx_v_us % __pyx_v_7cytimes_5utils_US_SECOND);

    /* "utils.pxd":3983
 *         with cython.cdivision(True):
 *             q = us / US_SECOND; r = us % US_SECOND
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_SECOND
 *         ss += q; us = r
*/
    __pyx_t_2 = (__pyx_v_r < 0);
    if (__pyx_t_2) {

      /* "utils.pxd":3984
 *             q = us / US_SECOND; r = us % US_SECOND
 *         if r < 0:
 *             q -= 1; r += US_SECOND             # <<<<<<<<<<<<<<
 *         ss += q; us = r
 *     # . normalize seconds
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_SECOND);

      /* "utils.pxd":3983
 *         with cython.cdivision(True):
 *             q = us / US_SECOND; r = us % US_SECOND
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_SECOND
 *         ss += q; us = r
*/
    }

    /* "utils.pxd":3985
 *         if r < 0:
 *             q -= 1; r += US_SECOND
 *         ss += q; us = r             # <<<<<<<<<<<<<<
 *     # . normalize seconds
 *     if not 0 <= ss < 60:
*/
    __pyx_v_ss = (__pyx_v_ss + __pyx_v_q);
    __pyx_v_us = __pyx_v_r;

    /* "utils.pxd":3980
 *     us = (us if us >= 0 else o_us) + milliseconds * US_MILLISECOND + microseconds
 *     # . normalize microseconds
 *     if not 0 <= us < US_SECOND:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = us / US_SECOND; r = us % US_SECOND
*/
  }

  /* "utils.pxd":3987
 *         ss += q; us = r
 *     # . normalize seconds
 *     if not 0 <= ss < 60:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = ss / 60; r = ss % 60
*/
  __pyx_t_2 = (0 <= __pyx_v_ss);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_v_ss < 60);
  }
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {

    /* "utils.pxd":3989
 *     if not 0 <= ss < 60:
 *         with cython.cdivision(True):
 *             q = ss / 60; r = ss % 60             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += 60
*/
    __pyx_v_q = (__pyx_v_ss / 60);
    __pyx_v_r = (__pyx_v_ss % 60);

    /* "utils.pxd":3990
 *         with cython.cdivision(True):
 *             q = ss / 60; r = ss % 60
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 60
 *         mi += q; ss = r
*/
    __pyx_t_3 = (__pyx_v_r < 0);
    if (__pyx_t_3) {

      /* "utils.pxd":3991
 *             q = ss / 60; r = ss % 60
 *         if r < 0:
 *             q -= 1; r += 60             # <<<<<<<<<<<<<<
 *         mi += q; ss = r
 *     # . normalize minutes
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + 60);

      /* "utils.pxd":3990
 *         with cython.cdivision(True):
 *             q = ss / 60; r = ss % 60
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 60
 *         mi += q; ss = r
*/
    }

    /* "utils.pxd":3992
 *         if r < 0:
 *             q -= 1; r += 60
 *         mi += q; ss = r             # <<<<<<<<<<<<<<
 *     # . normalize minutes
 *     if not 0 <= mi < 60:
*/
    __pyx_v_mi = (__pyx_v_mi + __pyx_v_q);
    __pyx_v_ss = __pyx_v_r;

    /* "utils.pxd":3987
 *         ss += q; us = r
 *     # . normalize seconds
 *     if not 0 <= ss < 60:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = ss / 60; r = ss % 60
*/
  }

  /* "utils.pxd":3994
 *         mi += q; ss = r
 *     # . normalize minutes
 *     if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = mi / 60; r = mi % 60
*/
  __pyx_t_3 = (0 <= __pyx_v_mi);
  if (__pyx_t_3) {
    __pyx_t_3 = (__pyx_v_mi < 60);
  }
  __pyx_t_2 = (!__pyx_t_3);
  if (__pyx_t_2) {

    /* "utils.pxd":3996
 *     if not 0 <= mi < 60:
 *         with cython.cdivision(True):
 *             q = mi / 60; r = mi % 60             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += 60
*/
    __pyx_v_q = (__pyx_v_mi / 60);
    __pyx_v_r = (__pyx_v_mi % 60);

    /* "utils.pxd":3997
 *         with cython.cdivision(True):
 *             q = mi / 60; r = mi % 60
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 60
 *         hh += q; mi = r
*/
    __pyx_t_2 = (__pyx_v_r < 0);
    if (__pyx_t_2) {

      /* "utils.pxd":3998
 *             q = mi / 60; r = mi % 60
 *         if r < 0:
 *             q -= 1; r += 60             # <<<<<<<<<<<<<<
 *         hh += q; mi = r
 *     # . normalize hours to days
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + 60);

      /* "utils.pxd":3997
 *         with cython.cdivision(True):
 *             q = mi / 60; r = mi % 60
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 60
 *         hh += q; mi = r
*/
    }

    /* "utils.pxd":3999
 *         if r < 0:
 *             q -= 1; r += 60
 *         hh += q; mi = r             # <<<<<<<<<<<<<<
 *     # . normalize hours to days
 *     if not 0 <= hh < 24:
*/
    __pyx_v_hh = (__pyx_v_hh + __pyx_v_q);
    __pyx_v_mi = __pyx_v_r;

    /* "utils.pxd":3994
 *         mi += q; ss = r
 *     # . normalize minutes
 *     if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = mi / 60; r = mi % 60
*/
  }

  /* "utils.pxd":4001
 *         hh += q; mi = r
 *     # . normalize hours to days
 *     if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = hh / 24; r = hh % 24
*/
  __pyx_t_2 = (0 <= __pyx_v_hh);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_v_hh < 24);
  }
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {

    /* "utils.pxd":4003
 *     if not 0 <= hh < 24:
 *         with cython.cdivision(True):
 *             q = hh / 24; r = hh % 24             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += 24
*/
    __pyx_v_q = (__pyx_v_hh / 24);
    __pyx_v_r = (__pyx_v_hh % 24);

    /* "utils.pxd":4004
 *         with cython.cdivision(True):
 *             q = hh / 24; r = hh % 24
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 24
 *         rel_days += q; hh = r
*/
    __pyx_t_3 = (__pyx_v_r < 0);
    if (__pyx_t_3) {

      /* "utils.pxd":4005
 *             q = hh / 24; r = hh % 24
 *         if r < 0:
 *             q -= 1; r += 24             # <<<<<<<<<<<<<<
 *         rel_days += q; hh = r
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);
      __pyx_v_r = (__pyx_v_r + 24);

      /* "utils.pxd":4004
 *         with cython.cdivision(True):
 *             q = hh / 24; r = hh % 24
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += 24
 *         rel_days += q; hh = r
*/
    }

    /* "utils.pxd":4006
 *         if r < 0:
 *             q -= 1; r += 24
 *         rel_days += q; hh = r             # <<<<<<<<<<<<<<
 * 
 *     # Handle day delta
*/
    __pyx_v_rel_days = (__pyx_v_rel_days + __pyx_v_q);
    __pyx_v_hh = __pyx_v_r;

    /* "utils.pxd":4001
 *         hh += q; mi = r
 *     # . normalize hours to days
 *     if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = hh / 24; r = hh % 24
*/
  }

  /* "utils.pxd":4012
 *     cdef long long old_ord, new_ord
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:             # <<<<<<<<<<<<<<
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days
*/
  __pyx_t_2 = (__pyx_v_rel_days != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_weekday >= 0);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_3) {

    /* "utils.pxd":4013
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:
 *         old_ord = ymd_to_ord(yy, mm, dd)             # <<<<<<<<<<<<<<
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
*/
    __pyx_v_old_ord = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_yy, __pyx_v_mm, __pyx_v_dd);

    /* "utils.pxd":4014
 *     if rel_days != 0 or weekday >= 0:
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days             # <<<<<<<<<<<<<<
 *         # . adjust to weekday if needed
 *         if weekday >= 0:
*/
    __pyx_v_new_ord = (__pyx_v_old_ord + __pyx_v_rel_days);

    /* "utils.pxd":4016
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
 *         if weekday >= 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
*/
    __pyx_t_3 = (__pyx_v_weekday >= 0);
    if (__pyx_t_3) {

      /* "utils.pxd":4018
 *         if weekday >= 0:
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7             # <<<<<<<<<<<<<<
 *                 if r < 0:
 *                     r += 7
*/
      __pyx_v_r = ((__pyx_v_new_ord + 6) % 7);

      /* "utils.pxd":4019
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
*/
      __pyx_t_3 = (__pyx_v_r < 0);
      if (__pyx_t_3) {

        /* "utils.pxd":4020
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:
 *                     r += 7             # <<<<<<<<<<<<<<
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:
*/
        __pyx_v_r = (__pyx_v_r + 7);

        /* "utils.pxd":4019
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
*/
      }

      /* "utils.pxd":4021
 *                 if r < 0:
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6             # <<<<<<<<<<<<<<
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)
*/
      __pyx_t_5 = 6;
      __pyx_t_1 = __pyx_v_weekday;
      __pyx_t_3 = (__pyx_t_5 < __pyx_t_1);
      if (__pyx_t_3) {
        __pyx_t_6 = __pyx_t_5;
      } else {
        __pyx_t_6 = __pyx_t_1;
      }
      __pyx_v_new_ord = (__pyx_v_new_ord + (__pyx_t_6 - __pyx_v_r));

      /* "utils.pxd":4016
 *         new_ord = old_ord + rel_days
 *         # . adjust to weekday if needed
 *         if weekday >= 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 r = (new_ord + 6) % 7
*/
    }

    /* "utils.pxd":4022
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:             # <<<<<<<<<<<<<<
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
    __pyx_t_3 = (__pyx_v_old_ord != __pyx_v_new_ord);
    if (__pyx_t_3) {

      /* "utils.pxd":4023
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)             # <<<<<<<<<<<<<<
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
 * 
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(__pyx_v_new_ord);

      /* "utils.pxd":4024
 *         if old_ord != new_ord:
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *     # Compare new date/time
*/
      __pyx_t_1 = __pyx_v__ymd.year;
      __pyx_t_7 = __pyx_v__ymd.month;
      __pyx_t_8 = __pyx_v__ymd.day;
      __pyx_v_yy = __pyx_t_1;
      __pyx_v_mm = __pyx_t_7;
      __pyx_v_dd = __pyx_t_8;

      /* "utils.pxd":4022
 *                     r += 7
 *             new_ord += min(weekday, 6) - r  # weekday clamped to Sun=6
 *         if old_ord != new_ord:             # <<<<<<<<<<<<<<
 *             _ymd = ymd_fr_ord(new_ord)
 *             yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
    }

    /* "utils.pxd":4012
 *     cdef long long old_ord, new_ord
 *     cdef ymd _ymd
 *     if rel_days != 0 or weekday >= 0:             # <<<<<<<<<<<<<<
 *         old_ord = ymd_to_ord(yy, mm, dd)
 *         new_ord = old_ord + rel_days
*/
  }

  /* "utils.pxd":4027
 * 
 *     # Compare new date/time
 *     if (yy == o_yy and mm == o_mm and dd == o_dd and             # <<<<<<<<<<<<<<
 *         hh == o_hh and mi == o_mi and ss == o_ss and us == o_us):
 *         return dt_fr_dt(dt, dtclass)
*/
  __pyx_t_2 = (__pyx_v_yy == __pyx_v_o_yy);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_mm == __pyx_v_o_mm);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_dd == __pyx_v_o_dd);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }

  /* "utils.pxd":4028
 *     # Compare new date/time
 *     if (yy == o_yy and mm == o_mm and dd == o_dd and
 *         hh == o_hh and mi == o_mi and ss == o_ss and us == o_us):             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_2 = (__pyx_v_hh == __pyx_v_o_hh);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_mi == __pyx_v_o_mi);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_ss == __pyx_v_o_ss);
  if (__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_us == __pyx_v_o_us);
  __pyx_t_3 = __pyx_t_2;
  __pyx_L20_bool_binop_done:;

  /* "utils.pxd":4027
 * 
 *     # Compare new date/time
 *     if (yy == o_yy and mm == o_mm and dd == o_dd and             # <<<<<<<<<<<<<<
 *         hh == o_hh and mi == o_mi and ss == o_ss and us == o_us):
 *         return dt_fr_dt(dt, dtclass)
*/
  if (__pyx_t_3) {

    /* "utils.pxd":4029
 *     if (yy == o_yy and mm == o_mm and dd == o_dd and
 *         hh == o_hh and mi == o_mi and ss == o_ss and us == o_us):
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # Clamp day to valid days in month
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_10.__pyx_n = 1;
    __pyx_t_10.dtclass = __pyx_v_dtclass;
    __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_10)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_9);
    __pyx_t_9 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4027
 * 
 *     # Compare new date/time
 *     if (yy == o_yy and mm == o_mm and dd == o_dd and             # <<<<<<<<<<<<<<
 *         hh == o_hh and mi == o_mi and ss == o_ss and us == o_us):
 *         return dt_fr_dt(dt, dtclass)
*/
  }

  /* "utils.pxd":4032
 * 
 *     # Clamp day to valid days in month
 *     if dd > 28:             # <<<<<<<<<<<<<<
 *         dd = min(dd, days_in_month(yy, mm))
 * 
*/
  __pyx_t_3 = (__pyx_v_dd > 28);
  if (__pyx_t_3) {

    /* "utils.pxd":4033
 *     # Clamp day to valid days in month
 *     if dd > 28:
 *         dd = min(dd, days_in_month(yy, mm))             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
    __pyx_t_8 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_yy, __pyx_v_mm);
    __pyx_t_7 = __pyx_v_dd;
    __pyx_t_3 = (__pyx_t_8 < __pyx_t_7);
    if (__pyx_t_3) {
      __pyx_t_1 = __pyx_t_8;
    } else {
      __pyx_t_1 = __pyx_t_7;
    }
    __pyx_v_dd = __pyx_t_1;

    /* "utils.pxd":4032
 * 
 *     # Clamp day to valid days in month
 *     if dd > 28:             # <<<<<<<<<<<<<<
 *         dd = min(dd, days_in_month(yy, mm))
 * 
*/
  }

  /* "utils.pxd":4036
 * 
 *     # New datetime
 *     return dt_new(yy, mm, dd, hh, mi, ss, us, dt.tzinfo, dt.fold, dtclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_replace(datetime.datetime dt,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_9 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_12.__pyx_n = 10;
  __pyx_t_12.year = __pyx_v_yy;
  __pyx_t_12.month = __pyx_v_mm;
  __pyx_t_12.day = __pyx_v_dd;
  __pyx_t_12.hour = __pyx_v_hh;
  __pyx_t_12.minute = __pyx_v_mi;
  __pyx_t_12.second = __pyx_v_ss;
  __pyx_t_12.microsecond = __pyx_v_us;
  __pyx_t_12.tzinfo = __pyx_t_9;
  __pyx_t_12.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_t_12.dtclass = __pyx_v_dtclass;
  __pyx_t_11 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_12)); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4036, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_11);
  __pyx_t_11 = 0;
  goto __pyx_L0;

  /* "utils.pxd":3904
 *     )
 * 
 * cdef inline datetime.datetime dt_add_delta(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int years=0, int quarters=0, int months=0, int weeks=0, long long days=0, long long hours=0,
 *     long long minutes=0, long long seconds=0, long long milliseconds=0, long long microseconds=0,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("cytimes.utils.dt_add_delta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4038
 *     return dt_new(yy, mm, dd, hh, mi, ss, us, dt.tzinfo, dt.fold, dtclass)
 * 
 * cdef inline datetime.datetime dt_replace(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int year=-1, int month=-1, int day=-1, int hour=-1, int minute=-1,
 *     int second=-1, int microsecond=-1, object tzinfo=-1, int fold=-1,
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_replace *__pyx_optional_args) {
  int __pyx_v_year = ((int)-1);
  int __pyx_v_month = ((int)-1);
  int __pyx_v_day = ((int)-1);
  int __pyx_v_hour = ((int)-1);
  int __pyx_v_minute = ((int)-1);
  int __pyx_v_second = ((int)-1);
  int __pyx_v_microsecond = ((int)-1);
  PyObject *__pyx_v_tzinfo = ((PyObject *)__pyx_mstate_global->__pyx_int_neg_1);
  int __pyx_v_fold = ((int)-1);

  /* "utils.pxd":4041
 *     int year=-1, int month=-1, int day=-1, int hour=-1, int minute=-1,
 *     int second=-1, int microsecond=-1, object tzinfo=-1, int fold=-1,
 *     object dtclass=None,             # <<<<<<<<<<<<<<
 * ):
 *     """Replace specified fields of a datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  int __pyx_v_yy;
  int __pyx_v_mm;
  int __pyx_v_dd;
  int __pyx_v_hh;
  int __pyx_v_mi;
  int __pyx_v_ss;
  int __pyx_v_us;
  int __pyx_v_fd;
  PyObject *__pyx_v_tz = 0;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  long __pyx_t_5;
  int __pyx_t_6;
  long __pyx_t_7;
  long __pyx_t_8;
  int __pyx_t_9;
  int __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_replace", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_year = __pyx_optional_args->year;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_month = __pyx_optional_args->month;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_day = __pyx_optional_args->day;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_hour = __pyx_optional_args->hour;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_minute = __pyx_optional_args->minute;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_second = __pyx_optional_args->second;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_microsecond = __pyx_optional_args->microsecond;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_fold = __pyx_optional_args->fold;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_dtclass = __pyx_optional_args->dtclass;
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_tzinfo);

  /* "utils.pxd":4071
 *     # Get old fields
 *     cdef int yy, mm, dd, hh, mi, ss, us, fd
 *     yy, mm, dd = dt.year, dt.month, dt.day             # <<<<<<<<<<<<<<
 *     hh, mi, ss = dt.hour, dt.minute, dt.second
 *     us, fd     = dt.microsecond, dt.fold
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_v_yy = __pyx_t_1;
  __pyx_v_mm = __pyx_t_2;
  __pyx_v_dd = __pyx_t_3;

  /* "utils.pxd":4072
 *     cdef int yy, mm, dd, hh, mi, ss, us, fd
 *     yy, mm, dd = dt.year, dt.month, dt.day
 *     hh, mi, ss = dt.hour, dt.minute, dt.second             # <<<<<<<<<<<<<<
 *     us, fd     = dt.microsecond, dt.fold
 *     cdef object tz = dt.tzinfo
*/
  __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_v_hh = __pyx_t_3;
  __pyx_v_mi = __pyx_t_2;
  __pyx_v_ss = __pyx_t_1;

  /* "utils.pxd":4073
 *     yy, mm, dd = dt.year, dt.month, dt.day
 *     hh, mi, ss = dt.hour, dt.minute, dt.second
 *     us, fd     = dt.microsecond, dt.fold             # <<<<<<<<<<<<<<
 *     cdef object tz = dt.tzinfo
 * 
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_v_us = __pyx_t_1;
  __pyx_v_fd = __pyx_t_2;

  /* "utils.pxd":4074
 *     hh, mi, ss = dt.hour, dt.minute, dt.second
 *     us, fd     = dt.microsecond, dt.fold
 *     cdef object tz = dt.tzinfo             # <<<<<<<<<<<<<<
 * 
 *     # Gen new fields
*/
  __pyx_t_4 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4074, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_tz = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "utils.pxd":4077
 * 
 *     # Gen new fields
 *     year   = yy if year < 1 else min(year, 9999)             # <<<<<<<<<<<<<<
 *     month  = mm if month < 1 else min(month, 12)
 *     if day < 1:
*/
  __pyx_t_6 = (__pyx_v_year < 1);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_yy;
  } else {
    __pyx_t_7 = 0x270F;
    __pyx_t_2 = __pyx_v_year;
    __pyx_t_9 = (__pyx_t_7 < __pyx_t_2);
    if (__pyx_t_9) {
      __pyx_t_8 = __pyx_t_7;
    } else {
      __pyx_t_8 = __pyx_t_2;
    }
    __pyx_t_5 = __pyx_t_8;
  }
  __pyx_v_year = __pyx_t_5;

  /* "utils.pxd":4078
 *     # Gen new fields
 *     year   = yy if year < 1 else min(year, 9999)
 *     month  = mm if month < 1 else min(month, 12)             # <<<<<<<<<<<<<<
 *     if day < 1:
 *         day = dd
*/
  __pyx_t_6 = (__pyx_v_month < 1);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_mm;
  } else {
    __pyx_t_8 = 12;
    __pyx_t_2 = __pyx_v_month;
    __pyx_t_9 = (__pyx_t_8 < __pyx_t_2);
    if (__pyx_t_9) {
      __pyx_t_7 = __pyx_t_8;
    } else {
      __pyx_t_7 = __pyx_t_2;
    }
    __pyx_t_5 = __pyx_t_7;
  }
  __pyx_v_month = __pyx_t_5;

  /* "utils.pxd":4079
 *     year   = yy if year < 1 else min(year, 9999)
 *     month  = mm if month < 1 else min(month, 12)
 *     if day < 1:             # <<<<<<<<<<<<<<
 *         day = dd
 *     elif day > 28:
*/
  __pyx_t_6 = (__pyx_v_day < 1);
  if (__pyx_t_6) {

    /* "utils.pxd":4080
 *     month  = mm if month < 1 else min(month, 12)
 *     if day < 1:
 *         day = dd             # <<<<<<<<<<<<<<
 *     elif day > 28:
 *         day = min(day, days_in_month(year, month))
*/
    __pyx_v_day = __pyx_v_dd;

    /* "utils.pxd":4079
 *     year   = yy if year < 1 else min(year, 9999)
 *     month  = mm if month < 1 else min(month, 12)
 *     if day < 1:             # <<<<<<<<<<<<<<
 *         day = dd
 *     elif day > 28:
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":4081
 *     if day < 1:
 *         day = dd
 *     elif day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     hour   = hh if hour < 0 else min(hour, 23)
*/
  __pyx_t_6 = (__pyx_v_day > 28);
  if (__pyx_t_6) {

    /* "utils.pxd":4082
 *         day = dd
 *     elif day > 28:
 *         day = min(day, days_in_month(year, month))             # <<<<<<<<<<<<<<
 *     hour   = hh if hour < 0 else min(hour, 23)
 *     minute = mi if minute < 0 else min(minute, 59)
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_year, __pyx_v_month);
    __pyx_t_1 = __pyx_v_day;
    __pyx_t_6 = (__pyx_t_2 < __pyx_t_1);
    if (__pyx_t_6) {
      __pyx_t_3 = __pyx_t_2;
    } else {
      __pyx_t_3 = __pyx_t_1;
    }
    __pyx_v_day = __pyx_t_3;

    /* "utils.pxd":4081
 *     if day < 1:
 *         day = dd
 *     elif day > 28:             # <<<<<<<<<<<<<<
 *         day = min(day, days_in_month(year, month))
 *     hour   = hh if hour < 0 else min(hour, 23)
*/
  }
  __pyx_L3:;

  /* "utils.pxd":4083
 *     elif day > 28:
 *         day = min(day, days_in_month(year, month))
 *     hour   = hh if hour < 0 else min(hour, 23)             # <<<<<<<<<<<<<<
 *     minute = mi if minute < 0 else min(minute, 59)
 *     second = ss if second < 0 else min(second, 59)
*/
  __pyx_t_6 = (__pyx_v_hour < 0);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_hh;
  } else {
    __pyx_t_7 = 23;
    __pyx_t_3 = __pyx_v_hour;
    __pyx_t_9 = (__pyx_t_7 < __pyx_t_3);
    if (__pyx_t_9) {
      __pyx_t_8 = __pyx_t_7;
    } else {
      __pyx_t_8 = __pyx_t_3;
    }
    __pyx_t_5 = __pyx_t_8;
  }
  __pyx_v_hour = __pyx_t_5;

  /* "utils.pxd":4084
 *         day = min(day, days_in_month(year, month))
 *     hour   = hh if hour < 0 else min(hour, 23)
 *     minute = mi if minute < 0 else min(minute, 59)             # <<<<<<<<<<<<<<
 *     second = ss if second < 0 else min(second, 59)
 *     microsecond = us if microsecond < 0 else min(microsecond, 999999)
*/
  __pyx_t_6 = (__pyx_v_minute < 0);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_mi;
  } else {
    __pyx_t_8 = 59;
    __pyx_t_3 = __pyx_v_minute;
    __pyx_t_9 = (__pyx_t_8 < __pyx_t_3);
    if (__pyx_t_9) {
      __pyx_t_7 = __pyx_t_8;
    } else {
      __pyx_t_7 = __pyx_t_3;
    }
    __pyx_t_5 = __pyx_t_7;
  }
  __pyx_v_minute = __pyx_t_5;

  /* "utils.pxd":4085
 *     hour   = hh if hour < 0 else min(hour, 23)
 *     minute = mi if minute < 0 else min(minute, 59)
 *     second = ss if second < 0 else min(second, 59)             # <<<<<<<<<<<<<<
 *     microsecond = us if microsecond < 0 else min(microsecond, 999999)
 *     tzinfo = tz if (tzinfo is not None and not is_tz(tzinfo)) else tzinfo
*/
  __pyx_t_6 = (__pyx_v_second < 0);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_ss;
  } else {
    __pyx_t_7 = 59;
    __pyx_t_3 = __pyx_v_second;
    __pyx_t_9 = (__pyx_t_7 < __pyx_t_3);
    if (__pyx_t_9) {
      __pyx_t_8 = __pyx_t_7;
    } else {
      __pyx_t_8 = __pyx_t_3;
    }
    __pyx_t_5 = __pyx_t_8;
  }
  __pyx_v_second = __pyx_t_5;

  /* "utils.pxd":4086
 *     minute = mi if minute < 0 else min(minute, 59)
 *     second = ss if second < 0 else min(second, 59)
 *     microsecond = us if microsecond < 0 else min(microsecond, 999999)             # <<<<<<<<<<<<<<
 *     tzinfo = tz if (tzinfo is not None and not is_tz(tzinfo)) else tzinfo
 *     fold   = fd if fold not in (0, 1) else fold
*/
  __pyx_t_6 = (__pyx_v_microsecond < 0);
  if (__pyx_t_6) {
    __pyx_t_5 = __pyx_v_us;
  } else {
    __pyx_t_8 = 0xF423F;
    __pyx_t_3 = __pyx_v_microsecond;
    __pyx_t_9 = (__pyx_t_8 < __pyx_t_3);
    if (__pyx_t_9) {
      __pyx_t_7 = __pyx_t_8;
    } else {
      __pyx_t_7 = __pyx_t_3;
    }
    __pyx_t_5 = __pyx_t_7;
  }
  __pyx_v_microsecond = __pyx_t_5;

  /* "utils.pxd":4087
 *     second = ss if second < 0 else min(second, 59)
 *     microsecond = us if microsecond < 0 else min(microsecond, 999999)
 *     tzinfo = tz if (tzinfo is not None and not is_tz(tzinfo)) else tzinfo             # <<<<<<<<<<<<<<
 *     fold   = fd if fold not in (0, 1) else fold
 * 
*/
  __pyx_t_9 = (__pyx_v_tzinfo != Py_None);
  if (__pyx_t_9) {
  } else {
    __pyx_t_6 = __pyx_t_9;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_9 = __pyx_f_7cytimes_5utils_is_tz(__pyx_v_tzinfo); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(5, 4087, __pyx_L1_error)
  __pyx_t_10 = (!__pyx_t_9);
  __pyx_t_6 = __pyx_t_10;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_6) {
    __Pyx_INCREF(__pyx_v_tz);
    __pyx_t_4 = __pyx_v_tz;
  } else {
    __Pyx_INCREF(__pyx_v_tzinfo);
    __pyx_t_4 = __pyx_v_tzinfo;
  }
  __Pyx_DECREF_SET(__pyx_v_tzinfo, __pyx_t_4);
  __pyx_t_4 = 0;

  /* "utils.pxd":4088
 *     microsecond = us if microsecond < 0 else min(microsecond, 999999)
 *     tzinfo = tz if (tzinfo is not None and not is_tz(tzinfo)) else tzinfo
 *     fold   = fd if fold not in (0, 1) else fold             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: same fields
*/
  switch (__pyx_v_fold) {
    case 0:
    case 1:
    __pyx_t_3 = __pyx_v_fold;
    break;
    default:
    __pyx_t_3 = __pyx_v_fd;
    break;
  }
  __pyx_v_fold = __pyx_t_3;

  /* "utils.pxd":4091
 * 
 *     # Fast-path: same fields
 *     if (year == yy and month == mm and day == dd             # <<<<<<<<<<<<<<
 *         and hour == hh and minute == mi and second == ss
 *         and microsecond == us and tzinfo is tz and fold == fd
*/
  __pyx_t_10 = (__pyx_v_year == __pyx_v_yy);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_month == __pyx_v_mm);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }

  /* "utils.pxd":4092
 *     # Fast-path: same fields
 *     if (year == yy and month == mm and day == dd
 *         and hour == hh and minute == mi and second == ss             # <<<<<<<<<<<<<<
 *         and microsecond == us and tzinfo is tz and fold == fd
 *     ):
*/
  __pyx_t_10 = (__pyx_v_day == __pyx_v_dd);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_hour == __pyx_v_hh);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_minute == __pyx_v_mi);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }

  /* "utils.pxd":4093
 *     if (year == yy and month == mm and day == dd
 *         and hour == hh and minute == mi and second == ss
 *         and microsecond == us and tzinfo is tz and fold == fd             # <<<<<<<<<<<<<<
 *     ):
 *         return dt_fr_dt(dt, dtclass)
*/
  __pyx_t_10 = (__pyx_v_second == __pyx_v_ss);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_microsecond == __pyx_v_us);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_tzinfo == __pyx_v_tz);
  if (__pyx_t_10) {
  } else {
    __pyx_t_6 = __pyx_t_10;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_10 = (__pyx_v_fold == __pyx_v_fd);
  __pyx_t_6 = __pyx_t_10;
  __pyx_L7_bool_binop_done:;

  /* "utils.pxd":4091
 * 
 *     # Fast-path: same fields
 *     if (year == yy and month == mm and day == dd             # <<<<<<<<<<<<<<
 *         and hour == hh and minute == mi and second == ss
 *         and microsecond == us and tzinfo is tz and fold == fd
*/
  if (__pyx_t_6) {

    /* "utils.pxd":4095
 *         and microsecond == us and tzinfo is tz and fold == fd
 *     ):
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 1;
    __pyx_t_11.dtclass = __pyx_v_dtclass;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_11)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4091
 * 
 *     # Fast-path: same fields
 *     if (year == yy and month == mm and day == dd             # <<<<<<<<<<<<<<
 *         and hour == hh and minute == mi and second == ss
 *         and microsecond == us and tzinfo is tz and fold == fd
*/
  }

  /* "utils.pxd":4098
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         year, month, day, hour, minute,
 *         second, microsecond, tzinfo, fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4100
 *     return dt_new(
 *         year, month, day, hour, minute,
 *         second, microsecond, tzinfo, fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_12.__pyx_n = 10;
  __pyx_t_12.year = __pyx_v_year;
  __pyx_t_12.month = __pyx_v_month;
  __pyx_t_12.day = __pyx_v_day;
  __pyx_t_12.hour = __pyx_v_hour;
  __pyx_t_12.minute = __pyx_v_minute;
  __pyx_t_12.second = __pyx_v_second;
  __pyx_t_12.microsecond = __pyx_v_microsecond;
  __pyx_t_12.tzinfo = __pyx_v_tzinfo;
  __pyx_t_12.fold = __pyx_v_fold;
  __pyx_t_12.dtclass = __pyx_v_dtclass;
  __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_12)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4038
 *     return dt_new(yy, mm, dd, hh, mi, ss, us, dt.tzinfo, dt.fold, dtclass)
 * 
 * cdef inline datetime.datetime dt_replace(datetime.datetime dt,             # <<<<<<<<<<<<<<
 *     int year=-1, int month=-1, int day=-1, int hour=-1, int minute=-1,
 *     int second=-1, int microsecond=-1, object tzinfo=-1, int fold=-1,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.utils.dt_replace", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tz);
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4103
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz_fold(datetime.datetime dt, object tzinfo, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` and `fold` replaced `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace_tz_fold(PyDateTime_DateTime *__pyx_v_dt, PyObject *__pyx_v_tzinfo, int __pyx_v_fold, struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz_fold *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__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_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_replace_tz_fold", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }

  /* "utils.pxd":4118
 *     """
 *     # Validate
 *     if fold != 0 and fold != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))
 * 
*/
  switch (__pyx_v_fold) {
    case 0:
    case 1:
    __pyx_t_1 = 0;
    break;
    default:
    __pyx_t_1 = 1;
    break;
  }
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":4119
 *     # Validate
 *     if fold != 0 and fold != 1:
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))             # <<<<<<<<<<<<<<
 * 
 *     # Same tzinfo and fold
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_fold); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_fold_must_be_either_0_or_1_got_d, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __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(5, 4119, __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(5, 4119, __pyx_L1_error)

    /* "utils.pxd":4118
 *     """
 *     # Validate
 *     if fold != 0 and fold != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))
 * 
*/
  }

  /* "utils.pxd":4122
 * 
 *     # Same tzinfo and fold
 *     if tzinfo is dt.tzinfo and fold == dt.fold:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = (__pyx_v_tzinfo == __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_7) {
  } else {
    __pyx_t_1 = __pyx_t_7;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_fold == __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt));
  __pyx_t_1 = __pyx_t_7;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":4123
 *     # Same tzinfo and fold
 *     if tzinfo is dt.tzinfo and fold == dt.fold:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 1;
    __pyx_t_8.dtclass = __pyx_v_dtclass;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4123, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4122
 * 
 *     # Same tzinfo and fold
 *     if tzinfo is dt.tzinfo and fold == dt.fold:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4126
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, tzinfo, fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4128
 *     return dt_new(
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, tzinfo, fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_9.__pyx_n = 10;
  __pyx_t_9.year = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_9.month = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_9.day = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_t_9.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_9.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_9.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_t_9.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_9.tzinfo = __pyx_v_tzinfo;
  __pyx_t_9.fold = __pyx_v_fold;
  __pyx_t_9.dtclass = __pyx_v_dtclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4103
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz_fold(datetime.datetime dt, object tzinfo, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` and `fold` replaced `<'datetime.datetime'>`.
 * 
*/

  /* 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("cytimes.utils.dt_replace_tz_fold", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4131
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz(datetime.datetime dt, object tzinfo, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` replaced `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace_tz(PyDateTime_DateTime *__pyx_v_dt, PyObject *__pyx_v_tzinfo, struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_replace_tz", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }

  /* "utils.pxd":4145
 *     """
 *     # Same tzinfo
 *     if tzinfo is dt.tzinfo:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4145, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_v_tzinfo == __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {

    /* "utils.pxd":4146
 *     # Same tzinfo
 *     if tzinfo is dt.tzinfo:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4145
 *     """
 *     # Same tzinfo
 *     if tzinfo is dt.tzinfo:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4149
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, tzinfo, dt.fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4151
 *     return dt_new(
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, tzinfo, dt.fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_4.__pyx_n = 10;
  __pyx_t_4.year = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_4.month = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_4.day = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_t_4.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_4.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_4.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_t_4.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_4.tzinfo = __pyx_v_tzinfo;
  __pyx_t_4.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_t_4.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4131
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_tz(datetime.datetime dt, object tzinfo, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `tzinfo` replaced `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_replace_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4154
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_fold(datetime.datetime dt, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `fold` set to 0 or 1 `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_replace_fold(PyDateTime_DateTime *__pyx_v_dt, int __pyx_v_fold, struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__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;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_replace_fold", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }

  /* "utils.pxd":4168
 *     """
 *     # Validate
 *     if fold != 0 and fold != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))
 * 
*/
  switch (__pyx_v_fold) {
    case 0:
    case 1:
    __pyx_t_1 = 0;
    break;
    default:
    __pyx_t_1 = 1;
    break;
  }
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":4169
 *     # Validate
 *     if fold != 0 and fold != 1:
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: same fold
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_fold); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_fold_must_be_either_0_or_1_got_d, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __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(5, 4169, __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(5, 4169, __pyx_L1_error)

    /* "utils.pxd":4168
 *     """
 *     # Validate
 *     if fold != 0 and fold != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("fold must be either 0 or 1, got %d" % (fold))
 * 
*/
  }

  /* "utils.pxd":4172
 * 
 *     # Fast-path: same fold
 *     if fold == dt.fold:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_1 = (__pyx_v_fold == __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt));
  if (__pyx_t_1) {

    /* "utils.pxd":4173
 *     # Fast-path: same fold
 *     if fold == dt.fold:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # New datetime
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.dtclass = __pyx_v_dtclass;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4173, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4172
 * 
 *     # Fast-path: same fold
 *     if fold == dt.fold:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4176
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, fold, dtclass,
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4178
 *     return dt_new(
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, fold, dtclass,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "utils.pxd":4176
 * 
 *     # New datetime
 *     return dt_new(             # <<<<<<<<<<<<<<
 *         dt.year, dt.month, dt.day, dt.hour, dt.minute,
 *         dt.second, dt.microsecond, dt.tzinfo, fold, dtclass,
*/
  __pyx_t_8.__pyx_n = 10;
  __pyx_t_8.year = __pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt);
  __pyx_t_8.month = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_8.day = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);
  __pyx_t_8.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_8.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_8.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_t_8.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_8.tzinfo = __pyx_t_2;
  __pyx_t_8.fold = __pyx_v_fold;
  __pyx_t_8.dtclass = __pyx_v_dtclass;
  __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_8)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4154
 *     )
 * 
 * cdef inline datetime.datetime dt_replace_fold(datetime.datetime dt, int fold, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Create a copy of `dt` with `fold` set to 0 or 1 `<'datetime.datetime'>`.
 * 
*/

  /* 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("cytimes.utils.dt_replace_fold", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4182
 * 
 * # . check
 * cdef inline int dt_compare(datetime.datetime dt1, datetime.datetime dt2, bint allow_mixed = False) except -2:             # <<<<<<<<<<<<<<
 *     """Three-way comparison between two datetimes on a common microsecond timeline `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_compare(PyDateTime_DateTime *__pyx_v_dt1, PyDateTime_DateTime *__pyx_v_dt2, struct __pyx_opt_args_7cytimes_5utils_dt_compare *__pyx_optional_args) {
  int __pyx_v_allow_mixed = ((int)0);
  PyObject *__pyx_v_dt1_tz = 0;
  PyObject *__pyx_v_dt2_tz = 0;
  int __pyx_v_dt1_aware;
  int __pyx_v_dt2_aware;
  PY_LONG_LONG __pyx_v_dt1_us;
  PY_LONG_LONG __pyx_v_dt2_us;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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[8];
  PyObject *__pyx_t_9 = NULL;
  size_t __pyx_t_10;
  PY_LONG_LONG __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_us __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_compare", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_allow_mixed = __pyx_optional_args->allow_mixed;
    }
  }

  /* "utils.pxd":4208
 *     # Check tzinfo compatibility (Exactly one is naive  mixed)
 *     cdef:
 *         object dt1_tz = dt1.tzinfo             # <<<<<<<<<<<<<<
 *         object dt2_tz = dt2.tzinfo
 *         bint dt1_aware = dt1_tz is not None
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dt1_tz = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "utils.pxd":4209
 *     cdef:
 *         object dt1_tz = dt1.tzinfo
 *         object dt2_tz = dt2.tzinfo             # <<<<<<<<<<<<<<
 *         bint dt1_aware = dt1_tz is not None
 *         bint dt2_aware = dt2_tz is not None
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4209, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dt2_tz = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "utils.pxd":4210
 *         object dt1_tz = dt1.tzinfo
 *         object dt2_tz = dt2.tzinfo
 *         bint dt1_aware = dt1_tz is not None             # <<<<<<<<<<<<<<
 *         bint dt2_aware = dt2_tz is not None
 *     if dt1_aware != dt2_aware:
*/
  __pyx_t_2 = (__pyx_v_dt1_tz != Py_None);
  __pyx_v_dt1_aware = __pyx_t_2;

  /* "utils.pxd":4211
 *         object dt2_tz = dt2.tzinfo
 *         bint dt1_aware = dt1_tz is not None
 *         bint dt2_aware = dt2_tz is not None             # <<<<<<<<<<<<<<
 *     if dt1_aware != dt2_aware:
 *         if allow_mixed:
*/
  __pyx_t_2 = (__pyx_v_dt2_tz != Py_None);
  __pyx_v_dt2_aware = __pyx_t_2;

  /* "utils.pxd":4212
 *         bint dt1_aware = dt1_tz is not None
 *         bint dt2_aware = dt2_tz is not None
 *     if dt1_aware != dt2_aware:             # <<<<<<<<<<<<<<
 *         if allow_mixed:
 *             return 2
*/
  __pyx_t_2 = (__pyx_v_dt1_aware != __pyx_v_dt2_aware);
  if (__pyx_t_2) {

    /* "utils.pxd":4213
 *         bint dt2_aware = dt2_tz is not None
 *     if dt1_aware != dt2_aware:
 *         if allow_mixed:             # <<<<<<<<<<<<<<
 *             return 2
 *         raise TypeError(
*/
    if (__pyx_v_allow_mixed) {

      /* "utils.pxd":4214
 *     if dt1_aware != dt2_aware:
 *         if allow_mixed:
 *             return 2             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Cannot compare naive and aware datetimes:\n"
*/
      __pyx_r = 2;
      goto __pyx_L0;

      /* "utils.pxd":4213
 *         bint dt2_aware = dt2_tz is not None
 *     if dt1_aware != dt2_aware:
 *         if allow_mixed:             # <<<<<<<<<<<<<<
 *             return 2
 *         raise TypeError(
*/
    }

    /* "utils.pxd":4215
 *         if allow_mixed:
 *             return 2
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Cannot compare naive and aware datetimes:\n"
 *             "  - datetime1: '%s' %s\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":4218
 *             "Cannot compare naive and aware datetimes:\n"
 *             "  - datetime1: '%s' %s\n"
 *             "  - datetime2: '%s' %s" % (dt1, type(dt1), dt2, type(dt2))             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)__pyx_v_dt1)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_dt1)))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)__pyx_v_dt2)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_dt2)))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4218, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_naive_and_aware_d;
    __pyx_t_8[1] = __pyx_t_4;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_8[3] = __pyx_t_5;
    __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_datetime2;
    __pyx_t_8[5] = __pyx_t_6;
    __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_8[7] = __pyx_t_7;

    /* "utils.pxd":4216
 *             return 2
 *         raise TypeError(
 *             "Cannot compare naive and aware datetimes:\n"             # <<<<<<<<<<<<<<
 *             "  - datetime1: '%s' %s\n"
 *             "  - datetime2: '%s' %s" % (dt1, type(dt1), dt2, type(dt2))
*/
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 8, 58 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 2 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __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_t_10 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_9};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (__pyx_t_10*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4215, __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(5, 4215, __pyx_L1_error)

    /* "utils.pxd":4212
 *         bint dt1_aware = dt1_tz is not None
 *         bint dt2_aware = dt2_tz is not None
 *     if dt1_aware != dt2_aware:             # <<<<<<<<<<<<<<
 *         if allow_mixed:
 *             return 2
*/
  }

  /* "utils.pxd":4222
 * 
 *     # Compare in microseconds
 *     cdef long long dt1_us = dt_to_us(dt1, dt1_aware)             # <<<<<<<<<<<<<<
 *     cdef long long dt2_us = dt_to_us(dt2, dt2_aware)
 *     if dt1_us > dt2_us:
*/
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.utc = __pyx_v_dt1_aware;
  __pyx_t_11 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt1, &__pyx_t_12); if (unlikely(__pyx_t_11 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4222, __pyx_L1_error)
  __pyx_v_dt1_us = __pyx_t_11;

  /* "utils.pxd":4223
 *     # Compare in microseconds
 *     cdef long long dt1_us = dt_to_us(dt1, dt1_aware)
 *     cdef long long dt2_us = dt_to_us(dt2, dt2_aware)             # <<<<<<<<<<<<<<
 *     if dt1_us > dt2_us:
 *         return 1
*/
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.utc = __pyx_v_dt2_aware;
  __pyx_t_11 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt2, &__pyx_t_12); if (unlikely(__pyx_t_11 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4223, __pyx_L1_error)
  __pyx_v_dt2_us = __pyx_t_11;

  /* "utils.pxd":4224
 *     cdef long long dt1_us = dt_to_us(dt1, dt1_aware)
 *     cdef long long dt2_us = dt_to_us(dt2, dt2_aware)
 *     if dt1_us > dt2_us:             # <<<<<<<<<<<<<<
 *         return 1
 *     elif dt1_us < dt2_us:
*/
  __pyx_t_2 = (__pyx_v_dt1_us > __pyx_v_dt2_us);
  if (__pyx_t_2) {

    /* "utils.pxd":4225
 *     cdef long long dt2_us = dt_to_us(dt2, dt2_aware)
 *     if dt1_us > dt2_us:
 *         return 1             # <<<<<<<<<<<<<<
 *     elif dt1_us < dt2_us:
 *         return -1
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "utils.pxd":4224
 *     cdef long long dt1_us = dt_to_us(dt1, dt1_aware)
 *     cdef long long dt2_us = dt_to_us(dt2, dt2_aware)
 *     if dt1_us > dt2_us:             # <<<<<<<<<<<<<<
 *         return 1
 *     elif dt1_us < dt2_us:
*/
  }

  /* "utils.pxd":4226
 *     if dt1_us > dt2_us:
 *         return 1
 *     elif dt1_us < dt2_us:             # <<<<<<<<<<<<<<
 *         return -1
 *     else:
*/
  __pyx_t_2 = (__pyx_v_dt1_us < __pyx_v_dt2_us);
  if (__pyx_t_2) {

    /* "utils.pxd":4227
 *         return 1
 *     elif dt1_us < dt2_us:
 *         return -1             # <<<<<<<<<<<<<<
 *     else:
 *         return 0
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "utils.pxd":4226
 *     if dt1_us > dt2_us:
 *         return 1
 *     elif dt1_us < dt2_us:             # <<<<<<<<<<<<<<
 *         return -1
 *     else:
*/
  }

  /* "utils.pxd":4229
 *         return -1
 *     else:
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_first_doy(datetime.datetime dt) noexcept:
*/
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":4182
 * 
 * # . check
 * cdef inline int dt_compare(datetime.datetime dt1, datetime.datetime dt2, bint allow_mixed = False) except -2:             # <<<<<<<<<<<<<<
 *     """Three-way comparison between two datetimes on a common microsecond timeline `<'int'>`.
 * 
*/

  /* 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_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.dt_compare", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_dt1_tz);
  __Pyx_XDECREF(__pyx_v_dt2_tz);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4231
 *         return 0
 * 
 * cdef inline bint dt_is_first_doy(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its year `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_first_doy(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":4239
 *     :returns `<'bool'>`: True if the datetime is January 1 of its year; Otherwiase False.
 *     """
 *     return dt.month == 1 and dt.day == 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_last_doy(datetime.datetime dt) noexcept:
*/
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt) == 1);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt) == 1);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":4231
 *         return 0
 * 
 * cdef inline bint dt_is_first_doy(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its year `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4241
 *     return dt.month == 1 and dt.day == 1
 * 
 * cdef inline bint dt_is_last_doy(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its year `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_last_doy(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":4249
 *     :returns `<'bool'>`: True if the datetime is December 31 of its year; Otherwiase False.
 *     """
 *     return dt.month == 12 and dt.day == 31             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_first_doq(datetime.datetime dt) noexcept:
*/
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt) == 12);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt) == 31);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":4241
 *     return dt.month == 1 and dt.day == 1
 * 
 * cdef inline bint dt_is_last_doy(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its year `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4251
 *     return dt.month == 12 and dt.day == 31
 * 
 * cdef inline bint dt_is_first_doq(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its quarter `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_first_doq(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;

  /* "utils.pxd":4259
 *     :returns `<'bool'>`: True if the datetime is the first day of its quarter; Otherwiase False.
 *     """
 *     return dt.day == 1 and dt.month in (1, 4, 7, 10)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_last_doq(datetime.datetime dt) noexcept:
*/
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt) == 1);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_3 = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);
  __pyx_t_4 = (__pyx_t_3 == 1);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_t_3 == 4);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_t_3 == 7);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_4 = (__pyx_t_3 == 10);
  __pyx_t_2 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;
  __pyx_t_4 = __pyx_t_2;
  __pyx_t_1 = __pyx_t_4;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":4251
 *     return dt.month == 12 and dt.day == 31
 * 
 * cdef inline bint dt_is_first_doq(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its quarter `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4261
 *     return dt.day == 1 and dt.month in (1, 4, 7, 10)
 * 
 * cdef inline bint dt_is_last_doq(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its quarter `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_last_doq(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_v_dd;
  int __pyx_v_mm;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":4269
 *     :returns `<'bool'>`: True if the datetime is the last day of its quarter; Otherwiase False.
 *     """
 *     cdef int dd = dt.day             # <<<<<<<<<<<<<<
 *     if dd < 30:
 *         return False
*/
  __pyx_v_dd = __pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt);

  /* "utils.pxd":4270
 *     """
 *     cdef int dd = dt.day
 *     if dd < 30:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef int mm = dt.month
*/
  __pyx_t_1 = (__pyx_v_dd < 30);
  if (__pyx_t_1) {

    /* "utils.pxd":4271
 *     cdef int dd = dt.day
 *     if dd < 30:
 *         return False             # <<<<<<<<<<<<<<
 *     cdef int mm = dt.month
 *     if mm not in (3, 6, 9, 12):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":4270
 *     """
 *     cdef int dd = dt.day
 *     if dd < 30:             # <<<<<<<<<<<<<<
 *         return False
 *     cdef int mm = dt.month
*/
  }

  /* "utils.pxd":4272
 *     if dd < 30:
 *         return False
 *     cdef int mm = dt.month             # <<<<<<<<<<<<<<
 *     if mm not in (3, 6, 9, 12):
 *         return False
*/
  __pyx_v_mm = __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt);

  /* "utils.pxd":4273
 *         return False
 *     cdef int mm = dt.month
 *     if mm not in (3, 6, 9, 12):             # <<<<<<<<<<<<<<
 *         return False
 *     return dd == days_in_month(dt.year, mm)
*/
  switch (__pyx_v_mm) {
    case 3:
    case 6:
    case 9:
    case 12:
    __pyx_t_1 = 0;
    break;
    default:
    __pyx_t_1 = 1;
    break;
  }
  __pyx_t_2 = __pyx_t_1;
  if (__pyx_t_2) {

    /* "utils.pxd":4274
 *     cdef int mm = dt.month
 *     if mm not in (3, 6, 9, 12):
 *         return False             # <<<<<<<<<<<<<<
 *     return dd == days_in_month(dt.year, mm)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "utils.pxd":4273
 *         return False
 *     cdef int mm = dt.month
 *     if mm not in (3, 6, 9, 12):             # <<<<<<<<<<<<<<
 *         return False
 *     return dd == days_in_month(dt.year, mm)
*/
  }

  /* "utils.pxd":4275
 *     if mm not in (3, 6, 9, 12):
 *         return False
 *     return dd == days_in_month(dt.year, mm)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_first_dom(datetime.datetime dt) noexcept:
*/
  __pyx_r = (__pyx_v_dd == __pyx_f_7cytimes_5utils_days_in_month(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), __pyx_v_mm));
  goto __pyx_L0;

  /* "utils.pxd":4261
 *     return dt.day == 1 and dt.month in (1, 4, 7, 10)
 * 
 * cdef inline bint dt_is_last_doq(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its quarter `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4277
 *     return dd == days_in_month(dt.year, mm)
 * 
 * cdef inline bint dt_is_first_dom(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its month `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_first_dom(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;

  /* "utils.pxd":4285
 *     :returns `<'bool'>`: True if the datetime is the first day of its month; Otherwiase False.
 *     """
 *     return dt.day == 1             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_last_dom(datetime.datetime dt) noexcept:
*/
  __pyx_r = (__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt) == 1);
  goto __pyx_L0;

  /* "utils.pxd":4277
 *     return dd == days_in_month(dt.year, mm)
 * 
 * cdef inline bint dt_is_first_dom(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the first day of its month `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4287
 *     return dt.day == 1
 * 
 * cdef inline bint dt_is_last_dom(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its month `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_last_dom(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;

  /* "utils.pxd":4295
 *     :returns `<'bool'>`: True if the datetime is the last day of its month; Otherwiase False.
 *     """
 *     return dt.day == days_in_month(dt.year, dt.month)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_start_of_time(datetime.datetime dt) noexcept:
*/
  __pyx_r = (__pyx_f_7cpython_8datetime_8datetime_3day_day(__pyx_v_dt) == __pyx_f_7cytimes_5utils_days_in_month(__pyx_f_7cpython_8datetime_8datetime_4year_year(__pyx_v_dt), __pyx_f_7cpython_8datetime_8datetime_5month_month(__pyx_v_dt)));
  goto __pyx_L0;

  /* "utils.pxd":4287
 *     return dt.day == 1
 * 
 * cdef inline bint dt_is_last_dom(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is on the last day of its month `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4297
 *     return dt.day == days_in_month(dt.year, dt.month)
 * 
 * cdef inline bint dt_is_start_of_time(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is at the start of time `<'bool'>`:
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_start_of_time(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":4305
 *     :returns `<'bool'>`: True if datetime is at the start of time; Otherwise False.
 *     """
 *     return dt.hour == 0 and dt.minute == 0 and dt.second == 0 and dt.microsecond == 0             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint dt_is_end_of_time(datetime.datetime dt) noexcept:
*/
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt) == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt) == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt) == 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt) == 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":4297
 *     return dt.day == days_in_month(dt.year, dt.month)
 * 
 * cdef inline bint dt_is_start_of_time(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is at the start of time `<'bool'>`:
 * 
*/

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

/* "utils.pxd":4307
 *     return dt.hour == 0 and dt.minute == 0 and dt.second == 0 and dt.microsecond == 0
 * 
 * cdef inline bint dt_is_end_of_time(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is at the end of time `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_dt_is_end_of_time(PyDateTime_DateTime *__pyx_v_dt) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "utils.pxd":4315
 *     :returns `<'bool'>`: True if datetime is at the end of time; Otherwise False.
 *     """
 *     return dt.hour == 23 and dt.minute == 59 and dt.second == 59 and dt.microsecond == 999_999             # <<<<<<<<<<<<<<
 * 
 * # . tzinfo
*/
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt) == 23);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt) == 59);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt) == 59);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt) == 0xF423F);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "utils.pxd":4307
 *     return dt.hour == 0 and dt.minute == 0 and dt.second == 0 and dt.microsecond == 0
 * 
 * cdef inline bint dt_is_end_of_time(datetime.datetime dt) noexcept:             # <<<<<<<<<<<<<<
 *     """Check whether the datetime is at the end of time `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4318
 * 
 * # . tzinfo
 * cdef inline str dt_tzname(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the display name of a datetime's timezone `<'str/None'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_dt_tzname(PyDateTime_DateTime *__pyx_v_dt) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_name __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_tzname", 0);

  /* "utils.pxd":4328
 *     >>> dt.tzname()
 *     """
 *     return tz_name(dt.tzinfo, dt)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta dt_dst(datetime.datetime dt):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.dt = __pyx_v_dt;
  __pyx_t_2 = __pyx_f_7cytimes_5utils_tz_name(__pyx_t_1, &__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4328, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4318
 * 
 * # . tzinfo
 * cdef inline str dt_tzname(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the display name of a datetime's timezone `<'str/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_tzname", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4330
 *     return tz_name(dt.tzinfo, dt)
 * 
 * cdef inline datetime.timedelta dt_dst(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the DST offset of a datetime's timezone `<'timedelta/None'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_dt_dst(PyDateTime_DateTime *__pyx_v_dt) {
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_dst __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_dst", 0);

  /* "utils.pxd":4340
 *     >>> dt.dst()
 *     """
 *     return tz_dst(dt.tzinfo, dt)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta dt_utcoffset(datetime.datetime dt):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.dt = __pyx_v_dt;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_dst(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4330
 *     return tz_name(dt.tzinfo, dt)
 * 
 * cdef inline datetime.timedelta dt_dst(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the DST offset of a datetime's timezone `<'timedelta/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_dst", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4342
 *     return tz_dst(dt.tzinfo, dt)
 * 
 * cdef inline datetime.timedelta dt_utcoffset(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset of a datetime's timezone `<'timedelta/None'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_dt_utcoffset(PyDateTime_DateTime *__pyx_v_dt) {
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_utcoffset", 0);

  /* "utils.pxd":4352
 *     >>> dt.utcoffset()
 *     """
 *     return tz_utcoffset(dt.tzinfo, dt)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_astimezone(datetime.datetime dt, object tzinfo=None, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.dt = __pyx_v_dt;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4342
 *     return tz_dst(dt.tzinfo, dt)
 * 
 * cdef inline datetime.timedelta dt_utcoffset(datetime.datetime dt):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset of a datetime's timezone `<'timedelta/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.dt_utcoffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4354
 *     return tz_utcoffset(dt.tzinfo, dt)
 * 
 * cdef inline datetime.datetime dt_astimezone(datetime.datetime dt, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to another timezone `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_astimezone(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_astimezone *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_my_tz = 0;
  PyObject *__pyx_v_to_tz = 0;
  PyDateTime_Delta *__pyx_v_my_off = 0;
  PY_LONG_LONG __pyx_v_us;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_dt_replace_tz __pyx_t_3;
  int __pyx_t_4;
  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;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __pyx_t_12;
  PY_LONG_LONG __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_us __pyx_t_14;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_us __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_astimezone", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":4386
 *     """
 *     cdef:
 *         object my_tz = datetime.datetime_tzinfo(dt)             # <<<<<<<<<<<<<<
 *         object to_tz = tzinfo
 *         datetime.timedelta my_off
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_datetime_tzinfo(((PyObject *)__pyx_v_dt)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4386, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_my_tz = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "utils.pxd":4387
 *     cdef:
 *         object my_tz = datetime.datetime_tzinfo(dt)
 *         object to_tz = tzinfo             # <<<<<<<<<<<<<<
 *         datetime.timedelta my_off
 * 
*/
  __Pyx_INCREF(__pyx_v_tzinfo);
  __pyx_v_to_tz = __pyx_v_tzinfo;

  /* "utils.pxd":4391
 * 
 *     # Resolve target tzinfo
 *     if to_tz is None:             # <<<<<<<<<<<<<<
 *         to_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
*/
  __pyx_t_2 = (__pyx_v_to_tz == Py_None);
  if (__pyx_t_2) {

    /* "utils.pxd":4392
 *     # Resolve target tzinfo
 *     if to_tz is None:
 *         to_tz = tz_local()             # <<<<<<<<<<<<<<
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is None:
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_tz_local(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_to_tz, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":4394
 *         to_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is None:             # <<<<<<<<<<<<<<
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *     elif not is_tz(to_tz):
*/
    __pyx_t_2 = (__pyx_v_my_tz == Py_None);
    if (__pyx_t_2) {

      /* "utils.pxd":4395
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is None:
 *             return dt_replace_tz(dt, to_tz, dtclass)             # <<<<<<<<<<<<<<
 *     elif not is_tz(to_tz):
 *         raise TypeError(
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_3.__pyx_n = 1;
      __pyx_t_3.dtclass = __pyx_v_dtclass;
      __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_replace_tz(__pyx_v_dt, __pyx_v_to_tz, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L0;

      /* "utils.pxd":4394
 *         to_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is None:             # <<<<<<<<<<<<<<
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *     elif not is_tz(to_tz):
*/
    }

    /* "utils.pxd":4391
 * 
 *     # Resolve target tzinfo
 *     if to_tz is None:             # <<<<<<<<<<<<<<
 *         to_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":4396
 *         if my_tz is None:
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *     elif not is_tz(to_tz):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'datetime.tzinfo', "
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_tz(__pyx_v_to_tz); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 4396, __pyx_L1_error)
  __pyx_t_4 = (!__pyx_t_2);
  if (unlikely(__pyx_t_4)) {

    /* "utils.pxd":4397
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *     elif not is_tz(to_tz):
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Expects an instance of 'datetime.tzinfo', "
 *             "instead got '%s' %s." % (to_tz, type(to_tz))
*/
    __pyx_t_5 = NULL;

    /* "utils.pxd":4399
 *         raise TypeError(
 *             "Expects an instance of 'datetime.tzinfo', "
 *             "instead got '%s' %s." % (to_tz, type(to_tz))             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_to_tz), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_to_tz))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4399, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_datetime;
    __pyx_t_8[1] = __pyx_t_6;
    __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_8[3] = __pyx_t_7;
    __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "utils.pxd":4398
 *     elif not is_tz(to_tz):
 *         raise TypeError(
 *             "Expects an instance of 'datetime.tzinfo', "             # <<<<<<<<<<<<<<
 *             "instead got '%s' %s." % (to_tz, type(to_tz))
 *         )
*/
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 5, 55 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4398, __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_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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_1)) __PYX_ERR(5, 4397, __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(5, 4397, __pyx_L1_error)

    /* "utils.pxd":4396
 *         if my_tz is None:
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *     elif not is_tz(to_tz):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'datetime.tzinfo', "
*/
  }
  __pyx_L3:;

  /* "utils.pxd":4403
 * 
 *     # Fast-exit: exact same tzinfo
 *     if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_4 = (__pyx_v_my_tz == __pyx_v_to_tz);
  if (__pyx_t_4) {

    /* "utils.pxd":4404
 *     # Fast-exit: exact same tzinfo
 *     if my_tz is to_tz:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # Naive datetime cases
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 1;
    __pyx_t_11.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4404, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4403
 * 
 *     # Fast-exit: exact same tzinfo
 *     if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4407
 * 
 *     # Naive datetime cases
 *     if my_tz is None:             # <<<<<<<<<<<<<<
 *         my_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
*/
  __pyx_t_4 = (__pyx_v_my_tz == Py_None);
  if (__pyx_t_4) {

    /* "utils.pxd":4408
 *     # Naive datetime cases
 *     if my_tz is None:
 *         my_tz = tz_local()             # <<<<<<<<<<<<<<
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is to_tz:
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_tz_local(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_my_tz, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":4410
 *         my_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *         # Access local UTC offset (my_off is local)
*/
    __pyx_t_4 = (__pyx_v_my_tz == __pyx_v_to_tz);
    if (__pyx_t_4) {

      /* "utils.pxd":4411
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is to_tz:
 *             return dt_replace_tz(dt, to_tz, dtclass)             # <<<<<<<<<<<<<<
 *         # Access local UTC offset (my_off is local)
 *         my_off = tz_utcoffset(my_tz, dt)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_3.__pyx_n = 1;
      __pyx_t_3.dtclass = __pyx_v_dtclass;
      __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_replace_tz(__pyx_v_dt, __pyx_v_to_tz, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4411, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
      __pyx_t_1 = 0;
      goto __pyx_L0;

      /* "utils.pxd":4410
 *         my_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
 *         if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *         # Access local UTC offset (my_off is local)
*/
    }

    /* "utils.pxd":4413
 *             return dt_replace_tz(dt, to_tz, dtclass)
 *         # Access local UTC offset (my_off is local)
 *         my_off = tz_utcoffset(my_tz, dt)             # <<<<<<<<<<<<<<
 * 
 *     # Aware datetime case: handle no-offset tzinfo
*/
    __pyx_t_12.__pyx_n = 1;
    __pyx_t_12.dt = __pyx_v_dt;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_my_tz, &__pyx_t_12)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4413, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_my_off = ((PyDateTime_Delta *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":4407
 * 
 *     # Naive datetime cases
 *     if my_tz is None:             # <<<<<<<<<<<<<<
 *         my_tz = tz_local()
 *         # Fast-exit: naive + local -> localize
*/
    goto __pyx_L6;
  }

  /* "utils.pxd":4418
 *     # by using local tzinfo fallback (CPython pattern)
 *     else:
 *         my_off = tz_utcoffset(my_tz, dt)             # <<<<<<<<<<<<<<
 *         if my_off is None:
 *             my_tz = tz_local()
*/
  /*else*/ {
    __pyx_t_12.__pyx_n = 1;
    __pyx_t_12.dt = __pyx_v_dt;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_my_tz, &__pyx_t_12)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4418, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_my_off = ((PyDateTime_Delta *)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "utils.pxd":4419
 *     else:
 *         my_off = tz_utcoffset(my_tz, dt)
 *         if my_off is None:             # <<<<<<<<<<<<<<
 *             my_tz = tz_local()
 *             # Fast-exit: exact same tzinfo
*/
    __pyx_t_4 = (((PyObject *)__pyx_v_my_off) == Py_None);
    if (__pyx_t_4) {

      /* "utils.pxd":4420
 *         my_off = tz_utcoffset(my_tz, dt)
 *         if my_off is None:
 *             my_tz = tz_local()             # <<<<<<<<<<<<<<
 *             # Fast-exit: exact same tzinfo
 *             if my_tz is to_tz:
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils_tz_local(NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4420, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_my_tz, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "utils.pxd":4422
 *             my_tz = tz_local()
 *             # Fast-exit: exact same tzinfo
 *             if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *                 return dt_fr_dt(dt, dtclass)
 *             # Access local UTC offset (my_off is local)
*/
      __pyx_t_4 = (__pyx_v_my_tz == __pyx_v_to_tz);
      if (__pyx_t_4) {

        /* "utils.pxd":4423
 *             # Fast-exit: exact same tzinfo
 *             if my_tz is to_tz:
 *                 return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 *             # Access local UTC offset (my_off is local)
 *             my_off = tz_utcoffset(my_tz, dt)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_11.__pyx_n = 1;
        __pyx_t_11.dtclass = __pyx_v_dtclass;
        __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4423, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
        __pyx_t_1 = 0;
        goto __pyx_L0;

        /* "utils.pxd":4422
 *             my_tz = tz_local()
 *             # Fast-exit: exact same tzinfo
 *             if my_tz is to_tz:             # <<<<<<<<<<<<<<
 *                 return dt_fr_dt(dt, dtclass)
 *             # Access local UTC offset (my_off is local)
*/
      }

      /* "utils.pxd":4425
 *                 return dt_fr_dt(dt, dtclass)
 *             # Access local UTC offset (my_off is local)
 *             my_off = tz_utcoffset(my_tz, dt)             # <<<<<<<<<<<<<<
 * 
 *     # Convert to UTC microseconds, then attach tzinfo and normalize via fromutc
*/
      __pyx_t_12.__pyx_n = 1;
      __pyx_t_12.dt = __pyx_v_dt;
      __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_my_tz, &__pyx_t_12)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF_SET(__pyx_v_my_off, ((PyDateTime_Delta *)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "utils.pxd":4419
 *     else:
 *         my_off = tz_utcoffset(my_tz, dt)
 *         if my_off is None:             # <<<<<<<<<<<<<<
 *             my_tz = tz_local()
 *             # Fast-exit: exact same tzinfo
*/
    }
  }
  __pyx_L6:;

  /* "utils.pxd":4428
 * 
 *     # Convert to UTC microseconds, then attach tzinfo and normalize via fromutc
 *     cdef long long us = dt_to_us(dt, False) - td_to_us(my_off)             # <<<<<<<<<<<<<<
 *     return to_tz.fromutc(dt_fr_us(us, to_tz, dtclass))
 * 
*/
  __pyx_t_14.__pyx_n = 1;
  __pyx_t_14.utc = 0;
  __pyx_t_13 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt, &__pyx_t_14); if (unlikely(__pyx_t_13 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4428, __pyx_L1_error)
  __pyx_v_us = (__pyx_t_13 - __pyx_f_7cytimes_5utils_td_to_us(__pyx_v_my_off));

  /* "utils.pxd":4429
 *     # Convert to UTC microseconds, then attach tzinfo and normalize via fromutc
 *     cdef long long us = dt_to_us(dt, False) - td_to_us(my_off)
 *     return to_tz.fromutc(dt_fr_us(us, to_tz, dtclass))             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt_normalize_tz(datetime.datetime dt, object dtclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_9 = __pyx_v_to_tz;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_15.__pyx_n = 2;
  __pyx_t_15.tzinfo = __pyx_v_to_tz;
  __pyx_t_15.dtclass = __pyx_v_dtclass;
  __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_us(__pyx_v_us, &__pyx_t_15)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4429, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_fromutc, __pyx_callargs+__pyx_t_10, (2-__pyx_t_10) | (1*__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_1)) __PYX_ERR(5, 4429, __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_7cpython_8datetime_datetime))))) __PYX_ERR(5, 4429, __pyx_L1_error)
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4354
 *     return tz_utcoffset(dt.tzinfo, dt)
 * 
 * cdef inline datetime.datetime dt_astimezone(datetime.datetime dt, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.datetime` to another timezone `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.dt_astimezone", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_my_tz);
  __Pyx_XDECREF(__pyx_v_to_tz);
  __Pyx_XDECREF((PyObject *)__pyx_v_my_off);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4431
 *     return to_tz.fromutc(dt_fr_us(us, to_tz, dtclass))
 * 
 * cdef inline datetime.datetime dt_normalize_tz(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Normalize an aware datetime against its own tzinfo `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt_normalize_tz(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_dt_normalize_tz *__pyx_optional_args) {
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_tzinfo = 0;
  int __pyx_v_fold;
  PY_LONG_LONG __pyx_v_off_f0;
  PY_LONG_LONG __pyx_v_off_f1;
  PY_LONG_LONG __pyx_v_delta;
  PY_LONG_LONG __pyx_v_us;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold __pyx_t_4;
  int __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset_sec __pyx_t_6;
  int __pyx_t_7;
  PY_LONG_LONG __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_us __pyx_t_9;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_us __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt_normalize_tz", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dtclass = __pyx_optional_args->dtclass;
    }
  }

  /* "utils.pxd":4453
 *     """
 *     # Timezone-naive: no-op
 *     cdef object tzinfo = dt.tzinfo             # <<<<<<<<<<<<<<
 *     if tzinfo is None:
 *         return dt_fr_dt(dt, dtclass)
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_tzinfo = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "utils.pxd":4454
 *     # Timezone-naive: no-op
 *     cdef object tzinfo = dt.tzinfo
 *     if tzinfo is None:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_2 = (__pyx_v_tzinfo == Py_None);
  if (__pyx_t_2) {

    /* "utils.pxd":4455
 *     cdef object tzinfo = dt.tzinfo
 *     if tzinfo is None:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # Probe offsets at both folds around the same wall time
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4454
 *     # Timezone-naive: no-op
 *     cdef object tzinfo = dt.tzinfo
 *     if tzinfo is None:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4458
 * 
 *     # Probe offsets at both folds around the same wall time
 *     cdef int fold = dt.fold             # <<<<<<<<<<<<<<
 *     cdef long long off_f0, off_f1
 *     if fold == 1:
*/
  __pyx_v_fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);

  /* "utils.pxd":4460
 *     cdef int fold = dt.fold
 *     cdef long long off_f0, off_f1
 *     if fold == 1:             # <<<<<<<<<<<<<<
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 0, None))
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt)
*/
  __pyx_t_2 = (__pyx_v_fold == 1);
  if (__pyx_t_2) {

    /* "utils.pxd":4461
 *     cdef long long off_f0, off_f1
 *     if fold == 1:
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 0, None))             # <<<<<<<<<<<<<<
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt)
 *     else:
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dtclass = Py_None;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_replace_fold(__pyx_v_dt, 0, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4461, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.dt = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_5 = __pyx_f_7cytimes_5utils_tz_utcoffset_sec(__pyx_v_tzinfo, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-200000))) __PYX_ERR(5, 4461, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_off_f0 = __pyx_t_5;

    /* "utils.pxd":4462
 *     if fold == 1:
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 0, None))
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt)             # <<<<<<<<<<<<<<
 *     else:
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt)
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.dt = __pyx_v_dt;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_tz_utcoffset_sec(__pyx_v_tzinfo, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-200000))) __PYX_ERR(5, 4462, __pyx_L1_error)
    __pyx_v_off_f1 = __pyx_t_5;

    /* "utils.pxd":4460
 *     cdef int fold = dt.fold
 *     cdef long long off_f0, off_f1
 *     if fold == 1:             # <<<<<<<<<<<<<<
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 0, None))
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt)
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":4464
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt)
 *     else:
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt)             # <<<<<<<<<<<<<<
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 1, None))
 * 
*/
  /*else*/ {
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.dt = __pyx_v_dt;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_tz_utcoffset_sec(__pyx_v_tzinfo, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-200000))) __PYX_ERR(5, 4464, __pyx_L1_error)
    __pyx_v_off_f0 = __pyx_t_5;

    /* "utils.pxd":4465
 *     else:
 *         off_f0 = tz_utcoffset_sec(tzinfo, dt)
 *         off_f1 = tz_utcoffset_sec(tzinfo, dt_replace_fold(dt, 1, None))             # <<<<<<<<<<<<<<
 * 
 *     # There is no positive delta or either offset is
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dtclass = Py_None;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_replace_fold(__pyx_v_dt, 1, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.dt = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_5 = __pyx_f_7cytimes_5utils_tz_utcoffset_sec(__pyx_v_tzinfo, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-200000))) __PYX_ERR(5, 4465, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_off_f1 = __pyx_t_5;
  }
  __pyx_L4:;

  /* "utils.pxd":4469
 *     # There is no positive delta or either offset is
 *     # unknown (sentinel = -100,000); return as-is.
 *     cdef long long delta = off_f1 - off_f0             # <<<<<<<<<<<<<<
 *     if delta <= 0 or off_f0 == NULL_TZOFFSET or off_f1 == NULL_TZOFFSET:
 *         return dt_fr_dt(dt, dtclass)
*/
  __pyx_v_delta = (__pyx_v_off_f1 - __pyx_v_off_f0);

  /* "utils.pxd":4470
 *     # unknown (sentinel = -100,000); return as-is.
 *     cdef long long delta = off_f1 - off_f0
 *     if delta <= 0 or off_f0 == NULL_TZOFFSET or off_f1 == NULL_TZOFFSET:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  __pyx_t_7 = (__pyx_v_delta <= 0);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_off_f0 == __pyx_v_7cytimes_5utils_NULL_TZOFFSET);
  if (!__pyx_t_7) {
  } else {
    __pyx_t_2 = __pyx_t_7;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_7 = (__pyx_v_off_f1 == __pyx_v_7cytimes_5utils_NULL_TZOFFSET);
  __pyx_t_2 = __pyx_t_7;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_2) {

    /* "utils.pxd":4471
 *     cdef long long delta = off_f1 - off_f0
 *     if delta <= 0 or off_f0 == NULL_TZOFFSET or off_f1 == NULL_TZOFFSET:
 *         return dt_fr_dt(dt, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # Gap: apply  depending on which side of the gap
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.dtclass = __pyx_v_dtclass;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(__pyx_v_dt, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4470
 *     # unknown (sentinel = -100,000); return as-is.
 *     cdef long long delta = off_f1 - off_f0
 *     if delta <= 0 or off_f0 == NULL_TZOFFSET or off_f1 == NULL_TZOFFSET:             # <<<<<<<<<<<<<<
 *         return dt_fr_dt(dt, dtclass)
 * 
*/
  }

  /* "utils.pxd":4475
 *     # Gap: apply  depending on which side of the gap
 *     # the input fold denotes
 *     cdef long long us = dt_to_us(dt, False)             # <<<<<<<<<<<<<<
 *     if fold == 1:
 *         us += delta * US_SECOND
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.utc = 0;
  __pyx_t_8 = __pyx_f_7cytimes_5utils_dt_to_us(__pyx_v_dt, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4475, __pyx_L1_error)
  __pyx_v_us = __pyx_t_8;

  /* "utils.pxd":4476
 *     # the input fold denotes
 *     cdef long long us = dt_to_us(dt, False)
 *     if fold == 1:             # <<<<<<<<<<<<<<
 *         us += delta * US_SECOND
 *     else:
*/
  __pyx_t_2 = (__pyx_v_fold == 1);
  if (__pyx_t_2) {

    /* "utils.pxd":4477
 *     cdef long long us = dt_to_us(dt, False)
 *     if fold == 1:
 *         us += delta * US_SECOND             # <<<<<<<<<<<<<<
 *     else:
 *         us -= delta * US_SECOND
*/
    __pyx_v_us = (__pyx_v_us + (__pyx_v_delta * __pyx_v_7cytimes_5utils_US_SECOND));

    /* "utils.pxd":4476
 *     # the input fold denotes
 *     cdef long long us = dt_to_us(dt, False)
 *     if fold == 1:             # <<<<<<<<<<<<<<
 *         us += delta * US_SECOND
 *     else:
*/
    goto __pyx_L9;
  }

  /* "utils.pxd":4479
 *         us += delta * US_SECOND
 *     else:
 *         us -= delta * US_SECOND             # <<<<<<<<<<<<<<
 *     return dt_fr_us(us, tzinfo, dtclass)
 * 
*/
  /*else*/ {
    __pyx_v_us = (__pyx_v_us - (__pyx_v_delta * __pyx_v_7cytimes_5utils_US_SECOND));
  }
  __pyx_L9:;

  /* "utils.pxd":4480
 *     else:
 *         us -= delta * US_SECOND
 *     return dt_fr_us(us, tzinfo, dtclass)             # <<<<<<<<<<<<<<
 * 
 * # datetime.time ----------------------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_10.__pyx_n = 2;
  __pyx_t_10.tzinfo = __pyx_v_tzinfo;
  __pyx_t_10.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_us(__pyx_v_us, &__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4431
 *     return to_tz.fromutc(dt_fr_us(us, to_tz, dtclass))
 * 
 * cdef inline datetime.datetime dt_normalize_tz(datetime.datetime dt, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Normalize an aware datetime against its own tzinfo `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt_normalize_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4484
 * # datetime.time ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.time time_new(             # <<<<<<<<<<<<<<
 *     int hour=0, int minute=0, int second=0, int microsecond=0,
 *     object tzinfo=None, int fold=0, object tclass=None,
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_new(struct __pyx_opt_args_7cytimes_5utils_time_new *__pyx_optional_args) {
  int __pyx_v_hour = ((int)0);
  int __pyx_v_minute = ((int)0);
  int __pyx_v_second = ((int)0);
  int __pyx_v_microsecond = ((int)0);

  /* "utils.pxd":4486
 * cdef inline datetime.time time_new(
 *     int hour=0, int minute=0, int second=0, int microsecond=0,
 *     object tzinfo=None, int fold=0, object tclass=None,             # <<<<<<<<<<<<<<
 * ):
 *     """Create a new time `<'datetime.time'>`.
*/
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  int __pyx_v_fold = ((int)0);
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  size_t __pyx_t_14;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_t_16;
  PyObject *__pyx_t_17[4];
  int __pyx_t_18;
  char const *__pyx_t_19;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  PyObject *__pyx_t_25 = NULL;
  struct __pyx_opt_args_7cpython_8datetime_time_new __pyx_t_26;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hour = __pyx_optional_args->hour;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_minute = __pyx_optional_args->minute;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_second = __pyx_optional_args->second;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_microsecond = __pyx_optional_args->microsecond;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_fold = __pyx_optional_args->fold;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_tclass = __pyx_optional_args->tclass;
                }
              }
            }
          }
        }
      }
    }
  }

  /* "utils.pxd":4502
 *     """
 *     # Construct time
 *     fold = fold == 1             # <<<<<<<<<<<<<<
 *     if tclass is not None and tclass is not datetime.time:
 *         try:
*/
  __pyx_v_fold = (__pyx_v_fold == 1);

  /* "utils.pxd":4503
 *     # Construct time
 *     fold = fold == 1
 *     if tclass is not None and tclass is not datetime.time:             # <<<<<<<<<<<<<<
 *         try:
 *             return tclass(
*/
  __pyx_t_2 = (__pyx_v_tclass != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_tclass != ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_time));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":4504
 *     fold = fold == 1
 *     if tclass is not None and tclass is not datetime.time:
 *         try:             # <<<<<<<<<<<<<<
 *             return tclass(
 *                 hour=hour,
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "utils.pxd":4505
 *     if tclass is not None and tclass is not datetime.time:
 *         try:
 *             return tclass(             # <<<<<<<<<<<<<<
 *                 hour=hour,
 *                 minute=minute,
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = NULL;
        __Pyx_INCREF(__pyx_v_tclass);
        __pyx_t_8 = __pyx_v_tclass; 

        /* "utils.pxd":4506
 *         try:
 *             return tclass(
 *                 hour=hour,             # <<<<<<<<<<<<<<
 *                 minute=minute,
 *                 second=second,
*/
        __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_hour); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4506, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);

        /* "utils.pxd":4507
 *             return tclass(
 *                 hour=hour,
 *                 minute=minute,             # <<<<<<<<<<<<<<
 *                 second=second,
 *                 microsecond=microsecond,
*/
        __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_minute); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 4507, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_10);

        /* "utils.pxd":4508
 *                 hour=hour,
 *                 minute=minute,
 *                 second=second,             # <<<<<<<<<<<<<<
 *                 microsecond=microsecond,
 *                 tzinfo=tzinfo,
*/
        __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_second); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4508, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);

        /* "utils.pxd":4509
 *                 minute=minute,
 *                 second=second,
 *                 microsecond=microsecond,             # <<<<<<<<<<<<<<
 *                 tzinfo=tzinfo,
 *                 fold=fold,
*/
        __pyx_t_12 = __Pyx_PyLong_From_int(__pyx_v_microsecond); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 4509, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_12);

        /* "utils.pxd":4511
 *                 microsecond=microsecond,
 *                 tzinfo=tzinfo,
 *                 fold=fold,             # <<<<<<<<<<<<<<
 *             )
 *         except Exception as err:
*/
        __pyx_t_13 = __Pyx_PyLong_From_int(__pyx_v_fold); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 4511, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_14 = 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_14 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 6 : 0)] = {__pyx_t_7, NULL};
          __pyx_t_15 = __Pyx_MakeVectorcallBuilderKwds(6); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 4505, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_hour, __pyx_t_9, __pyx_t_15, __pyx_callargs+1, 0) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_minute, __pyx_t_10, __pyx_t_15, __pyx_callargs+1, 1) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_second, __pyx_t_11, __pyx_t_15, __pyx_callargs+1, 2) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_microsecond, __pyx_t_12, __pyx_t_15, __pyx_callargs+1, 3) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_tzinfo, __pyx_v_tzinfo, __pyx_t_15, __pyx_callargs+1, 4) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_fold, __pyx_t_13, __pyx_t_15, __pyx_callargs+1, 5) < (0)) __PYX_ERR(5, 4505, __pyx_L6_error)
          __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_14, (1-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_15);
          __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_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_15); __pyx_t_15 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4505, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
        }

        /* "utils.pxd":4505
 *     if tclass is not None and tclass is not datetime.time:
 *         try:
 *             return tclass(             # <<<<<<<<<<<<<<
 *                 hour=hour,
 *                 minute=minute,
*/
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_time))))) __PYX_ERR(5, 4505, __pyx_L6_error)
        __pyx_r = ((PyDateTime_Time *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L10_try_return;

        /* "utils.pxd":4504
 *     fold = fold == 1
 *     if tclass is not None and tclass is not datetime.time:
 *         try:             # <<<<<<<<<<<<<<
 *             return tclass(
 *                 hour=hour,
*/
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 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;

      /* "utils.pxd":4513
 *                 fold=fold,
 *             )
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create time using custom 'tclass' %s, %s" % (tclass, err)) from err
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
*/
      __pyx_t_16 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_16) {
        __Pyx_AddTraceback("cytimes.utils.time_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_15) < 0) __PYX_ERR(5, 4513, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_err = __pyx_t_8;
        /*try:*/ {

          /* "utils.pxd":4514
 *             )
 *         except Exception as err:
 *             raise ValueError("Cannot create time using custom 'tclass' %s, %s" % (tclass, err)) from err             # <<<<<<<<<<<<<<
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
 * 
*/
          __pyx_t_12 = NULL;
          __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tclass), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4514, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_10 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_err), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 4514, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_10);
          __pyx_t_17[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_create_time_using_custom;
          __pyx_t_17[1] = __pyx_t_11;
          __pyx_t_17[2] = __pyx_mstate_global->__pyx_kp_u__3;
          __pyx_t_17[3] = __pyx_t_10;
          __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_17, 4, 41 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10));
          if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4514, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_9);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
          __pyx_t_14 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_9};
            __pyx_t_13 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_14, (2-__pyx_t_14) | (__pyx_t_14*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
            if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 4514, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_13);
          }
          __Pyx_Raise(__pyx_t_13, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __PYX_ERR(5, 4514, __pyx_L17_error)
        }

        /* "utils.pxd":4513
 *                 fold=fold,
 *             )
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create time using custom 'tclass' %s, %s" % (tclass, err)) from err
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
*/
        /*finally:*/ {
          __pyx_L17_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_23, &__pyx_t_24, &__pyx_t_25);
            if ( unlikely(__Pyx_GetException(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22) < 0)) __Pyx_ErrFetch(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_24);
            __Pyx_XGOTREF(__pyx_t_25);
            __pyx_t_16 = __pyx_lineno; __pyx_t_18 = __pyx_clineno; __pyx_t_19 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_ExceptionReset(__pyx_t_23, __pyx_t_24, __pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_ErrRestore(__pyx_t_20, __pyx_t_21, __pyx_t_22);
            __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0;
            __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_18; __pyx_filename = __pyx_t_19;
            goto __pyx_L8_except_error;
          }
        }
      }
      goto __pyx_L8_except_error;

      /* "utils.pxd":4504
 *     fold = fold == 1
 *     if tclass is not None and tclass is not datetime.time:
 *         try:             # <<<<<<<<<<<<<<
 *             return tclass(
 *                 hour=hour,
*/
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L10_try_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L0;
    }

    /* "utils.pxd":4503
 *     # Construct time
 *     fold = fold == 1
 *     if tclass is not None and tclass is not datetime.time:             # <<<<<<<<<<<<<<
 *         try:
 *             return tclass(
*/
  }

  /* "utils.pxd":4515
 *         except Exception as err:
 *             raise ValueError("Cannot create time using custom 'tclass' %s, %s" % (tclass, err)) from err
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.time time_now(object tzinfo=None, object tclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_26.__pyx_n = 1;
  __pyx_t_26.fold = __pyx_v_fold;
  __pyx_t_15 = ((PyObject *)__pyx_f_7cpython_8datetime_time_new(__pyx_v_hour, __pyx_v_minute, __pyx_v_second, __pyx_v_microsecond, __pyx_v_tzinfo, &__pyx_t_26)); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 4515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_r = ((PyDateTime_Time *)__pyx_t_15);
  __pyx_t_15 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4484
 * # datetime.time ----------------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.time time_new(             # <<<<<<<<<<<<<<
 *     int hour=0, int minute=0, int second=0, int microsecond=0,
 *     object tzinfo=None, int fold=0, object tclass=None,
*/

  /* function exit code */
  __pyx_L1_error:;
  __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_15);
  __Pyx_AddTraceback("cytimes.utils.time_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4517
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.time time_now(object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current time `<'datetime.time'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_now(struct __pyx_opt_args_7cytimes_5utils_time_now *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_now __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_time_fr_dt __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_now", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_tclass = __pyx_optional_args->tclass;
      }
    }
  }

  /* "utils.pxd":4533
 *     >>> datetime.datetime.now(tzinfo).time()
 *     """
 *     return time_fr_dt(dt_now(tzinfo, None), tclass)             # <<<<<<<<<<<<<<
 * 
 * # . type check
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.dtclass = Py_None;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_now(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.tclass = __pyx_v_tclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_time_fr_dt(((PyDateTime_DateTime *)__pyx_t_1), &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Time *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4517
 *     return datetime.time_new(hour, minute, second, microsecond, tzinfo, fold)
 * 
 * cdef inline datetime.time time_now(object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Get the current time `<'datetime.time'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.time_now", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4536
 * 
 * # . type check
 * cdef inline bint is_time(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or sublcass of `datetime.time` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_time(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4545
 *     >>> isinstance(obj, datetime.time)
 *     """
 *     return datetime.PyTime_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_time_exact(object obj) except -1:
*/
  __pyx_r = PyTime_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4536
 * 
 * # . type check
 * cdef inline bint is_time(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or sublcass of `datetime.time` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4547
 *     return datetime.PyTime_Check(obj)
 * 
 * cdef inline bint is_time_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.time` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_time_exact(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4556
 *     >>> type(obj) is datetime.time
 *     """
 *     return datetime.PyTime_CheckExact(obj)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: to
*/
  __pyx_r = PyTime_CheckExact(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4547
 *     return datetime.PyTime_Check(obj)
 * 
 * cdef inline bint is_time_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.time` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4559
 * 
 * # . conversion: to
 * cdef inline str time_isoformat(datetime.time time, bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to ISO string `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_time_isoformat(PyDateTime_Time *__pyx_v_time, struct __pyx_opt_args_7cytimes_5utils_time_isoformat *__pyx_optional_args) {
  int __pyx_v_utc = ((int)0);
  int __pyx_v_us;
  PyObject *__pyx_v_s_utc = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcformat __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6[5];
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8[6];
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10[7];
  PyObject *__pyx_t_11[8];
  PyObject *__pyx_t_12 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_isoformat", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_utc = __pyx_optional_args->utc;
    }
  }

  /* "utils.pxd":4571
 *     """
 *     cdef:
 *         int us = time.microsecond             # <<<<<<<<<<<<<<
 *         str s_utc = tz_utcformat(time.tzinfo, None) if utc else None
 * 
*/
  __pyx_v_us = __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(__pyx_v_time);

  /* "utils.pxd":4572
 *     cdef:
 *         int us = time.microsecond
 *         str s_utc = tz_utcformat(time.tzinfo, None) if utc else None             # <<<<<<<<<<<<<<
 * 
 *     if us == 0:
*/
  if (__pyx_v_utc) {
    __pyx_t_2 = __pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(__pyx_v_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.dt = ((PyDateTime_DateTime *)Py_None);
    __pyx_t_3 = __pyx_f_7cytimes_5utils_tz_utcformat(__pyx_t_2, &__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4572, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(5, 4572, __pyx_L1_error)
  __pyx_v_s_utc = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":4574
 *         str s_utc = tz_utcformat(time.tzinfo, None) if utc else None
 * 
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         if s_utc is None:
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)
*/
  __pyx_t_5 = (__pyx_v_us == 0);
  if (__pyx_t_5) {

    /* "utils.pxd":4575
 * 
 *     if us == 0:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)
*/
    __pyx_t_5 = (__pyx_v_s_utc == ((PyObject*)Py_None));
    if (__pyx_t_5) {

      /* "utils.pxd":4576
 *     if us == 0:
 *         if s_utc is None:
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)             # <<<<<<<<<<<<<<
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)
 *     else:
*/
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_1 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_6[0] = __pyx_t_1;
      __pyx_t_6[1] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_6[2] = __pyx_t_3;
      __pyx_t_6[3] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_6[4] = __pyx_t_2;
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 5, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2), 127);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4576, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = ((PyObject*)__pyx_t_7);
      __pyx_t_7 = 0;
      goto __pyx_L0;

      /* "utils.pxd":4575
 * 
 *     if us == 0:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)
*/
    }

    /* "utils.pxd":4577
 *         if s_utc is None:
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)             # <<<<<<<<<<<<<<
 *     else:
 *         if s_utc is None:
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyUnicode_Unicode(__pyx_v_s_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_8[0] = __pyx_t_7;
    __pyx_t_8[1] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_8[2] = __pyx_t_2;
    __pyx_t_8[3] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_8[4] = __pyx_t_3;
    __pyx_t_8[5] = __pyx_t_1;
    __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 6, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1));
    if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4577, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyObject*)__pyx_t_9);
    __pyx_t_9 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4574
 *         str s_utc = tz_utcformat(time.tzinfo, None) if utc else None
 * 
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         if s_utc is None:
 *             return "%02d:%02d:%02d" % (time.hour, time.minute, time.second)
*/
  }

  /* "utils.pxd":4579
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)
 *     else:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%02d:%02d:%02d.%06d" % (time.hour, time.minute, time.second, us)
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)
*/
  /*else*/ {
    __pyx_t_5 = (__pyx_v_s_utc == ((PyObject*)Py_None));
    if (__pyx_t_5) {

      /* "utils.pxd":4580
 *     else:
 *         if s_utc is None:
 *             return "%02d:%02d:%02d.%06d" % (time.hour, time.minute, time.second, us)             # <<<<<<<<<<<<<<
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)
 * 
*/
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_1 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_v_us, 6, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_10[0] = __pyx_t_9;
      __pyx_t_10[1] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_10[2] = __pyx_t_1;
      __pyx_t_10[3] = __pyx_mstate_global->__pyx_kp_u__7;
      __pyx_t_10[4] = __pyx_t_3;
      __pyx_t_10[5] = __pyx_mstate_global->__pyx_kp_u__2;
      __pyx_t_10[6] = __pyx_t_2;
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_10, 7, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 1 * 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2), 127);
      if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4580, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_r = ((PyObject*)__pyx_t_7);
      __pyx_t_7 = 0;
      goto __pyx_L0;

      /* "utils.pxd":4579
 *         return "%02d:%02d:%02d%s" % (time.hour, time.minute, time.second, s_utc)
 *     else:
 *         if s_utc is None:             # <<<<<<<<<<<<<<
 *             return "%02d:%02d:%02d.%06d" % (time.hour, time.minute, time.second, us)
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)
*/
    }

    /* "utils.pxd":4581
 *         if s_utc is None:
 *             return "%02d:%02d:%02d.%06d" % (time.hour, time.minute, time.second, us)
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long time_to_us(datetime.time time) noexcept:
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_2 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time), 2, '0', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyUnicode_From_int(__pyx_v_us, 6, '0', 'd'); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_v_s_utc); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_11[0] = __pyx_t_7;
    __pyx_t_11[1] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_11[2] = __pyx_t_2;
    __pyx_t_11[3] = __pyx_mstate_global->__pyx_kp_u__7;
    __pyx_t_11[4] = __pyx_t_3;
    __pyx_t_11[5] = __pyx_mstate_global->__pyx_kp_u__2;
    __pyx_t_11[6] = __pyx_t_1;
    __pyx_t_11[7] = __pyx_t_9;
    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 8, __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 1 * 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
    if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 4581, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_r = ((PyObject*)__pyx_t_12);
    __pyx_t_12 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":4559
 * 
 * # . conversion: to
 * cdef inline str time_isoformat(datetime.time time, bint utc=False):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to ISO string `<'str'>`.
 * 
*/

  /* 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_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cytimes.utils.time_isoformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_s_utc);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4583
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)
 * 
 * cdef inline long long time_to_us(datetime.time time) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to total microseconds `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_time_to_us(PyDateTime_Time *__pyx_v_time) {
  PY_LONG_LONG __pyx_r;

  /* "utils.pxd":4592
 *         (<long long> time.hour)       * US_HOUR +
 *         (<long long> time.minute)     * US_MINUTE +
 *         (<long long> time.second)     * US_SECOND +             # <<<<<<<<<<<<<<
 *         (<long long> time.microsecond)
 *     )
*/
  __pyx_r = ((((((PY_LONG_LONG)__pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time)) * __pyx_v_7cytimes_5utils_US_HOUR) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time)) * __pyx_v_7cytimes_5utils_US_MINUTE)) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time)) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(__pyx_v_time)));
  goto __pyx_L0;

  /* "utils.pxd":4583
 *         return "%02d:%02d:%02d.%06d%s" % (time.hour, time.minute, time.second, us, s_utc)
 * 
 * cdef inline long long time_to_us(datetime.time time) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to total microseconds `<'int'>`.
 * 
*/

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

/* "utils.pxd":4596
 *     )
 * 
 * cdef inline double time_to_sec(datetime.time time) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to total seconds `<'float'>`.
 * 
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_time_to_sec(PyDateTime_Time *__pyx_v_time) {
  PY_LONG_LONG __pyx_v_us;
  double __pyx_r;

  /* "utils.pxd":4602
 *     :returns `<'float'>`: Seconds since midnight in [0.0, 86400.0).
 *     """
 *     cdef long long us = time_to_us(time)             # <<<<<<<<<<<<<<
 *     return <double> us * 1e-6
 * 
*/
  __pyx_v_us = __pyx_f_7cytimes_5utils_time_to_us(__pyx_v_time);

  /* "utils.pxd":4603
 *     """
 *     cdef long long us = time_to_us(time)
 *     return <double> us * 1e-6             # <<<<<<<<<<<<<<
 * 
 * # . conversion: from
*/
  __pyx_r = (((double)__pyx_v_us) * 1e-6);
  goto __pyx_L0;

  /* "utils.pxd":4596
 *     )
 * 
 * cdef inline double time_to_sec(datetime.time time) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.time` to total seconds `<'float'>`.
 * 
*/

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

/* "utils.pxd":4606
 * 
 * # . conversion: from
 * cdef inline datetime.time time_fr_us(long long value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from microseconds since the Unix epoch `<'datetime.time'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_us(PY_LONG_LONG __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_time_fr_us *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  __pyx_t_7cytimes_5utils_hmsf __pyx_v__hmsf;
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_time_new __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_fr_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_tclass = __pyx_optional_args->tclass;
      }
    }
  }

  /* "utils.pxd":4615
 *     :returns `<'datetime.time'>`: The resulting time (or subclass if `tclass` is specified).
 *     """
 *     cdef hmsf _hmsf = hmsf_fr_us(value)             # <<<<<<<<<<<<<<
 *     return time_new(
 *         _hmsf.hour, _hmsf.minute, _hmsf.second,
*/
  __pyx_v__hmsf = __pyx_f_7cytimes_5utils_hmsf_fr_us(__pyx_v_value);

  /* "utils.pxd":4616
 *     """
 *     cdef hmsf _hmsf = hmsf_fr_us(value)
 *     return time_new(             # <<<<<<<<<<<<<<
 *         _hmsf.hour, _hmsf.minute, _hmsf.second,
 *         _hmsf.microsecond, tzinfo, 0, tclass
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4618
 *     return time_new(
 *         _hmsf.hour, _hmsf.minute, _hmsf.second,
 *         _hmsf.microsecond, tzinfo, 0, tclass             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2.__pyx_n = 7;
  __pyx_t_2.hour = __pyx_v__hmsf.hour;
  __pyx_t_2.minute = __pyx_v__hmsf.minute;
  __pyx_t_2.second = __pyx_v__hmsf.second;
  __pyx_t_2.microsecond = __pyx_v__hmsf.microsecond;
  __pyx_t_2.tzinfo = __pyx_v_tzinfo;
  __pyx_t_2.fold = 0;
  __pyx_t_2.tclass = __pyx_v_tclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_time_new(&__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyDateTime_Time *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4606
 * 
 * # . conversion: from
 * cdef inline datetime.time time_fr_us(long long value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from microseconds since the Unix epoch `<'datetime.time'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.time_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4621
 *     )
 * 
 * cdef inline datetime.time time_fr_sec(double value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from seconds since the Unix epoch `<'datetime.time'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_sec(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_time_fr_sec *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PY_LONG_LONG __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_time_fr_us __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_fr_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_tclass = __pyx_optional_args->tclass;
      }
    }
  }

  /* "utils.pxd":4630
 *     :returns `<'datetime.time'>`: The resulting time (or subclass if `tclass` is specified).
 *     """
 *     return time_fr_us(sec_to_us(value), tzinfo, tclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.time time_fr_time(datetime.time time, object tclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_sec_to_us(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4630, __pyx_L1_error)
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.tzinfo = __pyx_v_tzinfo;
  __pyx_t_3.tclass = __pyx_v_tclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_time_fr_us(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4630, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_Time *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4621
 *     )
 * 
 * cdef inline datetime.time time_fr_sec(double value, object tzinfo=None, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from seconds since the Unix epoch `<'datetime.time'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.time_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4632
 *     return time_fr_us(sec_to_us(value), tzinfo, tclass)
 * 
 * cdef inline datetime.time time_fr_time(datetime.time time, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from another time (include subclass) `<'datetime.time'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_time(PyDateTime_Time *__pyx_v_time, struct __pyx_opt_args_7cytimes_5utils_time_fr_time *__pyx_optional_args) {
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_time_new __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_fr_time", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tclass = __pyx_optional_args->tclass;
    }
  }
  __Pyx_INCREF(__pyx_v_tclass);

  /* "utils.pxd":4642
 *         with the same time fields and tzinfo.
 *     """
 *     if tclass is None:             # <<<<<<<<<<<<<<
 *         tclass = datetime.time
 *     if tclass is type(time):
*/
  __pyx_t_1 = (__pyx_v_tclass == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":4643
 *     """
 *     if tclass is None:
 *         tclass = datetime.time             # <<<<<<<<<<<<<<
 *     if tclass is type(time):
 *         return time
*/
    __Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_time);
    __Pyx_DECREF_SET(__pyx_v_tclass, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_time));

    /* "utils.pxd":4642
 *         with the same time fields and tzinfo.
 *     """
 *     if tclass is None:             # <<<<<<<<<<<<<<
 *         tclass = datetime.time
 *     if tclass is type(time):
*/
  }

  /* "utils.pxd":4644
 *     if tclass is None:
 *         tclass = datetime.time
 *     if tclass is type(time):             # <<<<<<<<<<<<<<
 *         return time
 *     return time_new(
*/
  __pyx_t_1 = (__pyx_v_tclass == ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_time))));
  if (__pyx_t_1) {

    /* "utils.pxd":4645
 *         tclass = datetime.time
 *     if tclass is type(time):
 *         return time             # <<<<<<<<<<<<<<
 *     return time_new(
 *         time.hour, time.minute, time.second,
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_time);
    __pyx_r = __pyx_v_time;
    goto __pyx_L0;

    /* "utils.pxd":4644
 *     if tclass is None:
 *         tclass = datetime.time
 *     if tclass is type(time):             # <<<<<<<<<<<<<<
 *         return time
 *     return time_new(
*/
  }

  /* "utils.pxd":4646
 *     if tclass is type(time):
 *         return time
 *     return time_new(             # <<<<<<<<<<<<<<
 *         time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, tclass
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4648
 *     return time_new(
 *         time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, tclass             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2 = __pyx_f_7cpython_8datetime_4time_6tzinfo_tzinfo(__pyx_v_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4648, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "utils.pxd":4646
 *     if tclass is type(time):
 *         return time
 *     return time_new(             # <<<<<<<<<<<<<<
 *         time.hour, time.minute, time.second,
 *         time.microsecond, time.tzinfo, time.fold, tclass
*/
  __pyx_t_4.__pyx_n = 7;
  __pyx_t_4.hour = __pyx_f_7cpython_8datetime_4time_4hour_hour(__pyx_v_time);
  __pyx_t_4.minute = __pyx_f_7cpython_8datetime_4time_6minute_minute(__pyx_v_time);
  __pyx_t_4.second = __pyx_f_7cpython_8datetime_4time_6second_second(__pyx_v_time);
  __pyx_t_4.microsecond = __pyx_f_7cpython_8datetime_4time_11microsecond_microsecond(__pyx_v_time);
  __pyx_t_4.tzinfo = __pyx_t_2;
  __pyx_t_4.fold = __pyx_f_7cpython_8datetime_4time_4fold_fold(__pyx_v_time);
  __pyx_t_4.tclass = __pyx_v_tclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_time_new(&__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4646, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = ((PyDateTime_Time *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4632
 *     return time_fr_us(sec_to_us(value), tzinfo, tclass)
 * 
 * cdef inline datetime.time time_fr_time(datetime.time time, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from another time (include subclass) `<'datetime.time'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.time_fr_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tclass);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4651
 *     )
 * 
 * cdef inline datetime.time time_fr_dt(datetime.datetime dt, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from datetime (include subclass) `<'datetime.time'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Time *__pyx_f_7cytimes_5utils_time_fr_dt(PyDateTime_DateTime *__pyx_v_dt, struct __pyx_opt_args_7cytimes_5utils_time_fr_dt *__pyx_optional_args) {
  PyObject *__pyx_v_tclass = ((PyObject *)Py_None);
  PyDateTime_Time *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_time_new __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("time_fr_dt", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tclass = __pyx_optional_args->tclass;
    }
  }

  /* "utils.pxd":4660
 *         with the same time fields and tzinfo.
 *     """
 *     return time_new(             # <<<<<<<<<<<<<<
 *         dt.hour, dt.minute, dt.second,
 *         dt.microsecond, dt.tzinfo, dt.fold, tclass
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);

  /* "utils.pxd":4662
 *     return time_new(
 *         dt.hour, dt.minute, dt.second,
 *         dt.microsecond, dt.tzinfo, dt.fold, tclass             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_1 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 4662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);

  /* "utils.pxd":4660
 *         with the same time fields and tzinfo.
 *     """
 *     return time_new(             # <<<<<<<<<<<<<<
 *         dt.hour, dt.minute, dt.second,
 *         dt.microsecond, dt.tzinfo, dt.fold, tclass
*/
  __pyx_t_3.__pyx_n = 7;
  __pyx_t_3.hour = __pyx_f_7cpython_8datetime_8datetime_4hour_hour(__pyx_v_dt);
  __pyx_t_3.minute = __pyx_f_7cpython_8datetime_8datetime_6minute_minute(__pyx_v_dt);
  __pyx_t_3.second = __pyx_f_7cpython_8datetime_8datetime_6second_second(__pyx_v_dt);
  __pyx_t_3.microsecond = __pyx_f_7cpython_8datetime_8datetime_11microsecond_microsecond(__pyx_v_dt);
  __pyx_t_3.tzinfo = __pyx_t_1;
  __pyx_t_3.fold = __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt);
  __pyx_t_3.tclass = __pyx_v_tclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_time_new(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyDateTime_Time *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4651
 *     )
 * 
 * cdef inline datetime.time time_fr_dt(datetime.datetime dt, object tclass=None):             # <<<<<<<<<<<<<<
 *     """Create time from datetime (include subclass) `<'datetime.time'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.time_fr_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4667
 * # datetime.timedelta -----------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.timedelta td_new(int days=0, int seconds=0, int microseconds=0, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new timedelta `<'datetime.timedelta'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_new(struct __pyx_opt_args_7cytimes_5utils_td_new *__pyx_optional_args) {
  int __pyx_v_days = ((int)0);
  int __pyx_v_seconds = ((int)0);
  int __pyx_v_microseconds = ((int)0);
  PyObject *__pyx_v_tdclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  size_t __pyx_t_12;
  PyObject *__pyx_t_13 = NULL;
  int __pyx_t_14;
  PyObject *__pyx_t_15[4];
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  char const *__pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_days = __pyx_optional_args->days;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_seconds = __pyx_optional_args->seconds;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_microseconds = __pyx_optional_args->microseconds;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_tdclass = __pyx_optional_args->tdclass;
          }
        }
      }
    }
  }

  /* "utils.pxd":4681
 *     """
 *     # Construct timedelta
 *     if tdclass is not None and tdclass is not datetime.timedelta:             # <<<<<<<<<<<<<<
 *         try:
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
*/
  __pyx_t_2 = (__pyx_v_tdclass != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_tdclass != ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta));
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":4682
 *     # Construct timedelta
 *     if tdclass is not None and tdclass is not datetime.timedelta:
 *         try:             # <<<<<<<<<<<<<<
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_5);
      /*try:*/ {

        /* "utils.pxd":4683
 *     if tdclass is not None and tdclass is not datetime.timedelta:
 *         try:
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)             # <<<<<<<<<<<<<<
 *         except Exception as err:
 *             raise ValueError("Cannot create timedelta using custom 'tdclass' %s, %s" % (tdclass, err)) from err
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = NULL;
        __Pyx_INCREF(__pyx_v_tdclass);
        __pyx_t_8 = __pyx_v_tdclass; 
        __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v_days); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4683, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyLong_From_int(__pyx_v_seconds); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 4683, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_microseconds); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4683, __pyx_L6_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = 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_12 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 3 : 0)] = {__pyx_t_7, NULL};
          __pyx_t_13 = __Pyx_MakeVectorcallBuilderKwds(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 4683, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_13);
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_days, __pyx_t_9, __pyx_t_13, __pyx_callargs+1, 0) < (0)) __PYX_ERR(5, 4683, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_seconds, __pyx_t_10, __pyx_t_13, __pyx_callargs+1, 1) < (0)) __PYX_ERR(5, 4683, __pyx_L6_error)
          if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_microseconds, __pyx_t_11, __pyx_t_13, __pyx_callargs+1, 2) < (0)) __PYX_ERR(5, 4683, __pyx_L6_error)
          __pyx_t_6 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_t_8, __pyx_callargs+__pyx_t_12, (1-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_13);
          __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_11); __pyx_t_11 = 0;
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4683, __pyx_L6_error)
          __Pyx_GOTREF(__pyx_t_6);
        }
        if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(5, 4683, __pyx_L6_error)
        __pyx_r = ((PyDateTime_Delta *)__pyx_t_6);
        __pyx_t_6 = 0;
        goto __pyx_L10_try_return;

        /* "utils.pxd":4682
 *     # Construct timedelta
 *     if tdclass is not None and tdclass is not datetime.timedelta:
 *         try:             # <<<<<<<<<<<<<<
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:
*/
      }
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 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;

      /* "utils.pxd":4684
 *         try:
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create timedelta using custom 'tdclass' %s, %s" % (tdclass, err)) from err
 *     return datetime.timedelta_new(days, seconds, microseconds)
*/
      __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
      if (__pyx_t_14) {
        __Pyx_AddTraceback("cytimes.utils.td_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_8, &__pyx_t_13) < 0) __PYX_ERR(5, 4684, __pyx_L8_except_error)
        __Pyx_XGOTREF(__pyx_t_6);
        __Pyx_XGOTREF(__pyx_t_8);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_INCREF(__pyx_t_8);
        __pyx_v_err = __pyx_t_8;
        /*try:*/ {

          /* "utils.pxd":4685
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:
 *             raise ValueError("Cannot create timedelta using custom 'tdclass' %s, %s" % (tdclass, err)) from err             # <<<<<<<<<<<<<<
 *     return datetime.timedelta_new(days, seconds, microseconds)
 * 
*/
          __pyx_t_10 = NULL;
          __pyx_t_9 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tdclass), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 4685, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_9);
          __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_err), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4685, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_create_timedelta_using_cu;
          __pyx_t_15[1] = __pyx_t_9;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__3;
          __pyx_t_15[3] = __pyx_t_7;
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 4, 47 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 4685, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_12 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4685, __pyx_L17_error)
            __Pyx_GOTREF(__pyx_t_11);
          }
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(5, 4685, __pyx_L17_error)
        }

        /* "utils.pxd":4684
 *         try:
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             raise ValueError("Cannot create timedelta using custom 'tdclass' %s, %s" % (tdclass, err)) from err
 *     return datetime.timedelta_new(days, seconds, microseconds)
*/
        /*finally:*/ {
          __pyx_L17_error:;
          /*exception exit:*/{
            __Pyx_PyThreadState_declare
            __Pyx_PyThreadState_assign
            __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
             __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
            if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_19);
            __Pyx_XGOTREF(__pyx_t_20);
            __Pyx_XGOTREF(__pyx_t_21);
            __Pyx_XGOTREF(__pyx_t_22);
            __Pyx_XGOTREF(__pyx_t_23);
            __Pyx_XGOTREF(__pyx_t_24);
            __pyx_t_14 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
            {
              __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
            }
            __Pyx_XGIVEREF(__pyx_t_22);
            __Pyx_XGIVEREF(__pyx_t_23);
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_19);
            __Pyx_XGIVEREF(__pyx_t_20);
            __Pyx_XGIVEREF(__pyx_t_21);
            __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
            __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
            __pyx_lineno = __pyx_t_14; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
            goto __pyx_L8_except_error;
          }
        }
      }
      goto __pyx_L8_except_error;

      /* "utils.pxd":4682
 *     # Construct timedelta
 *     if tdclass is not None and tdclass is not datetime.timedelta:
 *         try:             # <<<<<<<<<<<<<<
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
 *         except Exception as err:
*/
      __pyx_L8_except_error:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L10_try_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L0;
    }

    /* "utils.pxd":4681
 *     """
 *     # Construct timedelta
 *     if tdclass is not None and tdclass is not datetime.timedelta:             # <<<<<<<<<<<<<<
 *         try:
 *             return tdclass(days=days, seconds=seconds, microseconds=microseconds)
*/
  }

  /* "utils.pxd":4686
 *         except Exception as err:
 *             raise ValueError("Cannot create timedelta using custom 'tdclass' %s, %s" % (tdclass, err)) from err
 *     return datetime.timedelta_new(days, seconds, microseconds)             # <<<<<<<<<<<<<<
 * 
 * # . type check
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_13 = ((PyObject *)__pyx_f_7cpython_8datetime_timedelta_new(__pyx_v_days, __pyx_v_seconds, __pyx_v_microseconds)); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 4686, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_13);
  __pyx_t_13 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4667
 * # datetime.timedelta -----------------------------------------------------------------------------------
 * # . generate
 * cdef inline datetime.timedelta td_new(int days=0, int seconds=0, int microseconds=0, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create a new timedelta `<'datetime.timedelta'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __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_13);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("cytimes.utils.td_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4689
 * 
 * # . type check
 * cdef inline bint is_td(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.timedelta` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_td(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4698
 *     >>> isinstance(obj, datetime.timedelta)
 *     """
 *     return datetime.PyDelta_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_td_exact(object obj) except -1:
*/
  __pyx_r = PyDelta_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4689
 * 
 * # . type check
 * cdef inline bint is_td(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `datetime.timedelta` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4700
 *     return datetime.PyDelta_Check(obj)
 * 
 * cdef inline bint is_td_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.timedelta` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_td_exact(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4709
 *     >>> type(obj) is datetime.timedelta
 *     """
 *     return datetime.PyDelta_CheckExact(obj)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: to
*/
  __pyx_r = PyDelta_CheckExact(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4700
 *     return datetime.PyDelta_Check(obj)
 * 
 * cdef inline bint is_td_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.timedelta` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4712
 * 
 * # . conversion: to
 * cdef inline str td_isoformat(datetime.timedelta td):             # <<<<<<<<<<<<<<
 *     """Convert timedelta to string in ISO-like string (HH:MM:SS[.f]) `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_td_isoformat(PyDateTime_Delta *__pyx_v_td) {
  PY_LONG_LONG __pyx_v_days;
  PY_LONG_LONG __pyx_v_sec;
  PY_LONG_LONG __pyx_v_us;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  int __pyx_v_neg;
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_isoformat", 0);

  /* "utils.pxd":4719
 *     """
 *     cdef:
 *         long long days = td.day             # <<<<<<<<<<<<<<
 *         long long sec  = td.second
 *         long long us   = td.microsecond
*/
  __pyx_v_days = __pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_td);

  /* "utils.pxd":4720
 *     cdef:
 *         long long days = td.day
 *         long long sec  = td.second             # <<<<<<<<<<<<<<
 *         long long us   = td.microsecond
 *         long long hh, mi
*/
  __pyx_v_sec = __pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_td);

  /* "utils.pxd":4721
 *         long long days = td.day
 *         long long sec  = td.second
 *         long long us   = td.microsecond             # <<<<<<<<<<<<<<
 *         long long hh, mi
 *         bint neg
*/
  __pyx_v_us = __pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_td);

  /* "utils.pxd":4724
 *         long long hh, mi
 *         bint neg
 *     sec = days * SS_DAY + sec             # <<<<<<<<<<<<<<
 * 
 *     # Determine sign and normalize to absolute value without multiplying by 1e6.
*/
  __pyx_v_sec = ((__pyx_v_days * __pyx_v_7cytimes_5utils_SS_DAY) + __pyx_v_sec);

  /* "utils.pxd":4727
 * 
 *     # Determine sign and normalize to absolute value without multiplying by 1e6.
 *     if sec < 0:             # <<<<<<<<<<<<<<
 *         neg = True
 *         sec = -sec
*/
  __pyx_t_1 = (__pyx_v_sec < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":4728
 *     # Determine sign and normalize to absolute value without multiplying by 1e6.
 *     if sec < 0:
 *         neg = True             # <<<<<<<<<<<<<<
 *         sec = -sec
 *         # Borrow 1 second so that we can complement microseconds.
*/
    __pyx_v_neg = 1;

    /* "utils.pxd":4729
 *     if sec < 0:
 *         neg = True
 *         sec = -sec             # <<<<<<<<<<<<<<
 *         # Borrow 1 second so that we can complement microseconds.
 *         if us != 0:
*/
    __pyx_v_sec = (-__pyx_v_sec);

    /* "utils.pxd":4731
 *         sec = -sec
 *         # Borrow 1 second so that we can complement microseconds.
 *         if us != 0:             # <<<<<<<<<<<<<<
 *             sec -= 1                # |-X sec, +us|
 *             us = 1_000_000 - us     # (|X|-1) seconds => (1_000_000 - us)
*/
    __pyx_t_1 = (__pyx_v_us != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":4732
 *         # Borrow 1 second so that we can complement microseconds.
 *         if us != 0:
 *             sec -= 1                # |-X sec, +us|             # <<<<<<<<<<<<<<
 *             us = 1_000_000 - us     # (|X|-1) seconds => (1_000_000 - us)
 *     else:
*/
      __pyx_v_sec = (__pyx_v_sec - 1);

      /* "utils.pxd":4733
 *         if us != 0:
 *             sec -= 1                # |-X sec, +us|
 *             us = 1_000_000 - us     # (|X|-1) seconds => (1_000_000 - us)             # <<<<<<<<<<<<<<
 *     else:
 *         neg = False
*/
      __pyx_v_us = (0xF4240 - __pyx_v_us);

      /* "utils.pxd":4731
 *         sec = -sec
 *         # Borrow 1 second so that we can complement microseconds.
 *         if us != 0:             # <<<<<<<<<<<<<<
 *             sec -= 1                # |-X sec, +us|
 *             us = 1_000_000 - us     # (|X|-1) seconds => (1_000_000 - us)
*/
    }

    /* "utils.pxd":4727
 * 
 *     # Determine sign and normalize to absolute value without multiplying by 1e6.
 *     if sec < 0:             # <<<<<<<<<<<<<<
 *         neg = True
 *         sec = -sec
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":4735
 *             us = 1_000_000 - us     # (|X|-1) seconds => (1_000_000 - us)
 *     else:
 *         neg = False             # <<<<<<<<<<<<<<
 * 
 *     # Split absolute seconds into H:M:S
*/
  /*else*/ {
    __pyx_v_neg = 0;
  }
  __pyx_L3:;

  /* "utils.pxd":4739
 *     # Split absolute seconds into H:M:S
 *     with cython.cdivision(True):
 *         hh = sec / SS_HOUR;     sec %= SS_HOUR             # <<<<<<<<<<<<<<
 *         mi = sec / SS_MINUTE;   sec %= SS_MINUTE
 * 
*/
  __pyx_v_hh = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_SS_HOUR == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __PYX_ERR(5, 4739, __pyx_L1_error)
  }
  __pyx_v_sec = __Pyx_mod_PY_LONG_LONG(__pyx_v_sec, __pyx_v_7cytimes_5utils_SS_HOUR, 0);

  /* "utils.pxd":4740
 *     with cython.cdivision(True):
 *         hh = sec / SS_HOUR;     sec %= SS_HOUR
 *         mi = sec / SS_MINUTE;   sec %= SS_MINUTE             # <<<<<<<<<<<<<<
 * 
 *     # Emit
*/
  __pyx_v_mi = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_MINUTE);
  if (unlikely(__pyx_v_7cytimes_5utils_SS_MINUTE == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __PYX_ERR(5, 4740, __pyx_L1_error)
  }
  __pyx_v_sec = __Pyx_mod_PY_LONG_LONG(__pyx_v_sec, __pyx_v_7cytimes_5utils_SS_MINUTE, 0);

  /* "utils.pxd":4743
 * 
 *     # Emit
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         return ("-%02d:%02d:%02d" if neg else "%02d:%02d:%02d") % (hh, mi, sec)
 *     else:
*/
  __pyx_t_1 = (__pyx_v_us == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":4744
 *     # Emit
 *     if us == 0:
 *         return ("-%02d:%02d:%02d" if neg else "%02d:%02d:%02d") % (hh, mi, sec)             # <<<<<<<<<<<<<<
 *     else:
 *         return ("-%02d:%02d:%02d.%06d" if neg else "%02d:%02d:%02d.%06d") % (hh, mi, sec, us)
*/
    __Pyx_XDECREF(__pyx_r);
    if (__pyx_v_neg) {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d_02d);
      __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_02d_02d_02d;
    } else {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d_02d_2);
      __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_02d_02d_02d_2;
    }
    __pyx_t_3 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_hh); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_mi); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_sec); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4744, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3) != (0)) __PYX_ERR(5, 4744, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4) != (0)) __PYX_ERR(5, 4744, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_5);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5) != (0)) __PYX_ERR(5, 4744, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyUnicode_FormatSafe(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4744, __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_r = ((PyObject*)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":4743
 * 
 *     # Emit
 *     if us == 0:             # <<<<<<<<<<<<<<
 *         return ("-%02d:%02d:%02d" if neg else "%02d:%02d:%02d") % (hh, mi, sec)
 *     else:
*/
  }

  /* "utils.pxd":4746
 *         return ("-%02d:%02d:%02d" if neg else "%02d:%02d:%02d") % (hh, mi, sec)
 *     else:
 *         return ("-%02d:%02d:%02d.%06d" if neg else "%02d:%02d:%02d.%06d") % (hh, mi, sec, us)             # <<<<<<<<<<<<<<
 * 
 * cdef inline str td_utcformat(datetime.timedelta td):
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    if (__pyx_v_neg) {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d_02d_06d);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_02d_02d_02d_06d;
    } else {
      __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d_02d_06d_2);
      __pyx_t_5 = __pyx_mstate_global->__pyx_kp_u_02d_02d_02d_06d_2;
    }
    __pyx_t_6 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_hh); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_2 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_mi); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_sec); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_us); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_GIVEREF(__pyx_t_6);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6) != (0)) __PYX_ERR(5, 4746, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_2);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2) != (0)) __PYX_ERR(5, 4746, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_4) != (0)) __PYX_ERR(5, 4746, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_7, 3, __pyx_t_3) != (0)) __PYX_ERR(5, 4746, __pyx_L1_error);
    __pyx_t_6 = 0;
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyUnicode_FormatSafe(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_r = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":4712
 * 
 * # . conversion: to
 * cdef inline str td_isoformat(datetime.timedelta td):             # <<<<<<<<<<<<<<
 *     """Convert timedelta to string in ISO-like string (HH:MM:SS[.f]) `<'str'>`.
 * 
*/

  /* 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_AddTraceback("cytimes.utils.td_isoformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4748
 *         return ("-%02d:%02d:%02d.%06d" if neg else "%02d:%02d:%02d.%06d") % (hh, mi, sec, us)
 * 
 * cdef inline str td_utcformat(datetime.timedelta td):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to a UTC offset string (HHMM) `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_td_utcformat(PyDateTime_Delta *__pyx_v_td) {
  PY_LONG_LONG __pyx_v_days;
  PY_LONG_LONG __pyx_v_sec;
  PY_LONG_LONG __pyx_v_hh;
  PY_LONG_LONG __pyx_v_mi;
  int __pyx_v_neg;
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_utcformat", 0);

  /* "utils.pxd":4755
 *     """
 *     cdef:
 *         long long days = td.day             # <<<<<<<<<<<<<<
 *         long long sec  = td.second
 *         long long hh, mi
*/
  __pyx_v_days = __pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_td);

  /* "utils.pxd":4756
 *     cdef:
 *         long long days = td.day
 *         long long sec  = td.second             # <<<<<<<<<<<<<<
 *         long long hh, mi
 *         bint neg
*/
  __pyx_v_sec = __pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_td);

  /* "utils.pxd":4759
 *         long long hh, mi
 *         bint neg
 *     sec = days * SS_DAY + sec             # <<<<<<<<<<<<<<
 * 
 *     # Check sign
*/
  __pyx_v_sec = ((__pyx_v_days * __pyx_v_7cytimes_5utils_SS_DAY) + __pyx_v_sec);

  /* "utils.pxd":4762
 * 
 *     # Check sign
 *     if sec < 0:             # <<<<<<<<<<<<<<
 *         sec = -sec
 *         neg = True
*/
  __pyx_t_1 = (__pyx_v_sec < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":4763
 *     # Check sign
 *     if sec < 0:
 *         sec = -sec             # <<<<<<<<<<<<<<
 *         neg = True
 *     else:
*/
    __pyx_v_sec = (-__pyx_v_sec);

    /* "utils.pxd":4764
 *     if sec < 0:
 *         sec = -sec
 *         neg = True             # <<<<<<<<<<<<<<
 *     else:
 *         neg = False
*/
    __pyx_v_neg = 1;

    /* "utils.pxd":4762
 * 
 *     # Check sign
 *     if sec < 0:             # <<<<<<<<<<<<<<
 *         sec = -sec
 *         neg = True
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":4766
 *         neg = True
 *     else:
 *         neg = False             # <<<<<<<<<<<<<<
 * 
 *     # Split absolute seconds into H:M
*/
  /*else*/ {
    __pyx_v_neg = 0;
  }
  __pyx_L3:;

  /* "utils.pxd":4770
 *     # Split absolute seconds into H:M
 *     with cython.cdivision(True):
 *         sec %= SS_DAY             # <<<<<<<<<<<<<<
 *         hh = sec / SS_HOUR;     sec %= SS_HOUR
 *         mi = sec / SS_MINUTE
*/
  if (unlikely(__pyx_v_7cytimes_5utils_SS_DAY == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __PYX_ERR(5, 4770, __pyx_L1_error)
  }
  __pyx_v_sec = __Pyx_mod_PY_LONG_LONG(__pyx_v_sec, __pyx_v_7cytimes_5utils_SS_DAY, 0);

  /* "utils.pxd":4771
 *     with cython.cdivision(True):
 *         sec %= SS_DAY
 *         hh = sec / SS_HOUR;     sec %= SS_HOUR             # <<<<<<<<<<<<<<
 *         mi = sec / SS_MINUTE
 * 
*/
  __pyx_v_hh = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_HOUR);
  if (unlikely(__pyx_v_7cytimes_5utils_SS_HOUR == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
    __PYX_ERR(5, 4771, __pyx_L1_error)
  }
  __pyx_v_sec = __Pyx_mod_PY_LONG_LONG(__pyx_v_sec, __pyx_v_7cytimes_5utils_SS_HOUR, 0);

  /* "utils.pxd":4772
 *         sec %= SS_DAY
 *         hh = sec / SS_HOUR;     sec %= SS_HOUR
 *         mi = sec / SS_MINUTE             # <<<<<<<<<<<<<<
 * 
 *     # Format to string
*/
  __pyx_v_mi = (__pyx_v_sec / __pyx_v_7cytimes_5utils_SS_MINUTE);

  /* "utils.pxd":4775
 * 
 *     # Format to string
 *     return ("-%02d%02d" if neg else "+%02d%02d") % (hh, mi)             # <<<<<<<<<<<<<<
 * 
 * cdef inline long long td_to_us(datetime.timedelta td) noexcept:
*/
  __Pyx_XDECREF(__pyx_r);
  if (__pyx_v_neg) {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d);
    __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_02d_02d;
  } else {
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_02d_02d_2);
    __pyx_t_2 = __pyx_mstate_global->__pyx_kp_u_02d_02d_2;
  }
  __pyx_t_3 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_hh); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_mi); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3) != (0)) __PYX_ERR(5, 4775, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4) != (0)) __PYX_ERR(5, 4775, __pyx_L1_error);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyUnicode_FormatSafe(__pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 4775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4748
 *         return ("-%02d:%02d:%02d.%06d" if neg else "%02d:%02d:%02d.%06d") % (hh, mi, sec, us)
 * 
 * cdef inline str td_utcformat(datetime.timedelta td):             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to a UTC offset string (HHMM) `<'str'>`.
 * 
*/

  /* 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("cytimes.utils.td_utcformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4777
 *     return ("-%02d%02d" if neg else "+%02d%02d") % (hh, mi)
 * 
 * cdef inline long long td_to_us(datetime.timedelta td) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to total microseconds `<'int'>`.
 * 
*/

static CYTHON_INLINE PY_LONG_LONG __pyx_f_7cytimes_5utils_td_to_us(PyDateTime_Delta *__pyx_v_td) {
  PY_LONG_LONG __pyx_r;

  /* "utils.pxd":4785
 *     return (
 *         (<long long> td.day)        * US_DAY +
 *         (<long long> td.second)     * US_SECOND +             # <<<<<<<<<<<<<<
 *         (<long long> td.microsecond)
 *     )
*/
  __pyx_r = (((((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_td)) * __pyx_v_7cytimes_5utils_US_DAY) + (((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_td)) * __pyx_v_7cytimes_5utils_US_SECOND)) + ((PY_LONG_LONG)__pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_td)));
  goto __pyx_L0;

  /* "utils.pxd":4777
 *     return ("-%02d%02d" if neg else "+%02d%02d") % (hh, mi)
 * 
 * cdef inline long long td_to_us(datetime.timedelta td) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to total microseconds `<'int'>`.
 * 
*/

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

/* "utils.pxd":4789
 *     )
 * 
 * cdef inline double td_to_sec(datetime.timedelta td) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to total seconds `<'float'>`.
 * 
*/

static CYTHON_INLINE double __pyx_f_7cytimes_5utils_td_to_sec(PyDateTime_Delta *__pyx_v_td) {
  PY_LONG_LONG __pyx_v_days;
  PY_LONG_LONG __pyx_v_sec;
  double __pyx_v_fsec;
  double __pyx_v_frac;
  double __pyx_r;

  /* "utils.pxd":4796
 *     """
 *     cdef:
 *         long long days = td.day             # <<<<<<<<<<<<<<
 *         long long sec = td.second
 *         double fsec = <double> (days * SS_DAY + sec)
*/
  __pyx_v_days = __pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_td);

  /* "utils.pxd":4797
 *     cdef:
 *         long long days = td.day
 *         long long sec = td.second             # <<<<<<<<<<<<<<
 *         double fsec = <double> (days * SS_DAY + sec)
 *         double frac = (<double> td.microsecond) * 1e-6
*/
  __pyx_v_sec = __pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_td);

  /* "utils.pxd":4798
 *         long long days = td.day
 *         long long sec = td.second
 *         double fsec = <double> (days * SS_DAY + sec)             # <<<<<<<<<<<<<<
 *         double frac = (<double> td.microsecond) * 1e-6
 *     return fsec + frac
*/
  __pyx_v_fsec = ((double)((__pyx_v_days * __pyx_v_7cytimes_5utils_SS_DAY) + __pyx_v_sec));

  /* "utils.pxd":4799
 *         long long sec = td.second
 *         double fsec = <double> (days * SS_DAY + sec)
 *         double frac = (<double> td.microsecond) * 1e-6             # <<<<<<<<<<<<<<
 *     return fsec + frac
 * 
*/
  __pyx_v_frac = (((double)__pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_td)) * 1e-6);

  /* "utils.pxd":4800
 *         double fsec = <double> (days * SS_DAY + sec)
 *         double frac = (<double> td.microsecond) * 1e-6
 *     return fsec + frac             # <<<<<<<<<<<<<<
 * 
 * # . conversion: from
*/
  __pyx_r = (__pyx_v_fsec + __pyx_v_frac);
  goto __pyx_L0;

  /* "utils.pxd":4789
 *     )
 * 
 * cdef inline double td_to_sec(datetime.timedelta td) noexcept:             # <<<<<<<<<<<<<<
 *     """Convert a `datetime.timedelta` to total seconds `<'float'>`.
 * 
*/

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

/* "utils.pxd":4803
 * 
 * # . conversion: from
 * cdef inline datetime.timedelta td_fr_us(long long value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from microseconds `<'datetime.timedelta'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_fr_us(PY_LONG_LONG __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_td_fr_us *__pyx_optional_args) {
  PyObject *__pyx_v_tdclass = ((PyObject *)Py_None);
  PY_LONG_LONG __pyx_v_q;
  PY_LONG_LONG __pyx_v_r;
  int __pyx_v_dd;
  int __pyx_v_ss;
  int __pyx_v_us;
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_td_new __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_fr_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tdclass = __pyx_optional_args->tdclass;
    }
  }

  /* "utils.pxd":4814
 *     cdef int dd, ss, us
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1; r += US_DAY
*/
  __pyx_v_q = (__pyx_v_value / __pyx_v_7cytimes_5utils_US_DAY);
  __pyx_v_r = (__pyx_v_value % __pyx_v_7cytimes_5utils_US_DAY);

  /* "utils.pxd":4815
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 *         dd = <int> q
*/
  __pyx_t_1 = (__pyx_v_r < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":4816
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:
 *             q -= 1; r += US_DAY             # <<<<<<<<<<<<<<
 *         dd = <int> q
 *         ss = <int> (r / US_SECOND)
*/
    __pyx_v_q = (__pyx_v_q - 1);
    __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_DAY);

    /* "utils.pxd":4815
 *     with cython.cdivision(True):
 *         q = value / US_DAY; r = value % US_DAY
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1; r += US_DAY
 *         dd = <int> q
*/
  }

  /* "utils.pxd":4817
 *         if r < 0:
 *             q -= 1; r += US_DAY
 *         dd = <int> q             # <<<<<<<<<<<<<<
 *         ss = <int> (r / US_SECOND)
 *         us = <int> (r % US_SECOND)
*/
  __pyx_v_dd = ((int)__pyx_v_q);

  /* "utils.pxd":4818
 *             q -= 1; r += US_DAY
 *         dd = <int> q
 *         ss = <int> (r / US_SECOND)             # <<<<<<<<<<<<<<
 *         us = <int> (r % US_SECOND)
 *     return td_new(dd, ss, us, tdclass)
*/
  __pyx_v_ss = ((int)(__pyx_v_r / __pyx_v_7cytimes_5utils_US_SECOND));

  /* "utils.pxd":4819
 *         dd = <int> q
 *         ss = <int> (r / US_SECOND)
 *         us = <int> (r % US_SECOND)             # <<<<<<<<<<<<<<
 *     return td_new(dd, ss, us, tdclass)
 * 
*/
  __pyx_v_us = ((int)(__pyx_v_r % __pyx_v_7cytimes_5utils_US_SECOND));

  /* "utils.pxd":4820
 *         ss = <int> (r / US_SECOND)
 *         us = <int> (r % US_SECOND)
 *     return td_new(dd, ss, us, tdclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta td_fr_sec(double value, object tdclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 4;
  __pyx_t_3.days = __pyx_v_dd;
  __pyx_t_3.seconds = __pyx_v_ss;
  __pyx_t_3.microseconds = __pyx_v_us;
  __pyx_t_3.tdclass = __pyx_v_tdclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_td_new(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4820, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4803
 * 
 * # . conversion: from
 * cdef inline datetime.timedelta td_fr_us(long long value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from microseconds `<'datetime.timedelta'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.td_fr_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4822
 *     return td_new(dd, ss, us, tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_sec(double value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from seconds `<'datetime.timedelta'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_fr_sec(double __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_td_fr_sec *__pyx_optional_args) {
  PyObject *__pyx_v_tdclass = ((PyObject *)Py_None);
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PY_LONG_LONG __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_td_fr_us __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_fr_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tdclass = __pyx_optional_args->tdclass;
    }
  }

  /* "utils.pxd":4830
 *     :returns `<'datetime.timedelta'>`: The resulting timedelta (or subclass if `tdclass` is specified).
 *     """
 *     return td_fr_us(sec_to_us(value), tdclass)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta td_fr_td(datetime.timedelta td, object tdclass=None):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_sec_to_us(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4830, __pyx_L1_error)
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.tdclass = __pyx_v_tdclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_td_fr_us(__pyx_t_1, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4830, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4822
 *     return td_new(dd, ss, us, tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_sec(double value, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from seconds `<'datetime.timedelta'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.td_fr_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4832
 *     return td_fr_us(sec_to_us(value), tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_td(datetime.timedelta td, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from another timedelta (or subclass) `<'datetime.timedelta'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td_fr_td(PyDateTime_Delta *__pyx_v_td, struct __pyx_opt_args_7cytimes_5utils_td_fr_td *__pyx_optional_args) {
  PyObject *__pyx_v_tdclass = ((PyObject *)Py_None);
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_td_new __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td_fr_td", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tdclass = __pyx_optional_args->tdclass;
    }
  }
  __Pyx_INCREF(__pyx_v_tdclass);

  /* "utils.pxd":4842
 *         with the same days, seconds and microseconds.
 *     """
 *     if tdclass is None:             # <<<<<<<<<<<<<<
 *         tdclass = datetime.timedelta
 *     if tdclass is type(td):
*/
  __pyx_t_1 = (__pyx_v_tdclass == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":4843
 *     """
 *     if tdclass is None:
 *         tdclass = datetime.timedelta             # <<<<<<<<<<<<<<
 *     if tdclass is type(td):
 *         return td
*/
    __Pyx_INCREF((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta);
    __Pyx_DECREF_SET(__pyx_v_tdclass, ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta));

    /* "utils.pxd":4842
 *         with the same days, seconds and microseconds.
 *     """
 *     if tdclass is None:             # <<<<<<<<<<<<<<
 *         tdclass = datetime.timedelta
 *     if tdclass is type(td):
*/
  }

  /* "utils.pxd":4844
 *     if tdclass is None:
 *         tdclass = datetime.timedelta
 *     if tdclass is type(td):             # <<<<<<<<<<<<<<
 *         return td
 *     return td_new(td.day, td.second, td.microsecond, tdclass)
*/
  __pyx_t_1 = (__pyx_v_tdclass == ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_td))));
  if (__pyx_t_1) {

    /* "utils.pxd":4845
 *         tdclass = datetime.timedelta
 *     if tdclass is type(td):
 *         return td             # <<<<<<<<<<<<<<
 *     return td_new(td.day, td.second, td.microsecond, tdclass)
 * 
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_td);
    __pyx_r = __pyx_v_td;
    goto __pyx_L0;

    /* "utils.pxd":4844
 *     if tdclass is None:
 *         tdclass = datetime.timedelta
 *     if tdclass is type(td):             # <<<<<<<<<<<<<<
 *         return td
 *     return td_new(td.day, td.second, td.microsecond, tdclass)
*/
  }

  /* "utils.pxd":4846
 *     if tdclass is type(td):
 *         return td
 *     return td_new(td.day, td.second, td.microsecond, tdclass)             # <<<<<<<<<<<<<<
 * 
 * # datetime.tzinfo --------------------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 4;
  __pyx_t_3.days = __pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_td);
  __pyx_t_3.seconds = __pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_td);
  __pyx_t_3.microseconds = __pyx_f_7cpython_8datetime_9timedelta_11microsecond_microsecond(__pyx_v_td);
  __pyx_t_3.tdclass = __pyx_v_tdclass;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_td_new(&__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4832
 *     return td_fr_us(sec_to_us(value), tdclass)
 * 
 * cdef inline datetime.timedelta td_fr_td(datetime.timedelta td, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Create timedelta from another timedelta (or subclass) `<'datetime.timedelta'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.td_fr_td", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tdclass);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4850
 * # datetime.tzinfo --------------------------------------------------------------------------------------
 * # . generate
 * cdef inline object tz_new(int hours=0, int minites=0, int seconds=0):             # <<<<<<<<<<<<<<
 *     """Create a new fixed-offset timezone `<'datetime.timezone'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_new(struct __pyx_opt_args_7cytimes_5utils_tz_new *__pyx_optional_args) {
  int __pyx_v_hours = ((int)0);
  int __pyx_v_minites = ((int)0);
  int __pyx_v_seconds = ((int)0);
  PY_LONG_LONG __pyx_v_sec;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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[9];
  PyObject *__pyx_t_10 = NULL;
  size_t __pyx_t_11;
  struct __pyx_opt_args_7cpython_8datetime_timezone_new __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_new", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hours = __pyx_optional_args->hours;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_minites = __pyx_optional_args->minites;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_seconds = __pyx_optional_args->seconds;
        }
      }
    }
  }

  /* "utils.pxd":4862
 *     """
 *     # Range: inclusive 24:00 per CPython (datetime.timezone)
 *     cdef long long sec = hours * 3_600 + minites * 60 + seconds             # <<<<<<<<<<<<<<
 *     if not -86400 < sec < 86400:
 *         raise ValueError(
*/
  __pyx_v_sec = (((__pyx_v_hours * 0xE10) + (__pyx_v_minites * 60)) + __pyx_v_seconds);

  /* "utils.pxd":4863
 *     # Range: inclusive 24:00 per CPython (datetime.timezone)
 *     cdef long long sec = hours * 3_600 + minites * 60 + seconds
 *     if not -86400 < sec < 86400:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Timezone offset %d seconds from (hours=%d, minutes=%d, seconds=%d) out of range. "
*/
  __pyx_t_1 = (-86400LL < __pyx_v_sec);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_sec < 0x15180);
  }
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {

    /* "utils.pxd":4864
 *     cdef long long sec = hours * 3_600 + minites * 60 + seconds
 *     if not -86400 < sec < 86400:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Timezone offset %d seconds from (hours=%d, minutes=%d, seconds=%d) out of range. "
 *             "Must be strictly between [-86400..86400] (exclusive)" % (hours, minites, seconds, sec)
*/
    __pyx_t_4 = NULL;

    /* "utils.pxd":4866
 *         raise ValueError(
 *             "Timezone offset %d seconds from (hours=%d, minutes=%d, seconds=%d) out of range. "
 *             "Must be strictly between [-86400..86400] (exclusive)" % (hours, minites, seconds, sec)             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_v_hours, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_minites, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 4866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_v_seconds, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 4866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyUnicode_From_PY_LONG_LONG(__pyx_v_sec, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 4866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Timezone_offset;
    __pyx_t_9[1] = __pyx_t_5;
    __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_seconds_from_hours;
    __pyx_t_9[3] = __pyx_t_6;
    __pyx_t_9[4] = __pyx_mstate_global->__pyx_kp_u_minutes;
    __pyx_t_9[5] = __pyx_t_7;
    __pyx_t_9[6] = __pyx_mstate_global->__pyx_kp_u_seconds_2;
    __pyx_t_9[7] = __pyx_t_8;
    __pyx_t_9[8] = __pyx_mstate_global->__pyx_kp_u_out_of_range_Must_be_strictly_b;

    /* "utils.pxd":4865
 *     if not -86400 < sec < 86400:
 *         raise ValueError(
 *             "Timezone offset %d seconds from (hours=%d, minutes=%d, seconds=%d) out of range. "             # <<<<<<<<<<<<<<
 *             "Must be strictly between [-86400..86400] (exclusive)" % (hours, minites, seconds, sec)
 *         )
*/
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 9, 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 21 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 10 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 68, 127);
    if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 4865, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __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_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_10};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4864, __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(5, 4864, __pyx_L1_error)

    /* "utils.pxd":4863
 *     # Range: inclusive 24:00 per CPython (datetime.timezone)
 *     cdef long long sec = hours * 3_600 + minites * 60 + seconds
 *     if not -86400 < sec < 86400:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Timezone offset %d seconds from (hours=%d, minutes=%d, seconds=%d) out of range. "
*/
  }

  /* "utils.pxd":4870
 * 
 *     # New timezone
 *     return datetime.timezone_new(datetime.timedelta_new(0, sec, 0), None)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object tz_local(datetime.datetime dt=None):
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_f_7cpython_8datetime_timedelta_new(0, __pyx_v_sec, 0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 4870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.name = Py_None;
  __pyx_t_10 = __pyx_f_7cpython_8datetime_timezone_new(__pyx_t_3, &__pyx_t_12); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 4870, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_10;
  __pyx_t_10 = 0;
  goto __pyx_L0;

  /* "utils.pxd":4850
 * # datetime.tzinfo --------------------------------------------------------------------------------------
 * # . generate
 * cdef inline object tz_new(int hours=0, int minites=0, int seconds=0):             # <<<<<<<<<<<<<<
 *     """Create a new fixed-offset timezone `<'datetime.timezone'>`.
 * 
*/

  /* 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_10);
  __Pyx_AddTraceback("cytimes.utils.tz_new", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4872
 *     return datetime.timezone_new(datetime.timedelta_new(0, sec, 0), None)
 * 
 * cdef inline object tz_local(datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Get the process-local timezone `<'zoneinfo.ZoneInfo/datetime.timezone'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_local(struct __pyx_opt_args_7cytimes_5utils_tz_local *__pyx_optional_args) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("tz_local", 0);
  if (__pyx_optional_args) {
  }

  /* "utils.pxd":4888
 *       future transitions.
 *     """
 *     return _LOCAL_TIMEZONE             # <<<<<<<<<<<<<<
 * 
 * cdef inline int tz_local_sec(datetime.datetime dt=None) except -200_000:
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_7cytimes_5utils__LOCAL_TIMEZONE);
  __pyx_r = __pyx_v_7cytimes_5utils__LOCAL_TIMEZONE;
  goto __pyx_L0;

  /* "utils.pxd":4872
 *     return datetime.timezone_new(datetime.timedelta_new(0, sec, 0), None)
 * 
 * cdef inline object tz_local(datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Get the process-local timezone `<'zoneinfo.ZoneInfo/datetime.timezone'>`.
 * 
*/

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

/* "utils.pxd":4890
 *     return _LOCAL_TIMEZONE
 * 
 * cdef inline int tz_local_sec(datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the local UTC offset (in whole seconds) at the given instant `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_tz_local_sec(struct __pyx_opt_args_7cytimes_5utils_tz_local_sec *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PY_LONG_LONG __pyx_v_ts1;
  PY_LONG_LONG __pyx_v_ts2;
  double __pyx_v_ts;
  struct tm __pyx_v_loc;
  struct tm __pyx_v_gmt;
  PY_LONG_LONG __pyx_v_ord_loc;
  PY_LONG_LONG __pyx_v_ord_gmt;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PY_LONG_LONG __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_dt_replace_fold __pyx_t_4;
  int __pyx_t_5;
  double __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt_to_sec __pyx_t_7;
  struct tm __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_local_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":4909
 * 
 *     # Decide the timestamp (seconds since epoch)
 *     if dt is None:             # <<<<<<<<<<<<<<
 *         # current time
 *         ts = unix_time()
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_dt) == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":4911
 *     if dt is None:
 *         # current time
 *         ts = unix_time()             # <<<<<<<<<<<<<<
 *     else:
 *         # naive: interpret as local wall time
*/
    __pyx_v_ts = __pyx_f_7cpython_4time_time();

    /* "utils.pxd":4909
 * 
 *     # Decide the timestamp (seconds since epoch)
 *     if dt is None:             # <<<<<<<<<<<<<<
 *         # current time
 *         ts = unix_time()
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":4914
 *     else:
 *         # naive: interpret as local wall time
 *         if dt.tzinfo is None:             # <<<<<<<<<<<<<<
 *             ts1 = dt_local_mktime(dt)
 *             # probe the other fold to handle gaps/ambiguous times
*/
  /*else*/ {
    __pyx_t_2 = __pyx_f_7cpython_8datetime_8datetime_6tzinfo_tzinfo(__pyx_v_dt); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4914, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = (__pyx_t_2 == Py_None);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (__pyx_t_1) {

      /* "utils.pxd":4915
 *         # naive: interpret as local wall time
 *         if dt.tzinfo is None:
 *             ts1 = dt_local_mktime(dt)             # <<<<<<<<<<<<<<
 *             # probe the other fold to handle gaps/ambiguous times
 *             ts2 = dt_local_mktime(dt_replace_fold(dt, 1 - dt.fold, None))
*/
      __pyx_t_3 = __pyx_f_7cytimes_5utils_dt_local_mktime(__pyx_v_dt); if (unlikely(__pyx_t_3 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4915, __pyx_L1_error)
      __pyx_v_ts1 = __pyx_t_3;

      /* "utils.pxd":4917
 *             ts1 = dt_local_mktime(dt)
 *             # probe the other fold to handle gaps/ambiguous times
 *             ts2 = dt_local_mktime(dt_replace_fold(dt, 1 - dt.fold, None))             # <<<<<<<<<<<<<<
 *             if ts2 != ts1 and ((ts2 > ts1) == dt.fold):
 *                 ts = <double> ts2
*/
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.dtclass = Py_None;
      __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_replace_fold(__pyx_v_dt, (1 - __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt)), &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 4917, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __pyx_f_7cytimes_5utils_dt_local_mktime(((PyDateTime_DateTime *)__pyx_t_2)); if (unlikely(__pyx_t_3 == ((PY_LONG_LONG)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 4917, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_v_ts2 = __pyx_t_3;

      /* "utils.pxd":4918
 *             # probe the other fold to handle gaps/ambiguous times
 *             ts2 = dt_local_mktime(dt_replace_fold(dt, 1 - dt.fold, None))
 *             if ts2 != ts1 and ((ts2 > ts1) == dt.fold):             # <<<<<<<<<<<<<<
 *                 ts = <double> ts2
 *             else:
*/
      __pyx_t_5 = (__pyx_v_ts2 != __pyx_v_ts1);
      if (__pyx_t_5) {
      } else {
        __pyx_t_1 = __pyx_t_5;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_5 = ((__pyx_v_ts2 > __pyx_v_ts1) == __pyx_f_7cpython_8datetime_8datetime_4fold_fold(__pyx_v_dt));
      __pyx_t_1 = __pyx_t_5;
      __pyx_L6_bool_binop_done:;
      if (__pyx_t_1) {

        /* "utils.pxd":4919
 *             ts2 = dt_local_mktime(dt_replace_fold(dt, 1 - dt.fold, None))
 *             if ts2 != ts1 and ((ts2 > ts1) == dt.fold):
 *                 ts = <double> ts2             # <<<<<<<<<<<<<<
 *             else:
 *                 ts = <double> ts1
*/
        __pyx_v_ts = ((double)__pyx_v_ts2);

        /* "utils.pxd":4918
 *             # probe the other fold to handle gaps/ambiguous times
 *             ts2 = dt_local_mktime(dt_replace_fold(dt, 1 - dt.fold, None))
 *             if ts2 != ts1 and ((ts2 > ts1) == dt.fold):             # <<<<<<<<<<<<<<
 *                 ts = <double> ts2
 *             else:
*/
        goto __pyx_L5;
      }

      /* "utils.pxd":4921
 *                 ts = <double> ts2
 *             else:
 *                 ts = <double> ts1             # <<<<<<<<<<<<<<
 *         # aware: use UTC instant
 *         else:
*/
      /*else*/ {
        __pyx_v_ts = ((double)__pyx_v_ts1);
      }
      __pyx_L5:;

      /* "utils.pxd":4914
 *     else:
 *         # naive: interpret as local wall time
 *         if dt.tzinfo is None:             # <<<<<<<<<<<<<<
 *             ts1 = dt_local_mktime(dt)
 *             # probe the other fold to handle gaps/ambiguous times
*/
      goto __pyx_L4;
    }

    /* "utils.pxd":4924
 *         # aware: use UTC instant
 *         else:
 *             ts = dt_to_sec(dt, True)             # <<<<<<<<<<<<<<
 * 
 *     # Compute offset via ordinals + time-of-day
*/
    /*else*/ {
      __pyx_t_7.__pyx_n = 1;
      __pyx_t_7.utc = 1;
      __pyx_t_6 = __pyx_f_7cytimes_5utils_dt_to_sec(__pyx_v_dt, &__pyx_t_7); if (unlikely(__pyx_t_6 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(5, 4924, __pyx_L1_error)
      __pyx_v_ts = __pyx_t_6;
    }
    __pyx_L4:;
  }
  __pyx_L3:;

  /* "utils.pxd":4927
 * 
 *     # Compute offset via ordinals + time-of-day
 *     loc = tm_localtime(ts)             # <<<<<<<<<<<<<<
 *     ord_loc = ymd_to_ord(loc.tm_year, loc.tm_mon, loc.tm_mday)
 *     gmt = tm_gmtime(ts)
*/
  __pyx_t_8 = __pyx_f_7cytimes_5utils_tm_localtime(__pyx_v_ts); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 4927, __pyx_L1_error)
  __pyx_v_loc = __pyx_t_8;

  /* "utils.pxd":4928
 *     # Compute offset via ordinals + time-of-day
 *     loc = tm_localtime(ts)
 *     ord_loc = ymd_to_ord(loc.tm_year, loc.tm_mon, loc.tm_mday)             # <<<<<<<<<<<<<<
 *     gmt = tm_gmtime(ts)
 *     ord_gmt = ymd_to_ord(gmt.tm_year, gmt.tm_mon, gmt.tm_mday)
*/
  __pyx_v_ord_loc = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_loc.tm_year, __pyx_v_loc.tm_mon, __pyx_v_loc.tm_mday);

  /* "utils.pxd":4929
 *     loc = tm_localtime(ts)
 *     ord_loc = ymd_to_ord(loc.tm_year, loc.tm_mon, loc.tm_mday)
 *     gmt = tm_gmtime(ts)             # <<<<<<<<<<<<<<
 *     ord_gmt = ymd_to_ord(gmt.tm_year, gmt.tm_mon, gmt.tm_mday)
 *     return (
*/
  __pyx_t_8 = __pyx_f_7cytimes_5utils_tm_gmtime(__pyx_v_ts); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 4929, __pyx_L1_error)
  __pyx_v_gmt = __pyx_t_8;

  /* "utils.pxd":4930
 *     ord_loc = ymd_to_ord(loc.tm_year, loc.tm_mon, loc.tm_mday)
 *     gmt = tm_gmtime(ts)
 *     ord_gmt = ymd_to_ord(gmt.tm_year, gmt.tm_mon, gmt.tm_mday)             # <<<<<<<<<<<<<<
 *     return (
 *         (ord_loc - ord_gmt)         * SS_DAY    +
*/
  __pyx_v_ord_gmt = __pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_v_gmt.tm_year, __pyx_v_gmt.tm_mon, __pyx_v_gmt.tm_mday);

  /* "utils.pxd":4934
 *         (ord_loc - ord_gmt)         * SS_DAY    +
 *         (loc.tm_hour - gmt.tm_hour) * SS_HOUR   +
 *         (loc.tm_min - gmt.tm_min)   * SS_MINUTE +             # <<<<<<<<<<<<<<
 *         (loc.tm_sec - gmt.tm_sec)
 *     )
*/
  __pyx_r = (((((__pyx_v_ord_loc - __pyx_v_ord_gmt) * __pyx_v_7cytimes_5utils_SS_DAY) + ((__pyx_v_loc.tm_hour - __pyx_v_gmt.tm_hour) * __pyx_v_7cytimes_5utils_SS_HOUR)) + ((__pyx_v_loc.tm_min - __pyx_v_gmt.tm_min) * __pyx_v_7cytimes_5utils_SS_MINUTE)) + (__pyx_v_loc.tm_sec - __pyx_v_gmt.tm_sec));
  goto __pyx_L0;

  /* "utils.pxd":4890
 *     return _LOCAL_TIMEZONE
 * 
 * cdef inline int tz_local_sec(datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the local UTC offset (in whole seconds) at the given instant `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.tz_local_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -200000;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4941
 * 
 * # . type check
 * cdef inline bint is_tz(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or sublcass of `datetime.tzinfo` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_tz(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4950
 *     >>> isinstance(obj, datetime.tzinfo)
 *     """
 *     return datetime.PyTZInfo_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_tz_exact(object obj) except -1:
*/
  __pyx_r = PyTZInfo_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4941
 * 
 * # . type check
 * cdef inline bint is_tz(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or sublcass of `datetime.tzinfo` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4952
 *     return datetime.PyTZInfo_Check(obj)
 * 
 * cdef inline bint is_tz_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.tzinfo` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_tz_exact(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":4961
 *     >>> type(obj) is datetime.date
 *     """
 *     return datetime.PyTZInfo_CheckExact(obj)             # <<<<<<<<<<<<<<
 * 
 * # . access
*/
  __pyx_r = PyTZInfo_CheckExact(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":4952
 *     return datetime.PyTZInfo_Check(obj)
 * 
 * cdef inline bint is_tz_exact(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an exact `datetime.tzinfo` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":4964
 * 
 * # . access
 * cdef inline str tz_name(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the display name from a tzinfo `<'str/None'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_name(PyObject *__pyx_v_tz, struct __pyx_opt_args_7cytimes_5utils_tz_name *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PyObject *__pyx_v_err = NULL;
  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;
  size_t __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __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[5];
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  char const *__pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_name", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":4975
 *     >>> tz.tzname(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  __pyx_t_1 = (__pyx_v_tz == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":4976
 *     """
 *     if tz is None:
 *         return None             # <<<<<<<<<<<<<<
 *     try:
 *         return tz.tzname(dt)
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "utils.pxd":4975
 *     >>> tz.tzname(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  }

  /* "utils.pxd":4977
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.tzname(dt)
 *     except Exception as err:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "utils.pxd":4978
 *         return None
 *     try:
 *         return tz.tzname(dt)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         if not is_tz(tz):
*/
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_6 = __pyx_v_tz;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)__pyx_v_dt)};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_tzname, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 4978, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(PyUnicode_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_5))) __PYX_ERR(5, 4978, __pyx_L4_error)
      __pyx_r = ((PyObject*)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L8_try_return;

      /* "utils.pxd":4977
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.tzname(dt)
 *     except Exception as err:
*/
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "utils.pxd":4979
 *     try:
 *         return tz.tzname(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("cytimes.utils.tz_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(5, 4979, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_err = __pyx_t_6;
      /*try:*/ {

        /* "utils.pxd":4980
 *         return tz.tzname(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_tz(__pyx_v_tz); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 4980, __pyx_L15_error)
        __pyx_t_10 = (!__pyx_t_1);
        if (unlikely(__pyx_t_10)) {

          /* "utils.pxd":4981
 *     except Exception as err:
 *         if not is_tz(tz):
 *             raise TypeError(             # <<<<<<<<<<<<<<
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
*/
          __pyx_t_12 = NULL;

          /* "utils.pxd":4983
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))             # <<<<<<<<<<<<<<
 *             ) from err
 *         raise err
*/
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tz), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 4983, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_tz))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 4983, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_datetime;
          __pyx_t_15[1] = __pyx_t_13;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__9;
          __pyx_t_15[3] = __pyx_t_14;
          __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u__2;

          /* "utils.pxd":4982
 *         if not is_tz(tz):
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "             # <<<<<<<<<<<<<<
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
*/
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 55 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 4982, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_7 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 4981, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_11);
          }

          /* "utils.pxd":4984
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err             # <<<<<<<<<<<<<<
 *         raise err
 * 
*/
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(5, 4981, __pyx_L15_error)

          /* "utils.pxd":4980
 *         return tz.tzname(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        }

        /* "utils.pxd":4985
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
 *         raise err             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta tz_dst(object tz, datetime.datetime dt=None):
*/
        __Pyx_Raise(__pyx_v_err, 0, 0, 0);
        __PYX_ERR(5, 4985, __pyx_L15_error)
      }

      /* "utils.pxd":4979
 *     try:
 *         return tz.tzname(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
      /*finally:*/ {
        __pyx_L15_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_8 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L6_except_error;
        }
      }
    }
    goto __pyx_L6_except_error;

    /* "utils.pxd":4977
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.tzname(dt)
 *     except Exception as err:
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }

  /* "utils.pxd":4964
 * 
 * # . access
 * cdef inline str tz_name(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the display name from a tzinfo `<'str/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __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("cytimes.utils.tz_name", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":4987
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_dst(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the DST offset of a tzinfo `<'timedelta/None'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_tz_dst(PyObject *__pyx_v_tz, struct __pyx_opt_args_7cytimes_5utils_tz_dst *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_Delta *__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;
  size_t __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __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[5];
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  char const *__pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_dst", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":4998
 *     >>> tz.dst(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  __pyx_t_1 = (__pyx_v_tz == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":4999
 *     """
 *     if tz is None:
 *         return None             # <<<<<<<<<<<<<<
 *     try:
 *         return tz.dst(dt)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_Delta *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "utils.pxd":4998
 *     >>> tz.dst(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  }

  /* "utils.pxd":5000
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.dst(dt)
 *     except Exception as err:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "utils.pxd":5001
 *         return None
 *     try:
 *         return tz.dst(dt)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         if not is_tz(tz):
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = __pyx_v_tz;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)__pyx_v_dt)};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_dst, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5001, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(5, 5001, __pyx_L4_error)
      __pyx_r = ((PyDateTime_Delta *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L8_try_return;

      /* "utils.pxd":5000
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.dst(dt)
 *     except Exception as err:
*/
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "utils.pxd":5002
 *     try:
 *         return tz.dst(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("cytimes.utils.tz_dst", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(5, 5002, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_err = __pyx_t_6;
      /*try:*/ {

        /* "utils.pxd":5003
 *         return tz.dst(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_tz(__pyx_v_tz); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5003, __pyx_L15_error)
        __pyx_t_10 = (!__pyx_t_1);
        if (unlikely(__pyx_t_10)) {

          /* "utils.pxd":5004
 *     except Exception as err:
 *         if not is_tz(tz):
 *             raise TypeError(             # <<<<<<<<<<<<<<
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
*/
          __pyx_t_12 = NULL;

          /* "utils.pxd":5006
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))             # <<<<<<<<<<<<<<
 *             ) from err
 *         raise err
*/
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tz), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 5006, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_tz))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 5006, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_datetime;
          __pyx_t_15[1] = __pyx_t_13;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__9;
          __pyx_t_15[3] = __pyx_t_14;
          __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u__2;

          /* "utils.pxd":5005
 *         if not is_tz(tz):
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "             # <<<<<<<<<<<<<<
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
*/
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 55 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 5005, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_7 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 5004, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_11);
          }

          /* "utils.pxd":5007
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err             # <<<<<<<<<<<<<<
 *         raise err
 * 
*/
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(5, 5004, __pyx_L15_error)

          /* "utils.pxd":5003
 *         return tz.dst(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        }

        /* "utils.pxd":5008
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
 *         raise err             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta tz_utcoffset(object tz, datetime.datetime dt=None):
*/
        __Pyx_Raise(__pyx_v_err, 0, 0, 0);
        __PYX_ERR(5, 5008, __pyx_L15_error)
      }

      /* "utils.pxd":5002
 *     try:
 *         return tz.dst(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
      /*finally:*/ {
        __pyx_L15_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_8 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L6_except_error;
        }
      }
    }
    goto __pyx_L6_except_error;

    /* "utils.pxd":5000
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.dst(dt)
 *     except Exception as err:
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }

  /* "utils.pxd":4987
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_dst(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the DST offset of a tzinfo `<'timedelta/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __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("cytimes.utils.tz_dst", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5010
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_utcoffset(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset from a tzinfo `<'timedelta/None'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_tz_utcoffset(PyObject *__pyx_v_tz, struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_Delta *__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;
  size_t __pyx_t_7;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  int __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[5];
  PyObject *__pyx_t_16 = NULL;
  int __pyx_t_17;
  char const *__pyx_t_18;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_utcoffset", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":5021
 *     >>> tz.utcoffset(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  __pyx_t_1 = (__pyx_v_tz == Py_None);
  if (__pyx_t_1) {

    /* "utils.pxd":5022
 *     """
 *     if tz is None:
 *         return None             # <<<<<<<<<<<<<<
 *     try:
 *         return tz.utcoffset(dt)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_r = ((PyDateTime_Delta *)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "utils.pxd":5021
 *     >>> tz.utcoffset(dt)
 *     """
 *     if tz is None:             # <<<<<<<<<<<<<<
 *         return None
 *     try:
*/
  }

  /* "utils.pxd":5023
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.utcoffset(dt)
 *     except Exception as err:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    /*try:*/ {

      /* "utils.pxd":5024
 *         return None
 *     try:
 *         return tz.utcoffset(dt)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         if not is_tz(tz):
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = __pyx_v_tz;
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, ((PyObject *)__pyx_v_dt)};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_utcoffset, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5024, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_timedelta))))) __PYX_ERR(5, 5024, __pyx_L4_error)
      __pyx_r = ((PyDateTime_Delta *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L8_try_return;

      /* "utils.pxd":5023
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.utcoffset(dt)
 *     except Exception as err:
*/
    }
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "utils.pxd":5025
 *     try:
 *         return tz.utcoffset(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_8) {
      __Pyx_AddTraceback("cytimes.utils.tz_utcoffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_9) < 0) __PYX_ERR(5, 5025, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_v_err = __pyx_t_6;
      /*try:*/ {

        /* "utils.pxd":5026
 *         return tz.utcoffset(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_tz(__pyx_v_tz); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5026, __pyx_L15_error)
        __pyx_t_10 = (!__pyx_t_1);
        if (unlikely(__pyx_t_10)) {

          /* "utils.pxd":5027
 *     except Exception as err:
 *         if not is_tz(tz):
 *             raise TypeError(             # <<<<<<<<<<<<<<
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
*/
          __pyx_t_12 = NULL;

          /* "utils.pxd":5029
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))             # <<<<<<<<<<<<<<
 *             ) from err
 *         raise err
*/
          __pyx_t_13 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tz), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 5029, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_14 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_tz))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 5029, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_14);
          __pyx_t_15[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_datetime;
          __pyx_t_15[1] = __pyx_t_13;
          __pyx_t_15[2] = __pyx_mstate_global->__pyx_kp_u__9;
          __pyx_t_15[3] = __pyx_t_14;
          __pyx_t_15[4] = __pyx_mstate_global->__pyx_kp_u__2;

          /* "utils.pxd":5028
 *         if not is_tz(tz):
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "             # <<<<<<<<<<<<<<
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
*/
          __pyx_t_16 = __Pyx_PyUnicode_Join(__pyx_t_15, 5, 55 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_14));
          if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 5028, __pyx_L15_error)
          __Pyx_GOTREF(__pyx_t_16);
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
          __pyx_t_7 = 1;
          {
            PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_t_16};
            __pyx_t_11 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
            __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
            __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
            if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 5027, __pyx_L15_error)
            __Pyx_GOTREF(__pyx_t_11);
          }

          /* "utils.pxd":5030
 *                 "Expects an instance of 'datetime.tzinfo', "
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err             # <<<<<<<<<<<<<<
 *         raise err
 * 
*/
          __Pyx_Raise(__pyx_t_11, 0, 0, __pyx_v_err);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __PYX_ERR(5, 5027, __pyx_L15_error)

          /* "utils.pxd":5026
 *         return tz.utcoffset(dt)
 *     except Exception as err:
 *         if not is_tz(tz):             # <<<<<<<<<<<<<<
 *             raise TypeError(
 *                 "Expects an instance of 'datetime.tzinfo', "
*/
        }

        /* "utils.pxd":5031
 *                 "instead got '%s' %s." % (tz, type(tz))
 *             ) from err
 *         raise err             # <<<<<<<<<<<<<<
 * 
 * cdef inline int tz_utcoffset_sec(object tz, datetime.datetime dt=None) except -200_000:
*/
        __Pyx_Raise(__pyx_v_err, 0, 0, 0);
        __PYX_ERR(5, 5031, __pyx_L15_error)
      }

      /* "utils.pxd":5025
 *     try:
 *         return tz.utcoffset(dt)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         if not is_tz(tz):
 *             raise TypeError(
*/
      /*finally:*/ {
        __pyx_L15_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
          if ( unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __Pyx_XGOTREF(__pyx_t_23);
          __Pyx_XGOTREF(__pyx_t_24);
          __pyx_t_8 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
          __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
          goto __pyx_L6_except_error;
        }
      }
    }
    goto __pyx_L6_except_error;

    /* "utils.pxd":5023
 *     if tz is None:
 *         return None
 *     try:             # <<<<<<<<<<<<<<
 *         return tz.utcoffset(dt)
 *     except Exception as err:
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_return:;
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L0;
  }

  /* "utils.pxd":5010
 *         raise err
 * 
 * cdef inline datetime.timedelta tz_utcoffset(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset from a tzinfo `<'timedelta/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_9);
  __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("cytimes.utils.tz_utcoffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5033
 *         raise err
 * 
 * cdef inline int tz_utcoffset_sec(object tz, datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in total seconds from a tzinfo `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_tz_utcoffset_sec(PyObject *__pyx_v_tz, struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset_sec *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PyDateTime_Delta *__pyx_v_off = 0;
  int __pyx_v_sec;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9[7];
  PyObject *__pyx_t_10 = NULL;
  size_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("tz_utcoffset_sec", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":5042
 *         or sentinel (-100,000) when the offset is unavailable.
 *     """
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)             # <<<<<<<<<<<<<<
 *     if off is None:
 *         return NULL_TZOFFSET
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.dt = __pyx_v_dt;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_tz, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5042, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":5043
 *     """
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)
 *     if off is None:             # <<<<<<<<<<<<<<
 *         return NULL_TZOFFSET
 * 
*/
  __pyx_t_3 = (((PyObject *)__pyx_v_off) == Py_None);
  if (__pyx_t_3) {

    /* "utils.pxd":5044
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)
 *     if off is None:
 *         return NULL_TZOFFSET             # <<<<<<<<<<<<<<
 * 
 *     cdef int sec = (off.day * (<int> SS_DAY) + off.second)
*/
    __pyx_r = __pyx_v_7cytimes_5utils_NULL_TZOFFSET;
    goto __pyx_L0;

    /* "utils.pxd":5043
 *     """
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)
 *     if off is None:             # <<<<<<<<<<<<<<
 *         return NULL_TZOFFSET
 * 
*/
  }

  /* "utils.pxd":5046
 *         return NULL_TZOFFSET
 * 
 *     cdef int sec = (off.day * (<int> SS_DAY) + off.second)             # <<<<<<<<<<<<<<
 *     if not -86400 < sec < 86400:
 *         raise ValueError(
*/
  __pyx_v_sec = ((__pyx_f_7cpython_8datetime_9timedelta_3day_day(__pyx_v_off) * ((int)__pyx_v_7cytimes_5utils_SS_DAY)) + __pyx_f_7cpython_8datetime_9timedelta_6second_second(__pyx_v_off));

  /* "utils.pxd":5047
 * 
 *     cdef int sec = (off.day * (<int> SS_DAY) + off.second)
 *     if not -86400 < sec < 86400:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Timezone offset %d seconds from (%s, %s) out of range. "
*/
  __pyx_t_3 = (-86400L < __pyx_v_sec);
  if (__pyx_t_3) {
    __pyx_t_3 = (__pyx_v_sec < 0x15180);
  }
  __pyx_t_4 = (!__pyx_t_3);
  if (unlikely(__pyx_t_4)) {

    /* "utils.pxd":5048
 *     cdef int sec = (off.day * (<int> SS_DAY) + off.second)
 *     if not -86400 < sec < 86400:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Timezone offset %d seconds from (%s, %s) out of range. "
 *             "Must be strictly between [-86400..86400] (exclusive)." % (sec, tz, type(tz))
*/
    __pyx_t_5 = NULL;

    /* "utils.pxd":5050
 *         raise ValueError(
 *             "Timezone offset %d seconds from (%s, %s) out of range. "
 *             "Must be strictly between [-86400..86400] (exclusive)." % (sec, tz, type(tz))             # <<<<<<<<<<<<<<
 *         )
 *     return sec
*/
    __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_sec, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 5050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_tz), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_tz))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 5050, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9[0] = __pyx_mstate_global->__pyx_kp_u_Timezone_offset;
    __pyx_t_9[1] = __pyx_t_6;
    __pyx_t_9[2] = __pyx_mstate_global->__pyx_kp_u_seconds_from;
    __pyx_t_9[3] = __pyx_t_7;
    __pyx_t_9[4] = __pyx_mstate_global->__pyx_kp_u__3;
    __pyx_t_9[5] = __pyx_t_8;
    __pyx_t_9[6] = __pyx_mstate_global->__pyx_kp_u_out_of_range_Must_be_strictly_b_2;

    /* "utils.pxd":5049
 *     if not -86400 < sec < 86400:
 *         raise ValueError(
 *             "Timezone offset %d seconds from (%s, %s) out of range. "             # <<<<<<<<<<<<<<
 *             "Must be strictly between [-86400..86400] (exclusive)." % (sec, tz, type(tz))
 *         )
*/
    __pyx_t_10 = __Pyx_PyUnicode_Join(__pyx_t_9, 7, 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 69, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8));
    if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 5049, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __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_t_11 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_10};
      __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5048, __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(5, 5048, __pyx_L1_error)

    /* "utils.pxd":5047
 * 
 *     cdef int sec = (off.day * (<int> SS_DAY) + off.second)
 *     if not -86400 < sec < 86400:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Timezone offset %d seconds from (%s, %s) out of range. "
*/
  }

  /* "utils.pxd":5052
 *             "Must be strictly between [-86400..86400] (exclusive)." % (sec, tz, type(tz))
 *         )
 *     return sec             # <<<<<<<<<<<<<<
 * 
 * cdef inline str tz_utcformat(object tz, datetime.datetime dt=None):
*/
  __pyx_r = __pyx_v_sec;
  goto __pyx_L0;

  /* "utils.pxd":5033
 *         raise err
 * 
 * cdef inline int tz_utcoffset_sec(object tz, datetime.datetime dt=None) except -200_000:             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in total seconds from a tzinfo `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __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("cytimes.utils.tz_utcoffset_sec", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -200000;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5054
 *     return sec
 * 
 * cdef inline str tz_utcformat(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in ISO format string (HHMM) from a tzinfo `<'str/None'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_tz_utcformat(PyObject *__pyx_v_tz, struct __pyx_opt_args_7cytimes_5utils_tz_utcformat *__pyx_optional_args) {
  PyDateTime_DateTime *__pyx_v_dt = ((PyDateTime_DateTime *)Py_None);
  PyDateTime_Delta *__pyx_v_off = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_utcoffset __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("tz_utcformat", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_dt = __pyx_optional_args->dt;
    }
  }

  /* "utils.pxd":5063
 *         or `None` when the offset is unavailable.
 *     """
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)             # <<<<<<<<<<<<<<
 *     return None if off is None else td_utcformat(off)
 * 
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.dt = __pyx_v_dt;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_tz_utcoffset(__pyx_v_tz, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5063, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_off = ((PyDateTime_Delta *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":5064
 *     """
 *     cdef datetime.timedelta off = tz_utcoffset(tz, dt)
 *     return None if off is None else td_utcformat(off)             # <<<<<<<<<<<<<<
 * 
 * # NumPy: time unit -------------------------------------------------------------------------------------
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = (((PyObject *)__pyx_v_off) == Py_None);
  if (__pyx_t_3) {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  } else {
    __pyx_t_4 = __pyx_f_7cytimes_5utils_td_utcformat(__pyx_v_off); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(5, 5064, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":5054
 *     return sec
 * 
 * cdef inline str tz_utcformat(object tz, datetime.datetime dt=None):             # <<<<<<<<<<<<<<
 *     """Return the UTC offset in ISO format string (HHMM) from a tzinfo `<'str/None'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.utils.tz_utcformat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_off);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5067
 * 
 * # NumPy: time unit -------------------------------------------------------------------------------------
 * cdef inline str nptime_unit_int2str(int unit):             # <<<<<<<<<<<<<<
 *     """Map numpy time unit to its corresponding string form `<'str'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_int2str(int __pyx_v_unit) {
  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("nptime_unit_int2str", 0);

  /* "utils.pxd":5075
 *     """
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return "ns"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5076
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return "ns"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return "us"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_ns);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_ns;
    goto __pyx_L0;

    /* "utils.pxd":5075
 *     """
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return "ns"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
  }

  /* "utils.pxd":5077
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return "ns"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         return "us"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5078
 *         return "ns"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return "us"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return "ms"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_us);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_us;
    goto __pyx_L0;

    /* "utils.pxd":5077
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return "ns"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         return "us"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
  }

  /* "utils.pxd":5079
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return "us"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         return "ms"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5080
 *         return "us"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return "ms"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return "s"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_ms);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_ms;
    goto __pyx_L0;

    /* "utils.pxd":5079
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return "us"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         return "ms"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
  }

  /* "utils.pxd":5081
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return "ms"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         return "s"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5082
 *         return "ms"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return "s"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return "m"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_s);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_s;
    goto __pyx_L0;

    /* "utils.pxd":5081
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return "ms"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         return "s"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
  }

  /* "utils.pxd":5083
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return "s"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         return "m"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5084
 *         return "s"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return "m"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return "h"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_m);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_m;
    goto __pyx_L0;

    /* "utils.pxd":5083
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return "s"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         return "m"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
  }

  /* "utils.pxd":5085
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return "m"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         return "h"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5086
 *         return "m"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return "h"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         return "D"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_h);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_h;
    goto __pyx_L0;

    /* "utils.pxd":5085
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return "m"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         return "h"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
*/
  }

  /* "utils.pxd":5087
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return "h"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         return "D"
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5088
 *         return "h"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         return "D"             # <<<<<<<<<<<<<<
 * 
 *     # Uncommon units
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_D);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_D;
    goto __pyx_L0;

    /* "utils.pxd":5087
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return "h"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         return "D"
 * 
*/
  }

  /* "utils.pxd":5091
 * 
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         return "Y"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":5092
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return "Y"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return "M"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_Y);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_Y;
    goto __pyx_L0;

    /* "utils.pxd":5091
 * 
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         return "Y"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
*/
  }

  /* "utils.pxd":5093
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return "Y"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         return "M"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":5094
 *         return "Y"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return "M"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return "W"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_M);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_M;
    goto __pyx_L0;

    /* "utils.pxd":5093
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return "Y"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         return "M"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
*/
  }

  /* "utils.pxd":5095
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return "M"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:             # <<<<<<<<<<<<<<
 *         return "W"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":5096
 *         return "M"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return "W"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return "ps"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_W);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_W;
    goto __pyx_L0;

    /* "utils.pxd":5095
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return "M"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:             # <<<<<<<<<<<<<<
 *         return "W"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
*/
  }

  /* "utils.pxd":5097
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return "W"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:             # <<<<<<<<<<<<<<
 *         return "ps"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ps);
  if (__pyx_t_1) {

    /* "utils.pxd":5098
 *         return "W"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return "ps"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return "fs"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_ps);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_ps;
    goto __pyx_L0;

    /* "utils.pxd":5097
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return "W"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:             # <<<<<<<<<<<<<<
 *         return "ps"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
*/
  }

  /* "utils.pxd":5099
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return "ps"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:             # <<<<<<<<<<<<<<
 *         return "fs"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_fs);
  if (__pyx_t_1) {

    /* "utils.pxd":5100
 *         return "ps"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return "fs"             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
 *         return "as"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_fs);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_fs;
    goto __pyx_L0;

    /* "utils.pxd":5099
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return "ps"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:             # <<<<<<<<<<<<<<
 *         return "fs"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
*/
  }

  /* "utils.pxd":5101
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return "fs"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:             # <<<<<<<<<<<<<<
 *         return "as"
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_as);
  if (__pyx_t_1) {

    /* "utils.pxd":5102
 *         return "fs"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
 *         return "as"             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_as);
    __pyx_r = __pyx_mstate_global->__pyx_n_u_as;
    goto __pyx_L0;

    /* "utils.pxd":5101
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return "fs"
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:             # <<<<<<<<<<<<<<
 *         return "as"
 * 
*/
  }

  /* "utils.pxd":5105
 * 
 *     # Unsupported unit
 *     _raise_invalid_nptime_int_unit_error(unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object nptime_unit_int2dt64(int unit):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_int_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5105, __pyx_L1_error)

  /* "utils.pxd":5067
 * 
 * # NumPy: time unit -------------------------------------------------------------------------------------
 * cdef inline str nptime_unit_int2str(int unit):             # <<<<<<<<<<<<<<
 *     """Map numpy time unit to its corresponding string form `<'str'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.nptime_unit_int2str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5107
 *     _raise_invalid_nptime_int_unit_error(unit)
 * 
 * cdef inline object nptime_unit_int2dt64(int unit):             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit to its corresponding datetime dtype `<'np.dtype'>`.
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_int2dt64(int __pyx_v_unit) {
  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("nptime_unit_int2dt64", 0);

  /* "utils.pxd":5115
 *     """
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_NS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5116
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return DT64_DTYPE_NS             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return DT64_DTYPE_US
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_NS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_NS;
    goto __pyx_L0;

    /* "utils.pxd":5115
 *     """
 *     # Common units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_NS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
  }

  /* "utils.pxd":5117
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return DT64_DTYPE_NS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_US
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5118
 *         return DT64_DTYPE_NS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return DT64_DTYPE_US             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return DT64_DTYPE_MS
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_US);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_US;
    goto __pyx_L0;

    /* "utils.pxd":5117
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return DT64_DTYPE_NS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_US
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
  }

  /* "utils.pxd":5119
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return DT64_DTYPE_US
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5120
 *         return DT64_DTYPE_US
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return DT64_DTYPE_MS             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return DT64_DTYPE_SS
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MS;
    goto __pyx_L0;

    /* "utils.pxd":5119
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         return DT64_DTYPE_US
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
  }

  /* "utils.pxd":5121
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return DT64_DTYPE_MS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_SS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5122
 *         return DT64_DTYPE_MS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return DT64_DTYPE_SS             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return DT64_DTYPE_MI
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_SS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_SS;
    goto __pyx_L0;

    /* "utils.pxd":5121
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         return DT64_DTYPE_MS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_SS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
  }

  /* "utils.pxd":5123
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return DT64_DTYPE_SS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MI
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5124
 *         return DT64_DTYPE_SS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return DT64_DTYPE_MI             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return DT64_DTYPE_HH
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MI);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MI;
    goto __pyx_L0;

    /* "utils.pxd":5123
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         return DT64_DTYPE_SS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MI
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
  }

  /* "utils.pxd":5125
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return DT64_DTYPE_MI
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_HH
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5126
 *         return DT64_DTYPE_MI
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return DT64_DTYPE_HH             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         return DT64_DTYPE_DD
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_HH);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_HH;
    goto __pyx_L0;

    /* "utils.pxd":5125
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         return DT64_DTYPE_MI
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_HH
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
*/
  }

  /* "utils.pxd":5127
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return DT64_DTYPE_HH
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_DD
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5128
 *         return DT64_DTYPE_HH
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         return DT64_DTYPE_DD             # <<<<<<<<<<<<<<
 * 
 *     # Uncommon units
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_DD);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_DD;
    goto __pyx_L0;

    /* "utils.pxd":5127
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         return DT64_DTYPE_HH
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_DD
 * 
*/
  }

  /* "utils.pxd":5131
 * 
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_YY
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":5132
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return DT64_DTYPE_YY             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return DT64_DTYPE_MM
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_YY);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_YY;
    goto __pyx_L0;

    /* "utils.pxd":5131
 * 
 *     # Uncommon units
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_YY
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
*/
  }

  /* "utils.pxd":5133
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return DT64_DTYPE_YY
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MM
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":5134
 *         return DT64_DTYPE_YY
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return DT64_DTYPE_MM             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return DT64_DTYPE_WW
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MM);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MM;
    goto __pyx_L0;

    /* "utils.pxd":5133
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         return DT64_DTYPE_YY
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MM
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
*/
  }

  /* "utils.pxd":5135
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return DT64_DTYPE_MM
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_WW
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":5136
 *         return DT64_DTYPE_MM
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return DT64_DTYPE_WW             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return DT64_DTYPE_PS
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_WW);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_WW;
    goto __pyx_L0;

    /* "utils.pxd":5135
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         return DT64_DTYPE_MM
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_WW
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
*/
  }

  /* "utils.pxd":5137
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return DT64_DTYPE_WW
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_PS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ps);
  if (__pyx_t_1) {

    /* "utils.pxd":5138
 *         return DT64_DTYPE_WW
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return DT64_DTYPE_PS             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return DT64_DTYPE_FS
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_PS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_PS;
    goto __pyx_L0;

    /* "utils.pxd":5137
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         return DT64_DTYPE_WW
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_PS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
*/
  }

  /* "utils.pxd":5139
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return DT64_DTYPE_PS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_FS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_fs);
  if (__pyx_t_1) {

    /* "utils.pxd":5140
 *         return DT64_DTYPE_PS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return DT64_DTYPE_FS             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
 *         return DT64_DTYPE_AS
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_FS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_FS;
    goto __pyx_L0;

    /* "utils.pxd":5139
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ps:
 *         return DT64_DTYPE_PS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_FS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
*/
  }

  /* "utils.pxd":5141
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return DT64_DTYPE_FS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_AS
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_as);
  if (__pyx_t_1) {

    /* "utils.pxd":5142
 *         return DT64_DTYPE_FS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:
 *         return DT64_DTYPE_AS             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_AS);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_AS;
    goto __pyx_L0;

    /* "utils.pxd":5141
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_fs:
 *         return DT64_DTYPE_FS
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_as:             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_AS
 * 
*/
  }

  /* "utils.pxd":5145
 * 
 *     # Unsupported unit
 *     _raise_invalid_nptime_int_unit_error(unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int nptime_unit_str2int(str unit) except -1:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_int_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5145, __pyx_L1_error)

  /* "utils.pxd":5107
 *     _raise_invalid_nptime_int_unit_error(unit)
 * 
 * cdef inline object nptime_unit_int2dt64(int unit):             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit to its corresponding datetime dtype `<'np.dtype'>`.
 * 
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.nptime_unit_int2dt64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5147
 *     _raise_invalid_nptime_int_unit_error(unit)
 * 
 * cdef inline int nptime_unit_str2int(str unit) except -1:             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit string form to its corresponding
 *     NPY_DATETIMEUNIT enum value `<'int'>`.
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_nptime_unit_str2int(PyObject *__pyx_v_unit) {
  Py_ssize_t __pyx_v_size;
  Py_UCS4 __pyx_v_ch;
  int __pyx_r;
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "utils.pxd":5155
 *     :returns `<'int'>`: The corresponding NPY_DATETIMEUNIT enum value.
 *     """
 *     if unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":5156
 *     """
 *     if unit is None:
 *         _raise_invalid_nptime_str_unit_error(unit)             # <<<<<<<<<<<<<<
 *     cdef:
 *         Py_ssize_t size = str_len(unit)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5156, __pyx_L1_error)

    /* "utils.pxd":5155
 *     :returns `<'int'>`: The corresponding NPY_DATETIMEUNIT enum value.
 *     """
 *     if unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
*/
  }

  /* "utils.pxd":5158
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
 *         Py_ssize_t size = str_len(unit)             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 * 
*/
  __pyx_v_size = PyUnicode_GET_LENGTH(__pyx_v_unit);

  /* "utils.pxd":5162
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'Y', 'M', 'W', 'B'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
  __pyx_t_1 = (__pyx_v_size == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":5164
 *     if size == 1:
 *         # Common units
 *         ch = str_read(unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "s":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5164, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":5165
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x73);
    if (__pyx_t_1) {

      /* "utils.pxd":5166
 *         ch = str_read(unit, 0)
 *         if ch == "s":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
*/
      __pyx_r = NPY_FR_s;
      goto __pyx_L0;

      /* "utils.pxd":5165
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
 *         if ch == "m":
*/
    }

    /* "utils.pxd":5167
 *         if ch == "s":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
 *         if ch == "h":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":5168
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m             # <<<<<<<<<<<<<<
 *         if ch == "h":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
*/
      __pyx_r = NPY_FR_m;
      goto __pyx_L0;

      /* "utils.pxd":5167
 *         if ch == "s":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_s
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
 *         if ch == "h":
*/
    }

    /* "utils.pxd":5169
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
 *         if ch == "D":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x68);
    if (__pyx_t_1) {

      /* "utils.pxd":5170
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
 *         if ch == "h":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h             # <<<<<<<<<<<<<<
 *         if ch == "D":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D
*/
      __pyx_r = NPY_FR_h;
      goto __pyx_L0;

      /* "utils.pxd":5169
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_m
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
 *         if ch == "D":
*/
    }

    /* "utils.pxd":5171
 *         if ch == "h":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D
 *         # Uncommon units
*/
    __pyx_t_1 = (__pyx_v_ch == 68);
    if (__pyx_t_1) {

      /* "utils.pxd":5172
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
 *         if ch == "D":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D             # <<<<<<<<<<<<<<
 *         # Uncommon units
 *         if ch == "Y":
*/
      __pyx_r = NPY_FR_D;
      goto __pyx_L0;

      /* "utils.pxd":5171
 *         if ch == "h":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_h
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D
 *         # Uncommon units
*/
    }

    /* "utils.pxd":5174
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D
 *         # Uncommon units
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y
 *         if ch == "M":
*/
    __pyx_t_1 = (__pyx_v_ch == 89);
    if (__pyx_t_1) {

      /* "utils.pxd":5175
 *         # Uncommon units
 *         if ch == "Y":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y             # <<<<<<<<<<<<<<
 *         if ch == "M":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
*/
      __pyx_r = NPY_FR_Y;
      goto __pyx_L0;

      /* "utils.pxd":5174
 *             return np.NPY_DATETIMEUNIT.NPY_FR_D
 *         # Uncommon units
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y
 *         if ch == "M":
*/
    }

    /* "utils.pxd":5176
 *         if ch == "Y":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
 *         if ch == "W":
*/
    __pyx_t_1 = (__pyx_v_ch == 77);
    if (__pyx_t_1) {

      /* "utils.pxd":5177
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y
 *         if ch == "M":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M             # <<<<<<<<<<<<<<
 *         if ch == "W":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_W
*/
      __pyx_r = NPY_FR_M;
      goto __pyx_L0;

      /* "utils.pxd":5176
 *         if ch == "Y":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_Y
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
 *         if ch == "W":
*/
    }

    /* "utils.pxd":5178
 *         if ch == "M":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_W
 *         # if ch == "B":
*/
    __pyx_t_1 = (__pyx_v_ch == 87);
    if (__pyx_t_1) {

      /* "utils.pxd":5179
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
 *         if ch == "W":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_W             # <<<<<<<<<<<<<<
 *         # if ch == "B":
 *         #     return np.NPY_DATETIMEUNIT.NPY_FR_B
*/
      __pyx_r = NPY_FR_W;
      goto __pyx_L0;

      /* "utils.pxd":5178
 *         if ch == "M":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_M
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_W
 *         # if ch == "B":
*/
    }

    /* "utils.pxd":5162
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'Y', 'M', 'W', 'B'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":5184
 * 
 *     # Unit: 'ns', 'us', 'ms', 'ps', 'fs', 'as'
 *     elif size == 2 and str_read(unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
  __pyx_t_3 = (__pyx_v_size == 2);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 1); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5184, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 == 0x73);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":5186
 *     elif size == 2 and str_read(unit, 1) == "s":
 *         # Common units
 *         ch = str_read(unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "n":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5186, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":5187
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
 *         if ch == "u":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6E);
    if (__pyx_t_1) {

      /* "utils.pxd":5188
 *         ch = str_read(unit, 0)
 *         if ch == "n":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns             # <<<<<<<<<<<<<<
 *         if ch == "u":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
*/
      __pyx_r = NPY_FR_ns;
      goto __pyx_L0;

      /* "utils.pxd":5187
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
 *         if ch == "u":
*/
    }

    /* "utils.pxd":5189
 *         if ch == "n":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x75);
    if (__pyx_t_1) {

      /* "utils.pxd":5190
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
 *         if ch == "u":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms
*/
      __pyx_r = NPY_FR_us;
      goto __pyx_L0;

      /* "utils.pxd":5189
 *         if ch == "n":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ns
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
 *         if ch == "m":
*/
    }

    /* "utils.pxd":5191
 *         if ch == "u":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms
 *         # Uncommon units
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":5192
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
 *         if ch == "m":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms             # <<<<<<<<<<<<<<
 *         # Uncommon units
 *         if ch == "p":
*/
      __pyx_r = NPY_FR_ms;
      goto __pyx_L0;

      /* "utils.pxd":5191
 *         if ch == "u":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_us
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms
 *         # Uncommon units
*/
    }

    /* "utils.pxd":5194
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms
 *         # Uncommon units
 *         if ch == "p":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps
 *         if ch == "f":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x70);
    if (__pyx_t_1) {

      /* "utils.pxd":5195
 *         # Uncommon units
 *         if ch == "p":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps             # <<<<<<<<<<<<<<
 *         if ch == "f":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
*/
      __pyx_r = NPY_FR_ps;
      goto __pyx_L0;

      /* "utils.pxd":5194
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ms
 *         # Uncommon units
 *         if ch == "p":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps
 *         if ch == "f":
*/
    }

    /* "utils.pxd":5196
 *         if ch == "p":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps
 *         if ch == "f":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
 *         if ch == "a":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x66);
    if (__pyx_t_1) {

      /* "utils.pxd":5197
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps
 *         if ch == "f":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs             # <<<<<<<<<<<<<<
 *         if ch == "a":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_as
*/
      __pyx_r = NPY_FR_fs;
      goto __pyx_L0;

      /* "utils.pxd":5196
 *         if ch == "p":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_ps
 *         if ch == "f":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
 *         if ch == "a":
*/
    }

    /* "utils.pxd":5198
 *         if ch == "f":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
 *         if ch == "a":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_as
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 97);
    if (__pyx_t_1) {

      /* "utils.pxd":5199
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
 *         if ch == "a":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_as             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'min' for pandas compatibility
*/
      __pyx_r = NPY_FR_as;
      goto __pyx_L0;

      /* "utils.pxd":5198
 *         if ch == "f":
 *             return np.NPY_DATETIMEUNIT.NPY_FR_fs
 *         if ch == "a":             # <<<<<<<<<<<<<<
 *             return np.NPY_DATETIMEUNIT.NPY_FR_as
 * 
*/
    }

    /* "utils.pxd":5184
 * 
 *     # Unit: 'ns', 'us', 'ms', 'ps', 'fs', 'as'
 *     elif size == 2 and str_read(unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":5202
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":             # <<<<<<<<<<<<<<
 *         return np.NPY_DATETIMEUNIT.NPY_FR_m
 * 
*/
  __pyx_t_3 = (__pyx_v_size == 3);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_unit, __pyx_mstate_global->__pyx_n_u_min, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 5202, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L20_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":5203
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":
 *         return np.NPY_DATETIMEUNIT.NPY_FR_m             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __pyx_r = NPY_FR_m;
    goto __pyx_L0;

    /* "utils.pxd":5202
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":             # <<<<<<<<<<<<<<
 *         return np.NPY_DATETIMEUNIT.NPY_FR_m
 * 
*/
  }
  __pyx_L4:;

  /* "utils.pxd":5206
 * 
 *     # Unsupported unit
 *     _raise_invalid_nptime_str_unit_error(unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline object nptime_unit_str2dt64(str unit):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5206, __pyx_L1_error)

  /* "utils.pxd":5147
 *     _raise_invalid_nptime_int_unit_error(unit)
 * 
 * cdef inline int nptime_unit_str2int(str unit) except -1:             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit string form to its corresponding
 *     NPY_DATETIMEUNIT enum value `<'int'>`.
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.nptime_unit_str2int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":5208
 *     _raise_invalid_nptime_str_unit_error(unit)
 * 
 * cdef inline object nptime_unit_str2dt64(str unit):             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit string form to its corresponding
 *     datetime dtype `<'np.dtype'>`.
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_5utils_nptime_unit_str2dt64(PyObject *__pyx_v_unit) {
  Py_ssize_t __pyx_v_size;
  Py_UCS4 __pyx_v_ch;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("nptime_unit_str2dt64", 0);

  /* "utils.pxd":5217
 *         np.dtype('datetime64[ns]'), np.dtype('datetime64[Y]'), etc.
 *     """
 *     if unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":5218
 *     """
 *     if unit is None:
 *         _raise_invalid_nptime_str_unit_error(unit)             # <<<<<<<<<<<<<<
 *     cdef:
 *         Py_ssize_t size = str_len(unit)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5218, __pyx_L1_error)

    /* "utils.pxd":5217
 *         np.dtype('datetime64[ns]'), np.dtype('datetime64[Y]'), etc.
 *     """
 *     if unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
*/
  }

  /* "utils.pxd":5220
 *         _raise_invalid_nptime_str_unit_error(unit)
 *     cdef:
 *         Py_ssize_t size = str_len(unit)             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 * 
*/
  __pyx_v_size = PyUnicode_GET_LENGTH(__pyx_v_unit);

  /* "utils.pxd":5224
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'Y', 'M', 'W', 'B'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
  __pyx_t_1 = (__pyx_v_size == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":5226
 *     if size == 1:
 *         # Common units
 *         ch = str_read(unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "s":
 *             return DT64_DTYPE_SS
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5226, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":5227
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_SS
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x73);
    if (__pyx_t_1) {

      /* "utils.pxd":5228
 *         ch = str_read(unit, 0)
 *         if ch == "s":
 *             return DT64_DTYPE_SS             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return DT64_DTYPE_MI
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_SS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_SS;
      goto __pyx_L0;

      /* "utils.pxd":5227
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_SS
 *         if ch == "m":
*/
    }

    /* "utils.pxd":5229
 *         if ch == "s":
 *             return DT64_DTYPE_SS
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MI
 *         if ch == "h":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":5230
 *             return DT64_DTYPE_SS
 *         if ch == "m":
 *             return DT64_DTYPE_MI             # <<<<<<<<<<<<<<
 *         if ch == "h":
 *             return DT64_DTYPE_HH
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MI);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MI;
      goto __pyx_L0;

      /* "utils.pxd":5229
 *         if ch == "s":
 *             return DT64_DTYPE_SS
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MI
 *         if ch == "h":
*/
    }

    /* "utils.pxd":5231
 *         if ch == "m":
 *             return DT64_DTYPE_MI
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_HH
 *         if ch == "D":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x68);
    if (__pyx_t_1) {

      /* "utils.pxd":5232
 *             return DT64_DTYPE_MI
 *         if ch == "h":
 *             return DT64_DTYPE_HH             # <<<<<<<<<<<<<<
 *         if ch == "D":
 *             return DT64_DTYPE_DD
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_HH);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_HH;
      goto __pyx_L0;

      /* "utils.pxd":5231
 *         if ch == "m":
 *             return DT64_DTYPE_MI
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_HH
 *         if ch == "D":
*/
    }

    /* "utils.pxd":5233
 *         if ch == "h":
 *             return DT64_DTYPE_HH
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_DD
 *         # Uncommon units
*/
    __pyx_t_1 = (__pyx_v_ch == 68);
    if (__pyx_t_1) {

      /* "utils.pxd":5234
 *             return DT64_DTYPE_HH
 *         if ch == "D":
 *             return DT64_DTYPE_DD             # <<<<<<<<<<<<<<
 *         # Uncommon units
 *         if ch == "Y":
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_DD);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_DD;
      goto __pyx_L0;

      /* "utils.pxd":5233
 *         if ch == "h":
 *             return DT64_DTYPE_HH
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_DD
 *         # Uncommon units
*/
    }

    /* "utils.pxd":5236
 *             return DT64_DTYPE_DD
 *         # Uncommon units
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_YY
 *         if ch == "M":
*/
    __pyx_t_1 = (__pyx_v_ch == 89);
    if (__pyx_t_1) {

      /* "utils.pxd":5237
 *         # Uncommon units
 *         if ch == "Y":
 *             return DT64_DTYPE_YY             # <<<<<<<<<<<<<<
 *         if ch == "M":
 *             return DT64_DTYPE_MM
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_YY);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_YY;
      goto __pyx_L0;

      /* "utils.pxd":5236
 *             return DT64_DTYPE_DD
 *         # Uncommon units
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_YY
 *         if ch == "M":
*/
    }

    /* "utils.pxd":5238
 *         if ch == "Y":
 *             return DT64_DTYPE_YY
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MM
 *         if ch == "W":
*/
    __pyx_t_1 = (__pyx_v_ch == 77);
    if (__pyx_t_1) {

      /* "utils.pxd":5239
 *             return DT64_DTYPE_YY
 *         if ch == "M":
 *             return DT64_DTYPE_MM             # <<<<<<<<<<<<<<
 *         if ch == "W":
 *             return DT64_DTYPE_WW
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MM);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MM;
      goto __pyx_L0;

      /* "utils.pxd":5238
 *         if ch == "Y":
 *             return DT64_DTYPE_YY
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MM
 *         if ch == "W":
*/
    }

    /* "utils.pxd":5240
 *         if ch == "M":
 *             return DT64_DTYPE_MM
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_WW
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 87);
    if (__pyx_t_1) {

      /* "utils.pxd":5241
 *             return DT64_DTYPE_MM
 *         if ch == "W":
 *             return DT64_DTYPE_WW             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'ns', 'us', 'ms', 'ps', 'fs', 'as'
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_WW);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_WW;
      goto __pyx_L0;

      /* "utils.pxd":5240
 *         if ch == "M":
 *             return DT64_DTYPE_MM
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_WW
 * 
*/
    }

    /* "utils.pxd":5224
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'Y', 'M', 'W', 'B'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":5244
 * 
 *     # Unit: 'ns', 'us', 'ms', 'ps', 'fs', 'as'
 *     elif size == 2 and str_read(unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
  __pyx_t_3 = (__pyx_v_size == 2);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 1); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5244, __pyx_L1_error)
  __pyx_t_3 = (__pyx_t_2 == 0x73);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":5246
 *     elif size == 2 and str_read(unit, 1) == "s":
 *         # Common units
 *         ch = str_read(unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "n":
 *             return DT64_DTYPE_NS
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 5246, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":5247
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_NS
 *         if ch == "u":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6E);
    if (__pyx_t_1) {

      /* "utils.pxd":5248
 *         ch = str_read(unit, 0)
 *         if ch == "n":
 *             return DT64_DTYPE_NS             # <<<<<<<<<<<<<<
 *         if ch == "u":
 *             return DT64_DTYPE_US
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_NS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_NS;
      goto __pyx_L0;

      /* "utils.pxd":5247
 *         # Common units
 *         ch = str_read(unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_NS
 *         if ch == "u":
*/
    }

    /* "utils.pxd":5249
 *         if ch == "n":
 *             return DT64_DTYPE_NS
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_US
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x75);
    if (__pyx_t_1) {

      /* "utils.pxd":5250
 *             return DT64_DTYPE_NS
 *         if ch == "u":
 *             return DT64_DTYPE_US             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return DT64_DTYPE_MS
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_US);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_US;
      goto __pyx_L0;

      /* "utils.pxd":5249
 *         if ch == "n":
 *             return DT64_DTYPE_NS
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_US
 *         if ch == "m":
*/
    }

    /* "utils.pxd":5251
 *         if ch == "u":
 *             return DT64_DTYPE_US
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MS
 *         # Uncommon units
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":5252
 *             return DT64_DTYPE_US
 *         if ch == "m":
 *             return DT64_DTYPE_MS             # <<<<<<<<<<<<<<
 *         # Uncommon units
 *         if ch == "p":
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MS;
      goto __pyx_L0;

      /* "utils.pxd":5251
 *         if ch == "u":
 *             return DT64_DTYPE_US
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_MS
 *         # Uncommon units
*/
    }

    /* "utils.pxd":5254
 *             return DT64_DTYPE_MS
 *         # Uncommon units
 *         if ch == "p":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_PS
 *         if ch == "f":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x70);
    if (__pyx_t_1) {

      /* "utils.pxd":5255
 *         # Uncommon units
 *         if ch == "p":
 *             return DT64_DTYPE_PS             # <<<<<<<<<<<<<<
 *         if ch == "f":
 *             return DT64_DTYPE_FS
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_PS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_PS;
      goto __pyx_L0;

      /* "utils.pxd":5254
 *             return DT64_DTYPE_MS
 *         # Uncommon units
 *         if ch == "p":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_PS
 *         if ch == "f":
*/
    }

    /* "utils.pxd":5256
 *         if ch == "p":
 *             return DT64_DTYPE_PS
 *         if ch == "f":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_FS
 *         if ch == "a":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x66);
    if (__pyx_t_1) {

      /* "utils.pxd":5257
 *             return DT64_DTYPE_PS
 *         if ch == "f":
 *             return DT64_DTYPE_FS             # <<<<<<<<<<<<<<
 *         if ch == "a":
 *             return DT64_DTYPE_AS
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_FS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_FS;
      goto __pyx_L0;

      /* "utils.pxd":5256
 *         if ch == "p":
 *             return DT64_DTYPE_PS
 *         if ch == "f":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_FS
 *         if ch == "a":
*/
    }

    /* "utils.pxd":5258
 *         if ch == "f":
 *             return DT64_DTYPE_FS
 *         if ch == "a":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_AS
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 97);
    if (__pyx_t_1) {

      /* "utils.pxd":5259
 *             return DT64_DTYPE_FS
 *         if ch == "a":
 *             return DT64_DTYPE_AS             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'min' for pandas compatibility
*/
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_AS);
      __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_AS;
      goto __pyx_L0;

      /* "utils.pxd":5258
 *         if ch == "f":
 *             return DT64_DTYPE_FS
 *         if ch == "a":             # <<<<<<<<<<<<<<
 *             return DT64_DTYPE_AS
 * 
*/
    }

    /* "utils.pxd":5244
 * 
 *     # Unit: 'ns', 'us', 'ms', 'ps', 'fs', 'as'
 *     elif size == 2 and str_read(unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         # Common units
 *         ch = str_read(unit, 0)
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":5262
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MI
 * 
*/
  __pyx_t_3 = (__pyx_v_size == 3);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_v_unit, __pyx_mstate_global->__pyx_n_u_min, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(5, 5262, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_3;
  __pyx_L20_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":5263
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":
 *         return DT64_DTYPE_MI             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MI);
    __pyx_r = __pyx_v_7cytimes_5utils_DT64_DTYPE_MI;
    goto __pyx_L0;

    /* "utils.pxd":5262
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and unit == "min":             # <<<<<<<<<<<<<<
 *         return DT64_DTYPE_MI
 * 
*/
  }
  __pyx_L4:;

  /* "utils.pxd":5266
 * 
 *     # Unsupported unit
 *     _raise_invalid_nptime_str_unit_error(unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline int get_arr_nptime_unit(np.ndarray arr) except -1:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5266, __pyx_L1_error)

  /* "utils.pxd":5208
 *     _raise_invalid_nptime_str_unit_error(unit)
 * 
 * cdef inline object nptime_unit_str2dt64(str unit):             # <<<<<<<<<<<<<<
 *     """Maps numpy time unit string form to its corresponding
 *     datetime dtype `<'np.dtype'>`.
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.nptime_unit_str2dt64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5268
 *     _raise_invalid_nptime_str_unit_error(unit)
 * 
 * cdef inline int get_arr_nptime_unit(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Get the time unit (NPY_DATETIMEUNIT enum) of a datetime-like array `<'int'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_get_arr_nptime_unit(PyArrayObject *__pyx_v_arr) {
  int __pyx_v_dtype;
  npy_int64 __pyx_v_zero;
  PyObject *__pyx_v_scalar = 0;
  int __pyx_r;
  __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_arr_nptime_unit", 0);

  /* "utils.pxd":5276
 *     """
 *     cdef:
 *         int dtype = np.PyArray_TYPE(arr)             # <<<<<<<<<<<<<<
 *         np.npy_int64 zero = 0
 *         object scalar
*/
  __pyx_v_dtype = PyArray_TYPE(__pyx_v_arr);

  /* "utils.pxd":5277
 *     cdef:
 *         int dtype = np.PyArray_TYPE(arr)
 *         np.npy_int64 zero = 0             # <<<<<<<<<<<<<<
 *         object scalar
 * 
*/
  __pyx_v_zero = 0;

  /* "utils.pxd":5281
 * 
 *     # datetime-array
 *     if dtype == np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyDatetimeScalarObject*>scalar).obmeta.base
*/
  __pyx_t_1 = (__pyx_v_dtype == NPY_DATETIME);
  if (__pyx_t_1) {

    /* "utils.pxd":5282
 *     # datetime-array
 *     if dtype == np.NPY_TYPES.NPY_DATETIME:
 *         scalar = np.PyArray_ToScalar(&zero, arr)             # <<<<<<<<<<<<<<
 *         return <int> (<np.PyDatetimeScalarObject*>scalar).obmeta.base
 * 
*/
    __pyx_t_2 = PyArray_ToScalar((&__pyx_v_zero), __pyx_v_arr); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5282, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_scalar = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "utils.pxd":5283
 *     if dtype == np.NPY_TYPES.NPY_DATETIME:
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyDatetimeScalarObject*>scalar).obmeta.base             # <<<<<<<<<<<<<<
 * 
 *     # timedelta-array
*/
    __pyx_r = ((int)((PyDatetimeScalarObject *)__pyx_v_scalar)->obmeta.base);
    goto __pyx_L0;

    /* "utils.pxd":5281
 * 
 *     # datetime-array
 *     if dtype == np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyDatetimeScalarObject*>scalar).obmeta.base
*/
  }

  /* "utils.pxd":5286
 * 
 *     # timedelta-array
 *     if dtype == np.NPY_TYPES.NPY_TIMEDELTA:             # <<<<<<<<<<<<<<
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyTimedeltaScalarObject*>scalar).obmeta.base
*/
  __pyx_t_1 = (__pyx_v_dtype == NPY_TIMEDELTA);
  if (__pyx_t_1) {

    /* "utils.pxd":5287
 *     # timedelta-array
 *     if dtype == np.NPY_TYPES.NPY_TIMEDELTA:
 *         scalar = np.PyArray_ToScalar(&zero, arr)             # <<<<<<<<<<<<<<
 *         return <int> (<np.PyTimedeltaScalarObject*>scalar).obmeta.base
 * 
*/
    __pyx_t_2 = PyArray_ToScalar((&__pyx_v_zero), __pyx_v_arr); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5287, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_scalar = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "utils.pxd":5288
 *     if dtype == np.NPY_TYPES.NPY_TIMEDELTA:
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyTimedeltaScalarObject*>scalar).obmeta.base             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported
*/
    __pyx_r = ((int)((PyTimedeltaScalarObject *)__pyx_v_scalar)->obmeta.base);
    goto __pyx_L0;

    /* "utils.pxd":5286
 * 
 *     # timedelta-array
 *     if dtype == np.NPY_TYPES.NPY_TIMEDELTA:             # <<<<<<<<<<<<<<
 *         scalar = np.PyArray_ToScalar(&zero, arr)
 *         return <int> (<np.PyTimedeltaScalarObject*>scalar).obmeta.base
*/
  }

  /* "utils.pxd":5291
 * 
 *     # Unsupported
 *     _raise_invalid_nptime_dtype_error(arr)             # <<<<<<<<<<<<<<
 * 
 * # . errors
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_dtype_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5291, __pyx_L1_error)

  /* "utils.pxd":5268
 *     _raise_invalid_nptime_str_unit_error(unit)
 * 
 * cdef inline int get_arr_nptime_unit(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Get the time unit (NPY_DATETIMEUNIT enum) of a datetime-like array `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.get_arr_nptime_unit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_scalar);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5294
 * 
 * # . errors
 * cdef inline bint _raise_invalid_nptime_int_unit_error(int unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an invalid numpy time unit value."""
 *     raise ValueError(
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_int_unit_error(int __pyx_v_unit) {
  int __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;
  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[23];
  PyObject *__pyx_t_15 = NULL;
  size_t __pyx_t_16;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_invalid_nptime_int_unit_error", 0);

  /* "utils.pxd":5296
 * cdef inline bint _raise_invalid_nptime_int_unit_error(int unit) except -1:
 *     """(internal) Raise error for an invalid numpy time unit value."""
 *     raise ValueError(             # <<<<<<<<<<<<<<
 *         "Unsupported numpy time unit (NPY_DATETIMEUNIT enum) '%d'.\n"
 *         "Accepts: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
*/
  __pyx_t_2 = NULL;

  /* "utils.pxd":5300
 *         "Accepts: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
 *         "%d's', %d'ms', %d'us', %d'ns'" % (
 *             unit,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_YY,
 *             DT_NPY_UNIT_MM,
*/
  __pyx_t_3 = __Pyx_PyUnicode_From_int(__pyx_v_unit, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "utils.pxd":5301
 *         "%d's', %d'ms', %d'us', %d'ns'" % (
 *             unit,
 *             DT_NPY_UNIT_YY,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_MM,
 *             DT_NPY_UNIT_WW,
*/
  __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_YY, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5301, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "utils.pxd":5302
 *             unit,
 *             DT_NPY_UNIT_YY,
 *             DT_NPY_UNIT_MM,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_WW,
 *             DT_NPY_UNIT_DD,
*/
  __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MM, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "utils.pxd":5303
 *             DT_NPY_UNIT_YY,
 *             DT_NPY_UNIT_MM,
 *             DT_NPY_UNIT_WW,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_DD,
 *             DT_NPY_UNIT_HH,
*/
  __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_WW, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 5303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);

  /* "utils.pxd":5304
 *             DT_NPY_UNIT_MM,
 *             DT_NPY_UNIT_WW,
 *             DT_NPY_UNIT_DD,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_HH,
 *             DT_NPY_UNIT_MI,
*/
  __pyx_t_7 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_DD, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "utils.pxd":5305
 *             DT_NPY_UNIT_WW,
 *             DT_NPY_UNIT_DD,
 *             DT_NPY_UNIT_HH,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_MI,
 *             DT_NPY_UNIT_SS,
*/
  __pyx_t_8 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_HH, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 5305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "utils.pxd":5306
 *             DT_NPY_UNIT_DD,
 *             DT_NPY_UNIT_HH,
 *             DT_NPY_UNIT_MI,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_SS,
 *             DT_NPY_UNIT_MS,
*/
  __pyx_t_9 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MI, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 5306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);

  /* "utils.pxd":5307
 *             DT_NPY_UNIT_HH,
 *             DT_NPY_UNIT_MI,
 *             DT_NPY_UNIT_SS,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_MS,
 *             DT_NPY_UNIT_US,
*/
  __pyx_t_10 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_SS, 0, ' ', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 5307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);

  /* "utils.pxd":5308
 *             DT_NPY_UNIT_MI,
 *             DT_NPY_UNIT_SS,
 *             DT_NPY_UNIT_MS,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_US,
 *             DT_NPY_UNIT_NS,
*/
  __pyx_t_11 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MS, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(5, 5308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);

  /* "utils.pxd":5309
 *             DT_NPY_UNIT_SS,
 *             DT_NPY_UNIT_MS,
 *             DT_NPY_UNIT_US,             # <<<<<<<<<<<<<<
 *             DT_NPY_UNIT_NS,
 *         )
*/
  __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_US, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 5309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);

  /* "utils.pxd":5310
 *             DT_NPY_UNIT_MS,
 *             DT_NPY_UNIT_US,
 *             DT_NPY_UNIT_NS,             # <<<<<<<<<<<<<<
 *         )
 *     )
*/
  __pyx_t_13 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_NS, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 5310, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_numpy_time_unit_NPY;
  __pyx_t_14[1] = __pyx_t_3;
  __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u_Accepts;
  __pyx_t_14[3] = __pyx_t_4;
  __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_Y_2;
  __pyx_t_14[5] = __pyx_t_5;
  __pyx_t_14[6] = __pyx_mstate_global->__pyx_kp_u_M_2;
  __pyx_t_14[7] = __pyx_t_6;
  __pyx_t_14[8] = __pyx_mstate_global->__pyx_kp_u_W_2;
  __pyx_t_14[9] = __pyx_t_7;
  __pyx_t_14[10] = __pyx_mstate_global->__pyx_kp_u_D_2;
  __pyx_t_14[11] = __pyx_t_8;
  __pyx_t_14[12] = __pyx_mstate_global->__pyx_kp_u_h_2;
  __pyx_t_14[13] = __pyx_t_9;
  __pyx_t_14[14] = __pyx_mstate_global->__pyx_kp_u_m_2;
  __pyx_t_14[15] = __pyx_t_10;
  __pyx_t_14[16] = __pyx_mstate_global->__pyx_kp_u_s_2;
  __pyx_t_14[17] = __pyx_t_11;
  __pyx_t_14[18] = __pyx_mstate_global->__pyx_kp_u_ms_2;
  __pyx_t_14[19] = __pyx_t_12;
  __pyx_t_14[20] = __pyx_mstate_global->__pyx_kp_u_us_2;
  __pyx_t_14[21] = __pyx_t_13;
  __pyx_t_14[22] = __pyx_mstate_global->__pyx_kp_u_ns_2;

  /* "utils.pxd":5297
 *     """(internal) Raise error for an invalid numpy time unit value."""
 *     raise ValueError(
 *         "Unsupported numpy time unit (NPY_DATETIMEUNIT enum) '%d'.\n"             # <<<<<<<<<<<<<<
 *         "Accepts: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
 *         "%d's', %d'ms', %d'us', %d'ns'" % (
*/
  __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 23, 53 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 6 * 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + 7 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 5, 65535);
  if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 5297, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_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_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_t_16 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_15};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_16, (2-__pyx_t_16) | (__pyx_t_16*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5296, __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(5, 5296, __pyx_L1_error)

  /* "utils.pxd":5294
 * 
 * # . errors
 * cdef inline bint _raise_invalid_nptime_int_unit_error(int unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an invalid numpy time unit value."""
 *     raise ValueError(
*/

  /* 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_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_15);
  __Pyx_AddTraceback("cytimes.utils._raise_invalid_nptime_int_unit_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5314
 *     )
 * 
 * cdef inline bint _raise_invalid_nptime_str_unit_error(object unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an invalid numpy time unit string form."""
 *     raise ValueError(
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(PyObject *__pyx_v_unit) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  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;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_invalid_nptime_str_unit_error", 0);

  /* "utils.pxd":5316
 * cdef inline bint _raise_invalid_nptime_str_unit_error(object unit) except -1:
 *     """(internal) Raise error for an invalid numpy time unit string form."""
 *     raise ValueError(             # <<<<<<<<<<<<<<
 *         "Unsupported time unit %r.\n"
 *         "Accepts: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'" % (unit,)
*/
  __pyx_t_2 = NULL;

  /* "utils.pxd":5318
 *     raise ValueError(
 *         "Unsupported time unit %r.\n"
 *         "Accepts: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'" % (unit,)             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Repr(__pyx_v_unit), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5318, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4[0] = __pyx_mstate_global->__pyx_kp_u_Unsupported_time_unit;
  __pyx_t_4[1] = __pyx_t_3;
  __pyx_t_4[2] = __pyx_mstate_global->__pyx_kp_u_Accepts_Y_M_W_D_h_m_s_ms_us_ns;

  /* "utils.pxd":5317
 *     """(internal) Raise error for an invalid numpy time unit string form."""
 *     raise ValueError(
 *         "Unsupported time unit %r.\n"             # <<<<<<<<<<<<<<
 *         "Accepts: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'" % (unit,)
 *     )
*/
  __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_4, 3, 22 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 62, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
  if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_5};
    __pyx_t_1 = __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_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5316, __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(5, 5316, __pyx_L1_error)

  /* "utils.pxd":5314
 *     )
 * 
 * cdef inline bint _raise_invalid_nptime_str_unit_error(object unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an invalid numpy time unit string form."""
 *     raise ValueError(
*/

  /* 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("cytimes.utils._raise_invalid_nptime_str_unit_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5321
 *     )
 * 
 * cdef inline bint _raise_invalid_nptime_dtype_error(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an array that is not dtype `datetime64[*]` or `timedelta64[*]`."""
 *     raise TypeError(
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_invalid_nptime_dtype_error(PyArrayObject *__pyx_v_arr) {
  int __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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_invalid_nptime_dtype_error", 0);

  /* "utils.pxd":5323
 * cdef inline bint _raise_invalid_nptime_dtype_error(np.ndarray arr) except -1:
 *     """(internal) Raise error for an array that is not dtype `datetime64[*]` or `timedelta64[*]`."""
 *     raise TypeError(             # <<<<<<<<<<<<<<
 *         "Expects 'ndarray[datetime64[*]]' or 'ndarray[timedelta64[*]]', "
 *         "instead got 'ndarray[%s]'" % arr.dtype
*/
  __pyx_t_2 = NULL;

  /* "utils.pxd":5325
 *     raise TypeError(
 *         "Expects 'ndarray[datetime64[*]]' or 'ndarray[timedelta64[*]]', "
 *         "instead got 'ndarray[%s]'" % arr.dtype             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Expects_ndarray_datetime64_or_nd, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __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(5, 5323, __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(5, 5323, __pyx_L1_error)

  /* "utils.pxd":5321
 *     )
 * 
 * cdef inline bint _raise_invalid_nptime_dtype_error(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for an array that is not dtype `datetime64[*]` or `timedelta64[*]`."""
 *     raise TypeError(
*/

  /* 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("cytimes.utils._raise_invalid_nptime_dtype_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5330
 * # NumPy: datetime64 ------------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_dt64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.datetime64` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":5339
 *     >>> isinstance(obj, np.datetime64)
 *     """
 *     return np.is_datetime64_object(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint assure_dt64(object obj) except -1:
*/
  __pyx_r = __pyx_f_5numpy_is_datetime64_object(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":5330
 * # NumPy: datetime64 ------------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_dt64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.datetime64` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5341
 *     return np.is_datetime64_object(obj)
 * 
 * cdef inline bint assure_dt64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Assure an object is an instance of np.datetime64."""
 *     if not np.is_datetime64_object(obj):
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_dt64(PyObject *__pyx_v_obj) {
  int __pyx_r;
  __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[5];
  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("assure_dt64", 0);

  /* "utils.pxd":5343
 * cdef inline bint assure_dt64(object obj) except -1:
 *     """Assure an object is an instance of np.datetime64."""
 *     if not np.is_datetime64_object(obj):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.datetime64', "
*/
  __pyx_t_1 = (!__pyx_f_5numpy_is_datetime64_object(__pyx_v_obj));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5344
 *     """Assure an object is an instance of np.datetime64."""
 *     if not np.is_datetime64_object(obj):
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Expects an instance of 'np.datetime64', "
 *             "instead got '%s' %s." % (obj, type(obj))
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":5346
 *         raise TypeError(
 *             "Expects an instance of 'np.datetime64', "
 *             "instead got '%s' %s." % (obj, type(obj))             # <<<<<<<<<<<<<<
 *         )
 *     return True
*/
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_obj), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_obj))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_np_dateti;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_6[3] = __pyx_t_5;
    __pyx_t_6[4] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "utils.pxd":5345
 *     if not np.is_datetime64_object(obj):
 *         raise TypeError(
 *             "Expects an instance of 'np.datetime64', "             # <<<<<<<<<<<<<<
 *             "instead got '%s' %s." % (obj, type(obj))
 *         )
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 5, 53 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5344, __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(5, 5344, __pyx_L1_error)

    /* "utils.pxd":5343
 * cdef inline bint assure_dt64(object obj) except -1:
 *     """Assure an object is an instance of np.datetime64."""
 *     if not np.is_datetime64_object(obj):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.datetime64', "
*/
  }

  /* "utils.pxd":5348
 *             "instead got '%s' %s." % (obj, type(obj))
 *         )
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . conversion
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":5341
 *     return np.is_datetime64_object(obj)
 * 
 * cdef inline bint assure_dt64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Assure an object is an instance of np.datetime64."""
 *     if not np.is_datetime64_object(obj):
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.assure_dt64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5351
 * 
 * # . conversion
 * cdef inline np.npy_int64 dt64_as_int64_us(object dt64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.datetime64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils_dt64_as_int64_us(PyObject *__pyx_v_dt64, struct __pyx_opt_args_7cytimes_5utils_dt64_as_int64_us *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  NPY_DATETIMEUNIT __pyx_v_unit;
  npy_int64 __pyx_v_value;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_r;
  int __pyx_t_1;
  npy_int64 __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":5362
 *     """
 *     # Get unit & value
 *     assure_dt64(dt64)             # <<<<<<<<<<<<<<
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(dt64)
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_dt64(__pyx_v_dt64); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5362, __pyx_L1_error)

  /* "utils.pxd":5364
 *     assure_dt64(dt64)
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(dt64)             # <<<<<<<<<<<<<<
 *         np.npy_int64 value = np.get_datetime64_value(dt64)
 *         np.npy_int64 q, r
*/
  __pyx_v_unit = __pyx_f_5numpy_get_datetime64_unit(__pyx_v_dt64);

  /* "utils.pxd":5365
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(dt64)
 *         np.npy_int64 value = np.get_datetime64_value(dt64)             # <<<<<<<<<<<<<<
 *         np.npy_int64 q, r
 * 
*/
  __pyx_v_value = __pyx_f_5numpy_get_datetime64_value(__pyx_v_dt64);

  /* "utils.pxd":5369
 * 
 *     # Conversion
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5371
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 0x3E8);
    __pyx_v_r = (__pyx_v_value % 0x3E8);

    /* "utils.pxd":5372
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5373
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5372
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5374
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value + offset
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5369
 * 
 *     # Conversion
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
*/
  }

  /* "utils.pxd":5375
 *                 q -= 1
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5376
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * US_MILLISECOND + offset
*/
    __pyx_r = (__pyx_v_value + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5375
 *                 q -= 1
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":5377
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5378
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * US_MILLISECOND + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return value * US_SECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_MILLISECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5377
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":5379
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5380
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return value * US_SECOND + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return value * US_MINUTE + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_SECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5379
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":5381
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5382
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return value * US_MINUTE + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return value * US_HOUR + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_MINUTE) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5381
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":5383
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5384
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return value * US_HOUR + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return value * US_DAY + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_HOUR) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5383
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":5385
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5386
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return value * US_DAY + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return value * US_DAY * 7 + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_DAY) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5385
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":5387
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":5388
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return value * US_DAY * 7 + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
*/
    __pyx_r = (((__pyx_v_value * __pyx_v_7cytimes_5utils_US_DAY) * 7) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5387
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":5389
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":5390
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64_Y_as_int64_D(value, US_DAY, offset)
*/
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.factor = __pyx_v_7cytimes_5utils_US_DAY;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_2 = __pyx_f_7cytimes_5utils__dt64_M_as_int64_D(__pyx_v_value, &__pyx_t_3); 
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":5389
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":5391
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64_Y_as_int64_D(value, US_DAY, offset)
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":5392
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64_Y_as_int64_D(value, US_DAY, offset)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.factor = __pyx_v_7cytimes_5utils_US_DAY;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_2 = __pyx_f_7cytimes_5utils__dt64_Y_as_int64_D(__pyx_v_value, &__pyx_t_4); 
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":5391
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64_M_as_int64_D(value, US_DAY, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64_Y_as_int64_D(value, US_DAY, offset)
 * 
*/
  }

  /* "utils.pxd":5395
 * 
 *     # Unsupported unit
 *     _raise_dt64_to_reso_error(dt64, "us")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.npy_int64 _dt64_Y_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64_to_reso_error(__pyx_v_dt64, __pyx_mstate_global->__pyx_n_u_us); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5395, __pyx_L1_error)

  /* "utils.pxd":5351
 * 
 * # . conversion
 * cdef inline np.npy_int64 dt64_as_int64_us(object dt64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.datetime64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.dt64_as_int64_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":5397
 *     _raise_dt64_to_reso_error(dt64, "us")
 * 
 * cdef inline np.npy_int64 _dt64_Y_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[Y] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__dt64_Y_as_int64_D(npy_int64 __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_factor = ((npy_int64)1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  npy_int64 __pyx_v_yy;
  npy_int64 __pyx_v_leaps;
  npy_int64 __pyx_r;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_factor = __pyx_optional_args->factor;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
      }
    }
  }

  /* "utils.pxd":5407
 *     """
 *     # Absolute proleptic Gregorian year
 *     cdef np.npy_int64 yy = value + EPOCH_YEAR             # <<<<<<<<<<<<<<
 *     # Leap-years between 1970-01-01 and 31-Dec-(year-1) inclusive
 *     cdef np.npy_int64 leaps = leap_years(yy, False) - EPOCH_CBASE
*/
  __pyx_v_yy = (__pyx_v_value + __pyx_v_7cytimes_5utils_EPOCH_YEAR);

  /* "utils.pxd":5409
 *     cdef np.npy_int64 yy = value + EPOCH_YEAR
 *     # Leap-years between 1970-01-01 and 31-Dec-(year-1) inclusive
 *     cdef np.npy_int64 leaps = leap_years(yy, False) - EPOCH_CBASE             # <<<<<<<<<<<<<<
 *     # Total days since 1970-01-01 at day resolution, then scale+shift
 *     return (value * 365 + leaps) * factor + offset
*/
  __pyx_v_leaps = (__pyx_f_7cytimes_5utils_leap_years(__pyx_v_yy, 0) - __pyx_v_7cytimes_5utils_EPOCH_CBASE);

  /* "utils.pxd":5411
 *     cdef np.npy_int64 leaps = leap_years(yy, False) - EPOCH_CBASE
 *     # Total days since 1970-01-01 at day resolution, then scale+shift
 *     return (value * 365 + leaps) * factor + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.npy_int64 _dt64_M_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:
*/
  __pyx_r = ((((__pyx_v_value * 0x16D) + __pyx_v_leaps) * __pyx_v_factor) + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":5397
 *     _raise_dt64_to_reso_error(dt64, "us")
 * 
 * cdef inline np.npy_int64 _dt64_Y_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[Y] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/

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

/* "utils.pxd":5413
 *     return (value * 365 + leaps) * factor + offset
 * 
 * cdef inline np.npy_int64 _dt64_M_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[M] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__dt64_M_as_int64_D(npy_int64 __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_factor = ((npy_int64)1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  npy_int64 __pyx_v_yy_ep;
  npy_int64 __pyx_v_yy;
  npy_int64 __pyx_v_mm;
  npy_int64 __pyx_v_leaps;
  npy_int64 __pyx_r;
  int __pyx_t_1;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_factor = __pyx_optional_args->factor;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
      }
    }
  }

  /* "utils.pxd":5425
 *     cdef np.npy_int64 yy_ep, yy, mm, leaps
 *     with cython.cdivision(True):
 *         yy_ep = value / 12; mm = value % 12             # <<<<<<<<<<<<<<
 *     if mm < 0:
 *         yy_ep -= 1; mm += 12
*/
  __pyx_v_yy_ep = (__pyx_v_value / 12);
  __pyx_v_mm = (__pyx_v_value % 12);

  /* "utils.pxd":5426
 *     with cython.cdivision(True):
 *         yy_ep = value / 12; mm = value % 12
 *     if mm < 0:             # <<<<<<<<<<<<<<
 *         yy_ep -= 1; mm += 12
 *     yy = yy_ep + EPOCH_YEAR     # absolute year
*/
  __pyx_t_1 = (__pyx_v_mm < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":5427
 *         yy_ep = value / 12; mm = value % 12
 *     if mm < 0:
 *         yy_ep -= 1; mm += 12             # <<<<<<<<<<<<<<
 *     yy = yy_ep + EPOCH_YEAR     # absolute year
 *     mm += 1                     # 1-based month
*/
    __pyx_v_yy_ep = (__pyx_v_yy_ep - 1);
    __pyx_v_mm = (__pyx_v_mm + 12);

    /* "utils.pxd":5426
 *     with cython.cdivision(True):
 *         yy_ep = value / 12; mm = value % 12
 *     if mm < 0:             # <<<<<<<<<<<<<<
 *         yy_ep -= 1; mm += 12
 *     yy = yy_ep + EPOCH_YEAR     # absolute year
*/
  }

  /* "utils.pxd":5428
 *     if mm < 0:
 *         yy_ep -= 1; mm += 12
 *     yy = yy_ep + EPOCH_YEAR     # absolute year             # <<<<<<<<<<<<<<
 *     mm += 1                     # 1-based month
 *     # Leap-years between 1970-01-01 and 31-Dec-(year-1) inclusive
*/
  __pyx_v_yy = (__pyx_v_yy_ep + __pyx_v_7cytimes_5utils_EPOCH_YEAR);

  /* "utils.pxd":5429
 *         yy_ep -= 1; mm += 12
 *     yy = yy_ep + EPOCH_YEAR     # absolute year
 *     mm += 1                     # 1-based month             # <<<<<<<<<<<<<<
 *     # Leap-years between 1970-01-01 and 31-Dec-(year-1) inclusive
 *     leaps = leap_years(yy, False) - EPOCH_CBASE
*/
  __pyx_v_mm = (__pyx_v_mm + 1);

  /* "utils.pxd":5431
 *     mm += 1                     # 1-based month
 *     # Leap-years between 1970-01-01 and 31-Dec-(year-1) inclusive
 *     leaps = leap_years(yy, False) - EPOCH_CBASE             # <<<<<<<<<<<<<<
 *     # Total days since 1970-01-01 at day resolution, then scale+shift
 *     return (yy_ep * 365 + leaps + days_bf_month(yy, mm)) * factor + offset
*/
  __pyx_v_leaps = (__pyx_f_7cytimes_5utils_leap_years(__pyx_v_yy, 0) - __pyx_v_7cytimes_5utils_EPOCH_CBASE);

  /* "utils.pxd":5433
 *     leaps = leap_years(yy, False) - EPOCH_CBASE
 *     # Total days since 1970-01-01 at day resolution, then scale+shift
 *     return (yy_ep * 365 + leaps + days_bf_month(yy, mm)) * factor + offset             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.datetime dt64_to_dt(object dt64, object tzinfo=None, object dtclass=None):
*/
  __pyx_r = (((((__pyx_v_yy_ep * 0x16D) + __pyx_v_leaps) + __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm)) * __pyx_v_factor) + __pyx_v_offset);
  goto __pyx_L0;

  /* "utils.pxd":5413
 *     return (value * 365 + leaps) * factor + offset
 * 
 * cdef inline np.npy_int64 _dt64_M_as_int64_D(np.npy_int64 value, np.npy_int64 factor=1, np.npy_int64 offset=0) noexcept nogil:             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.datetime64[M] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'int'>`.
*/

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

/* "utils.pxd":5435
 *     return (yy_ep * 365 + leaps + days_bf_month(yy, mm)) * factor + offset
 * 
 * cdef inline datetime.datetime dt64_to_dt(object dt64, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.datetime64 to datetime `<'datetime.datetime'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_5utils_dt64_to_dt(PyObject *__pyx_v_dt64, struct __pyx_opt_args_7cytimes_5utils_dt64_to_dt *__pyx_optional_args) {
  PyObject *__pyx_v_tzinfo = ((PyObject *)Py_None);
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  npy_int64 __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_dt64_as_int64_us __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_us __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64_to_dt", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tzinfo = __pyx_optional_args->tzinfo;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_dtclass = __pyx_optional_args->dtclass;
      }
    }
  }

  /* "utils.pxd":5445
 *     :returns `<'datetime.datetime'>`: The resulting datetime (or subclass if `dtclass` is specified).
 *     """
 *     return dt_fr_us(dt64_as_int64_us(dt64, 0), tzinfo, dtclass)             # <<<<<<<<<<<<<<
 * 
 * # . errors
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.offset = 0;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_dt64_as_int64_us(__pyx_v_dt64, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((npy_int64)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 5445, __pyx_L1_error)
  __pyx_t_4.__pyx_n = 2;
  __pyx_t_4.tzinfo = __pyx_v_tzinfo;
  __pyx_t_4.dtclass = __pyx_v_dtclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_us(__pyx_t_1, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5445, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":5435
 *     return (yy_ep * 365 + leaps + days_bf_month(yy, mm)) * factor + offset
 * 
 * cdef inline datetime.datetime dt64_to_dt(object dt64, object tzinfo=None, object dtclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.datetime64 to datetime `<'datetime.datetime'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64_to_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5448
 * 
 * # . errors
 * cdef inline bint _raise_dt64_to_reso_error(object dt64, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported conversion unit for datetime64/timedelta64.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_dt64_to_reso_error(PyObject *__pyx_v_dt64, PyObject *__pyx_v_to_unit) {
  PyObject *__pyx_v_type_str = 0;
  int __pyx_v_dt_reso;
  PyObject *__pyx_v_dt_reso_str = 0;
  PyObject *__pyx_v_err = NULL;
  int __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;
  PyObject *__pyx_t_8[7];
  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;
  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;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24[27];
  PyObject *__pyx_t_25 = NULL;
  int __pyx_t_26;
  char const *__pyx_t_27;
  PyObject *__pyx_t_28 = NULL;
  PyObject *__pyx_t_29 = NULL;
  PyObject *__pyx_t_30 = NULL;
  PyObject *__pyx_t_31 = NULL;
  PyObject *__pyx_t_32 = NULL;
  PyObject *__pyx_t_33 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_dt64_to_reso_error", 0);

  /* "utils.pxd":5454
 *     :param to_unit `<'str'>`: The target conversion numpy unit.
 *     """
 *     cdef str type_str = type(dt64)             # <<<<<<<<<<<<<<
 *     cdef int dt_reso = np.get_datetime64_unit(dt64)
 *     cdef str dt_reso_str
*/
  if (!(likely(PyUnicode_CheckExact(((PyObject *)Py_TYPE(__pyx_v_dt64)))) || __Pyx_RaiseUnexpectedTypeError("str", ((PyObject *)Py_TYPE(__pyx_v_dt64))))) __PYX_ERR(5, 5454, __pyx_L1_error)
  __Pyx_INCREF(((PyObject *)Py_TYPE(__pyx_v_dt64)));
  __pyx_v_type_str = ((PyObject*)((PyObject *)Py_TYPE(__pyx_v_dt64)));

  /* "utils.pxd":5455
 *     """
 *     cdef str type_str = type(dt64)
 *     cdef int dt_reso = np.get_datetime64_unit(dt64)             # <<<<<<<<<<<<<<
 *     cdef str dt_reso_str
 *     try:
*/
  __pyx_v_dt_reso = __pyx_f_5numpy_get_datetime64_unit(__pyx_v_dt64);

  /* "utils.pxd":5457
 *     cdef int dt_reso = np.get_datetime64_unit(dt64)
 *     cdef str dt_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "utils.pxd":5458
 *     cdef str dt_reso_str
 *     try:
 *         dt_reso_str = nptime_unit_int2str(dt_reso)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         raise ValueError(
*/
      __pyx_t_4 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_dt_reso); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5458, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_v_dt_reso_str = ((PyObject*)__pyx_t_4);
      __pyx_t_4 = 0;

      /* "utils.pxd":5457
 *     cdef int dt_reso = np.get_datetime64_unit(dt64)
 *     cdef str dt_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:
*/
    }

    /* "utils.pxd":5480
 *         ) from err
 *     else:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot convert %s from '%s' to int64 '%s' ticks.\n"
 *             "Supported units: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
*/
    /*else:*/ {
      __pyx_t_5 = NULL;

      /* "utils.pxd":5483
 *             "Cannot convert %s from '%s' to int64 '%s' ticks.\n"
 *             "Supported units: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
 *             % (type_str, dt_reso_str, to_unit)             # <<<<<<<<<<<<<<
 *         )
 * 
*/
      __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_dt_reso_str); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 5483, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_to_unit); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5483, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert_2;
      __pyx_t_8[1] = __pyx_v_type_str;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u_from;
      __pyx_t_8[3] = __pyx_t_6;
      __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_to_int64;
      __pyx_t_8[5] = __pyx_t_7;
      __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u_ticks_Supported_units_Y_M_W_D_h;

      /* "utils.pxd":5481
 *     else:
 *         raise ValueError(
 *             "Cannot convert %s from '%s' to int64 '%s' ticks.\n"             # <<<<<<<<<<<<<<
 *             "Supported units: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
 *             % (type_str, dt_reso_str, to_unit)
*/
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_type_str) + 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 77, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_type_str) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 5481, __pyx_L5_except_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(5, 5480, __pyx_L5_except_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(5, 5480, __pyx_L5_except_error)
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "utils.pxd":5459
 *     try:
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert %s from '%d' unit to int64 '%s' ticks.\n"
*/
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("cytimes.utils._raise_dt64_to_reso_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_9, &__pyx_t_5) < 0) __PYX_ERR(5, 5459, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_v_err = __pyx_t_9;
      /*try:*/ {

        /* "utils.pxd":5460
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot convert %s from '%d' unit to int64 '%s' ticks.\n"
 *             "Supported units: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
*/
        __pyx_t_6 = NULL;

        /* "utils.pxd":5465
 *             "%d's', %d'ms', %d'us', %d'ns'" % (
 *                 type_str,
 *                 dt_reso,             # <<<<<<<<<<<<<<
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,
*/
        __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_v_dt_reso, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 5465, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_12);

        /* "utils.pxd":5466
 *                 type_str,
 *                 dt_reso,
 *                 to_unit,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,
*/
        __pyx_t_13 = __Pyx_PyUnicode_Unicode(__pyx_v_to_unit); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 5466, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_13);

        /* "utils.pxd":5467
 *                 dt_reso,
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,
*/
        __pyx_t_14 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_YY, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 5467, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_14);

        /* "utils.pxd":5468
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,
*/
        __pyx_t_15 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MM, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 5468, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_15);

        /* "utils.pxd":5469
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,
*/
        __pyx_t_16 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_WW, 0, ' ', 'd'); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 5469, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_16);

        /* "utils.pxd":5470
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,
*/
        __pyx_t_17 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_DD, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(5, 5470, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_17);

        /* "utils.pxd":5471
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,
*/
        __pyx_t_18 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_HH, 0, ' ', 'd'); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 5471, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_18);

        /* "utils.pxd":5472
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,
*/
        __pyx_t_19 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MI, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(5, 5472, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_19);

        /* "utils.pxd":5473
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,
*/
        __pyx_t_20 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_SS, 0, ' ', 'd'); if (unlikely(!__pyx_t_20)) __PYX_ERR(5, 5473, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_20);

        /* "utils.pxd":5474
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_US,
 *                 DT_NPY_UNIT_NS,
*/
        __pyx_t_21 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MS, 0, ' ', 'd'); if (unlikely(!__pyx_t_21)) __PYX_ERR(5, 5474, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_21);

        /* "utils.pxd":5475
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_NS,
 *             )
*/
        __pyx_t_22 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_US, 0, ' ', 'd'); if (unlikely(!__pyx_t_22)) __PYX_ERR(5, 5475, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_22);

        /* "utils.pxd":5476
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,
 *                 DT_NPY_UNIT_NS,             # <<<<<<<<<<<<<<
 *             )
 *         ) from err
*/
        __pyx_t_23 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_NS, 0, ' ', 'd'); if (unlikely(!__pyx_t_23)) __PYX_ERR(5, 5476, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_23);
        __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert_2;
        __pyx_t_24[1] = __pyx_v_type_str;
        __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_from;
        __pyx_t_24[3] = __pyx_t_12;
        __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_unit_to_int64;
        __pyx_t_24[5] = __pyx_t_13;
        __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u_ticks_Supported_units;
        __pyx_t_24[7] = __pyx_t_14;
        __pyx_t_24[8] = __pyx_mstate_global->__pyx_kp_u_Y_2;
        __pyx_t_24[9] = __pyx_t_15;
        __pyx_t_24[10] = __pyx_mstate_global->__pyx_kp_u_M_2;
        __pyx_t_24[11] = __pyx_t_16;
        __pyx_t_24[12] = __pyx_mstate_global->__pyx_kp_u_W_2;
        __pyx_t_24[13] = __pyx_t_17;
        __pyx_t_24[14] = __pyx_mstate_global->__pyx_kp_u_D_2;
        __pyx_t_24[15] = __pyx_t_18;
        __pyx_t_24[16] = __pyx_mstate_global->__pyx_kp_u_h_2;
        __pyx_t_24[17] = __pyx_t_19;
        __pyx_t_24[18] = __pyx_mstate_global->__pyx_kp_u_m_2;
        __pyx_t_24[19] = __pyx_t_20;
        __pyx_t_24[20] = __pyx_mstate_global->__pyx_kp_u_s_2;
        __pyx_t_24[21] = __pyx_t_21;
        __pyx_t_24[22] = __pyx_mstate_global->__pyx_kp_u_ms_2;
        __pyx_t_24[23] = __pyx_t_22;
        __pyx_t_24[24] = __pyx_mstate_global->__pyx_kp_u_us_2;
        __pyx_t_24[25] = __pyx_t_23;
        __pyx_t_24[26] = __pyx_mstate_global->__pyx_kp_u_ns_2;

        /* "utils.pxd":5461
 *     except Exception as err:
 *         raise ValueError(
 *             "Cannot convert %s from '%d' unit to int64 '%s' ticks.\n"             # <<<<<<<<<<<<<<
 *             "Supported units: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
 *             "%d's', %d'ms', %d'us', %d'ns'" % (
*/
        __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_24, 27, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_type_str) + 7 * 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 26 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 6 * 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23) + 5, 65535 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_type_str) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13));
        if (unlikely(!__pyx_t_25)) __PYX_ERR(5, 5461, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_25);
        __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_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __pyx_t_10 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_25};
          __pyx_t_7 = __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_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5460, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_7);
        }

        /* "utils.pxd":5478
 *                 DT_NPY_UNIT_NS,
 *             )
 *         ) from err             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError(
*/
        __Pyx_Raise(__pyx_t_7, 0, 0, __pyx_v_err);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(5, 5460, __pyx_L14_error)
      }

      /* "utils.pxd":5459
 *     try:
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert %s from '%d' unit to int64 '%s' ticks.\n"
*/
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
          if ( unlikely(__Pyx_GetException(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30) < 0)) __Pyx_ErrFetch(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_28);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_31);
          __Pyx_XGOTREF(__pyx_t_32);
          __Pyx_XGOTREF(__pyx_t_33);
          __pyx_t_11 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_XGIVEREF(__pyx_t_32);
          __Pyx_XGIVEREF(__pyx_t_33);
          __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_32, __pyx_t_33);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_30);
          __Pyx_ErrRestore(__pyx_t_28, __pyx_t_29, __pyx_t_30);
          __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;

    /* "utils.pxd":5457
 *     cdef int dt_reso = np.get_datetime64_unit(dt64)
 *     cdef str dt_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         dt_reso_str = nptime_unit_int2str(dt_reso)
 *     except Exception as err:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
  }

  /* "utils.pxd":5448
 * 
 * # . errors
 * cdef inline bint _raise_dt64_to_reso_error(object dt64, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported conversion unit for datetime64/timedelta64.
 * 
*/

  /* 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_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_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("cytimes.utils._raise_dt64_to_reso_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_XDECREF(__pyx_v_type_str);
  __Pyx_XDECREF(__pyx_v_dt_reso_str);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5488
 * # NumPy: timedelta64 -----------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_td64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.timedelta64` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_td64(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":5497
 *     >>> isinstance(obj, np.timedelta64)
 *     """
 *     return np.is_timedelta64_object(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint assure_td64(object obj) except -1:
*/
  __pyx_r = __pyx_f_5numpy_is_timedelta64_object(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":5488
 * # NumPy: timedelta64 -----------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_td64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.timedelta64` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5499
 *     return np.is_timedelta64_object(obj)
 * 
 * cdef inline bint assure_td64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Assure an object is an instance of np.timedelta64."""
 *     if not np.is_timedelta64_object(obj):
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_td64(PyObject *__pyx_v_obj) {
  int __pyx_r;
  __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[5];
  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("assure_td64", 0);

  /* "utils.pxd":5501
 * cdef inline bint assure_td64(object obj) except -1:
 *     """Assure an object is an instance of np.timedelta64."""
 *     if not np.is_timedelta64_object(obj):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.timedelta64', "
*/
  __pyx_t_1 = (!__pyx_f_5numpy_is_timedelta64_object(__pyx_v_obj));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5502
 *     """Assure an object is an instance of np.timedelta64."""
 *     if not np.is_timedelta64_object(obj):
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Expects an instance of 'np.timedelta64', "
 *             "instead got '%s' %s." % (obj, type(obj))
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":5504
 *         raise TypeError(
 *             "Expects an instance of 'np.timedelta64', "
 *             "instead got '%s' %s." % (obj, type(obj))             # <<<<<<<<<<<<<<
 *         )
 *     return True
*/
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_obj), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_obj))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5504, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_np_timede;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_6[3] = __pyx_t_5;
    __pyx_t_6[4] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "utils.pxd":5503
 *     if not np.is_timedelta64_object(obj):
 *         raise TypeError(
 *             "Expects an instance of 'np.timedelta64', "             # <<<<<<<<<<<<<<
 *             "instead got '%s' %s." % (obj, type(obj))
 *         )
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 5, 54 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 5503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5502, __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(5, 5502, __pyx_L1_error)

    /* "utils.pxd":5501
 * cdef inline bint assure_td64(object obj) except -1:
 *     """Assure an object is an instance of np.timedelta64."""
 *     if not np.is_timedelta64_object(obj):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.timedelta64', "
*/
  }

  /* "utils.pxd":5506
 *             "instead got '%s' %s." % (obj, type(obj))
 *         )
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . conversion
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":5499
 *     return np.is_timedelta64_object(obj)
 * 
 * cdef inline bint assure_td64(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Assure an object is an instance of np.timedelta64."""
 *     if not np.is_timedelta64_object(obj):
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.assure_td64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5509
 * 
 * # . conversion
 * cdef inline np.npy_int64 td64_as_int64_us(object td64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.timedelta64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils_td64_as_int64_us(PyObject *__pyx_v_td64, struct __pyx_opt_args_7cytimes_5utils_td64_as_int64_us *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  NPY_DATETIMEUNIT __pyx_v_unit;
  npy_int64 __pyx_v_value;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_r;
  int __pyx_t_1;
  npy_int64 __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils__td64_M_as_int64_D __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils__td64_Y_as_int64_D __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":5520
 *     """
 *     # Get unit & value
 *     assure_td64(td64)             # <<<<<<<<<<<<<<
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(td64)
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_td64(__pyx_v_td64); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5520, __pyx_L1_error)

  /* "utils.pxd":5522
 *     assure_td64(td64)
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(td64)             # <<<<<<<<<<<<<<
 *         np.npy_int64 value = np.get_timedelta64_value(td64)
 *         np.npy_int64 q, r
*/
  __pyx_v_unit = __pyx_f_5numpy_get_datetime64_unit(__pyx_v_td64);

  /* "utils.pxd":5523
 *     cdef:
 *         np.NPY_DATETIMEUNIT unit = np.get_datetime64_unit(td64)
 *         np.npy_int64 value = np.get_timedelta64_value(td64)             # <<<<<<<<<<<<<<
 *         np.npy_int64 q, r
 * 
*/
  __pyx_v_value = __pyx_f_5numpy_get_timedelta64_value(__pyx_v_td64);

  /* "utils.pxd":5527
 * 
 *     # Conversion
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5529
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 0x3E8);
    __pyx_v_r = (__pyx_v_value % 0x3E8);

    /* "utils.pxd":5530
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5531
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5530
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5532
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return value + offset
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5527
 * 
 *     # Conversion
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 1_000; r = value % 1_000
*/
  }

  /* "utils.pxd":5533
 *                 q -= 1
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond             # <<<<<<<<<<<<<<
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5534
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return value + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return value * US_MILLISECOND + offset
*/
    __pyx_r = (__pyx_v_value + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5533
 *                 q -= 1
 *         return q + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond             # <<<<<<<<<<<<<<
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
*/
  }

  /* "utils.pxd":5535
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond             # <<<<<<<<<<<<<<
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5536
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return value * US_MILLISECOND + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return value * US_SECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_MILLISECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5535
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return value + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond             # <<<<<<<<<<<<<<
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
*/
  }

  /* "utils.pxd":5537
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second             # <<<<<<<<<<<<<<
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5538
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return value * US_SECOND + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return value * US_MINUTE + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_SECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5537
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return value * US_MILLISECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second             # <<<<<<<<<<<<<<
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
*/
  }

  /* "utils.pxd":5539
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute             # <<<<<<<<<<<<<<
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5540
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return value * US_MINUTE + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return value * US_HOUR + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_MINUTE) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5539
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return value * US_SECOND + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute             # <<<<<<<<<<<<<<
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
*/
  }

  /* "utils.pxd":5541
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour             # <<<<<<<<<<<<<<
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5542
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return value * US_HOUR + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return value * US_DAY + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_HOUR) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5541
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return value * US_MINUTE + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour             # <<<<<<<<<<<<<<
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
*/
  }

  /* "utils.pxd":5543
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day             # <<<<<<<<<<<<<<
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5544
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return value * US_DAY + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return value * US_DAY * 7 + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_US_DAY) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5543
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return value * US_HOUR + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day             # <<<<<<<<<<<<<<
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
*/
  }

  /* "utils.pxd":5545
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week             # <<<<<<<<<<<<<<
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":5546
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return value * US_DAY * 7 + offset             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
*/
    __pyx_r = (((__pyx_v_value * __pyx_v_7cytimes_5utils_US_DAY) * 7) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5545
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return value * US_DAY + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week             # <<<<<<<<<<<<<<
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
*/
  }

  /* "utils.pxd":5547
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month             # <<<<<<<<<<<<<<
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":5548
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)             # <<<<<<<<<<<<<<
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
 *         return _td64_Y_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
*/
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_2 = __pyx_f_7cytimes_5utils__td64_M_as_int64_D(__pyx_v_value, NPY_FR_us, &__pyx_t_3); if (unlikely(__pyx_t_2 == ((npy_int64)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 5548, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":5547
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return value * US_DAY * 7 + offset
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month             # <<<<<<<<<<<<<<
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
*/
  }

  /* "utils.pxd":5549
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year             # <<<<<<<<<<<<<<
 *         return _td64_Y_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 * 
*/
  __pyx_t_1 = (__pyx_v_unit == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":5550
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
 *         return _td64_Y_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_2 = __pyx_f_7cytimes_5utils__td64_Y_as_int64_D(__pyx_v_value, NPY_FR_us, &__pyx_t_4); if (unlikely(__pyx_t_2 == ((npy_int64)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 5550, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "utils.pxd":5549
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64_M_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 *     if unit == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year             # <<<<<<<<<<<<<<
 *         return _td64_Y_as_int64_D(value, np.NPY_DATETIMEUNIT.NPY_FR_us, offset)
 * 
*/
  }

  /* "utils.pxd":5553
 * 
 *     # Unsupported unit
 *     _raise_dt64_to_reso_error(td64, "us")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.npy_int64 _td64_Y_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64_to_reso_error(__pyx_v_td64, __pyx_mstate_global->__pyx_n_u_us); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5553, __pyx_L1_error)

  /* "utils.pxd":5509
 * 
 * # . conversion
 * cdef inline np.npy_int64 td64_as_int64_us(object td64, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """Convert a np.timedelta64 to int64 microsecond ('us') ticks `<'int'>`.
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.utils.td64_as_int64_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  return __pyx_r;
}

/* "utils.pxd":5555
 *     _raise_dt64_to_reso_error(td64, "us")
 * 
 * cdef inline np.npy_int64 _td64_Y_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[Y] to int64 day ticks using an average
 *     year (365.2425 D), then further adjust the resolution by `to_reso` and
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__td64_Y_as_int64_D(npy_int64 __pyx_v_value, int __pyx_v_to_reso, struct __pyx_opt_args_7cytimes_5utils__td64_Y_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_r;
  __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("_td64_Y_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":5571
 *     #   525,949.2 m = 1440 * 365.2425   = 2,629,746 / 5
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         value *= 146_097
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5572
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         value *= 146_097             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 400; r = value % 400
*/
    __pyx_v_value = (__pyx_v_value * 0x23AB1);

    /* "utils.pxd":5574
 *         value *= 146_097
 *         with cython.cdivision(True):
 *             q = value / 400; r = value % 400             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 0x190);
    __pyx_v_r = (__pyx_v_value % 0x190);

    /* "utils.pxd":5575
 *         with cython.cdivision(True):
 *             q = value / 400; r = value % 400
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5576
 *             q = value / 400; r = value % 400
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5575
 *         with cython.cdivision(True):
 *             q = value / 400; r = value % 400
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5577
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         value *= 438_291
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5571
 *     #   525,949.2 m = 1440 * 365.2425   = 2,629,746 / 5
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         value *= 146_097
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5578
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         value *= 438_291
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5579
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         value *= 438_291             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 50; r = value % 50
*/
    __pyx_v_value = (__pyx_v_value * 0x6B013);

    /* "utils.pxd":5581
 *         value *= 438_291
 *         with cython.cdivision(True):
 *             q = value / 50; r = value % 50             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 50);
    __pyx_v_r = (__pyx_v_value % 50);

    /* "utils.pxd":5582
 *         with cython.cdivision(True):
 *             q = value / 50; r = value % 50
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5583
 *             q = value / 50; r = value % 50
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5582
 *         with cython.cdivision(True):
 *             q = value / 50; r = value % 50
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5584
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         value *= 2_629_746
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5578
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         value *= 438_291
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5585
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         value *= 2_629_746
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5586
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         value *= 2_629_746             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 5; r = value % 5
*/
    __pyx_v_value = (__pyx_v_value * 0x282072);

    /* "utils.pxd":5588
 *         value *= 2_629_746
 *         with cython.cdivision(True):
 *             q = value / 5; r = value % 5             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 5);
    __pyx_v_r = (__pyx_v_value % 5);

    /* "utils.pxd":5589
 *         with cython.cdivision(True):
 *             q = value / 5; r = value % 5
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5590
 *             q = value / 5; r = value % 5
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5589
 *         with cython.cdivision(True):
 *             q = value / 5; r = value % 5
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5591
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_YY_SECOND + offset
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5585
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         value *= 2_629_746
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5592
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5593
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_YY_SECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_YY_MILLISECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_YY_SECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5592
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":5594
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_YY_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5595
 *         return value * TD64_YY_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_YY_MILLISECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_YY_MICROSECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_YY_MILLISECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5594
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_YY_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":5596
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_YY_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5597
 *         return value * TD64_YY_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_YY_MICROSECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return value * TD64_YY_NANOSECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_YY_MICROSECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5596
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_YY_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  }

  /* "utils.pxd":5598
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_YY_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_NANOSECOND + offset
 * 
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5599
 *         return value * TD64_YY_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return value * TD64_YY_NANOSECOND + offset             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported conversion resolution
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_YY_NANOSECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5598
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_YY_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return value * TD64_YY_NANOSECOND + offset
 * 
*/
  }

  /* "utils.pxd":5602
 * 
 *     # Unsupported conversion resolution
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.npy_int64 _td64_M_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_to_reso); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_conversion_unit_d_fo, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5602, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __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(5, 5602, __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(5, 5602, __pyx_L1_error)

  /* "utils.pxd":5555
 *     _raise_dt64_to_reso_error(td64, "us")
 * 
 * cdef inline np.npy_int64 _td64_Y_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[Y] to int64 day ticks using an average
 *     year (365.2425 D), then further adjust the resolution by `to_reso` and
*/

  /* 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("cytimes.utils._td64_Y_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5604
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline np.npy_int64 _td64_M_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[M] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust
*/

static CYTHON_INLINE npy_int64 __pyx_f_7cytimes_5utils__td64_M_as_int64_D(npy_int64 __pyx_v_value, int __pyx_v_to_reso, struct __pyx_opt_args_7cytimes_5utils__td64_M_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_r;
  __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("_td64_M_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
    }
  }

  /* "utils.pxd":5620
 *     #   43,829.1 m  = 1440 * 30.436875  = 438291 / 10
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         value *= 48_699
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":5621
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         value *= 48_699             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 1_600; r = value % 1_600
*/
    __pyx_v_value = (__pyx_v_value * 0xBE3B);

    /* "utils.pxd":5623
 *         value *= 48_699
 *         with cython.cdivision(True):
 *             q = value / 1_600; r = value % 1_600             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 0x640);
    __pyx_v_r = (__pyx_v_value % 0x640);

    /* "utils.pxd":5624
 *         with cython.cdivision(True):
 *             q = value / 1_600; r = value % 1_600
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5625
 *             q = value / 1_600; r = value % 1_600
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5624
 *         with cython.cdivision(True):
 *             q = value / 1_600; r = value % 1_600
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5626
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         value *= 146_097
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5620
 *     #   43,829.1 m  = 1440 * 30.436875  = 438291 / 10
 *     cdef np.npy_int64 q, r
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         value *= 48_699
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5627
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         value *= 146_097
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":5628
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         value *= 146_097             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 200; r = value % 200
*/
    __pyx_v_value = (__pyx_v_value * 0x23AB1);

    /* "utils.pxd":5630
 *         value *= 146_097
 *         with cython.cdivision(True):
 *             q = value / 200; r = value % 200             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 0xC8);
    __pyx_v_r = (__pyx_v_value % 0xC8);

    /* "utils.pxd":5631
 *         with cython.cdivision(True):
 *             q = value / 200; r = value % 200
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5632
 *             q = value / 200; r = value % 200
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5631
 *         with cython.cdivision(True):
 *             q = value / 200; r = value % 200
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5633
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         value *= 438_291
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5627
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         value *= 146_097
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5634
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         value *= 438_291
 *         with cython.cdivision(True):
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":5635
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         value *= 438_291             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = value / 10; r = value % 10
*/
    __pyx_v_value = (__pyx_v_value * 0x6B013);

    /* "utils.pxd":5637
 *         value *= 438_291
 *         with cython.cdivision(True):
 *             q = value / 10; r = value % 10             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 q -= 1
*/
    __pyx_v_q = (__pyx_v_value / 10);
    __pyx_v_r = (__pyx_v_value % 10);

    /* "utils.pxd":5638
 *         with cython.cdivision(True):
 *             q = value / 10; r = value % 10
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":5639
 *             q = value / 10; r = value % 10
 *             if r < 0:
 *                 q -= 1             # <<<<<<<<<<<<<<
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":5638
 *         with cython.cdivision(True):
 *             q = value / 10; r = value % 10
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 q -= 1
 *         return q + offset
*/
    }

    /* "utils.pxd":5640
 *             if r < 0:
 *                 q -= 1
 *         return q + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_MM_SECOND + offset
*/
    __pyx_r = (__pyx_v_q + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5634
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         value *= 438_291
 *         with cython.cdivision(True):
*/
  }

  /* "utils.pxd":5641
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":5642
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_MM_SECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_MM_MILLISECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_MM_SECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5641
 *                 q -= 1
 *         return q + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":5643
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_MM_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":5644
 *         return value * TD64_MM_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_MM_MILLISECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_MM_MICROSECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_MM_MILLISECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5643
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return value * TD64_MM_SECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":5645
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_MM_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":5646
 *         return value * TD64_MM_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_MM_MICROSECOND + offset             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return value * TD64_MM_NANOSECOND + offset
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_MM_MICROSECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5645
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return value * TD64_MM_MILLISECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  }

  /* "utils.pxd":5647
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_MM_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_NANOSECOND + offset
 * 
*/
  __pyx_t_1 = (__pyx_v_to_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":5648
 *         return value * TD64_MM_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return value * TD64_MM_NANOSECOND + offset             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported conversion resolution
*/
    __pyx_r = ((__pyx_v_value * __pyx_v_7cytimes_5utils_TD64_MM_NANOSECOND) + __pyx_v_offset);
    goto __pyx_L0;

    /* "utils.pxd":5647
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return value * TD64_MM_MICROSECOND + offset
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return value * TD64_MM_NANOSECOND + offset
 * 
*/
  }

  /* "utils.pxd":5651
 * 
 *     # Unsupported conversion resolution
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)             # <<<<<<<<<<<<<<
 * 
 * cdef inline datetime.timedelta td64_to_td(object td64, object tdclass=None):
*/
  __pyx_t_3 = NULL;
  __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_v_to_reso); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_conversion_unit_d_fo, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_5};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __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(5, 5651, __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(5, 5651, __pyx_L1_error)

  /* "utils.pxd":5604
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline np.npy_int64 _td64_M_as_int64_D(np.npy_int64 value, int to_reso, np.npy_int64 offset=0):             # <<<<<<<<<<<<<<
 *     """(internal) Convert np.timedelta[M] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust
*/

  /* 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("cytimes.utils._td64_M_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5653
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline datetime.timedelta td64_to_td(object td64, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.timedelta64 to timedelta `<'datetime.timedelta'>`.
 * 
*/

static CYTHON_INLINE PyDateTime_Delta *__pyx_f_7cytimes_5utils_td64_to_td(PyObject *__pyx_v_td64, struct __pyx_opt_args_7cytimes_5utils_td64_to_td *__pyx_optional_args) {
  PyObject *__pyx_v_tdclass = ((PyObject *)Py_None);
  PyDateTime_Delta *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  npy_int64 __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_td64_as_int64_us __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_td_fr_us __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td64_to_td", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tdclass = __pyx_optional_args->tdclass;
    }
  }

  /* "utils.pxd":5661
 *     :returns `<'datetime.timedelta'>`: The resulting timedelta (or subclass if `tdclass` is specified).
 *     """
 *     return td_fr_us(td64_as_int64_us(td64, 0), tdclass)             # <<<<<<<<<<<<<<
 * 
 * # NumPy: ndarray ---------------------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.offset = 0;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_td64_as_int64_us(__pyx_v_td64, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((npy_int64)-1LL) && PyErr_Occurred())) __PYX_ERR(5, 5661, __pyx_L1_error)
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.tdclass = __pyx_v_tdclass;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_td_fr_us(__pyx_t_1, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = ((PyDateTime_Delta *)__pyx_t_3);
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "utils.pxd":5653
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64." % to_reso)
 * 
 * cdef inline datetime.timedelta td64_to_td(object td64, object tdclass=None):             # <<<<<<<<<<<<<<
 *     """Convert np.timedelta64 to timedelta `<'datetime.timedelta'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.td64_to_td", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5665
 * # NumPy: ndarray ---------------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_arr(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.ndarray` `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_arr(PyObject *__pyx_v_obj) {
  int __pyx_r;

  /* "utils.pxd":5674
 *     >>> isinstance(obj, np.ndarray)
 *     """
 *     return np.PyArray_Check(obj)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint assure_1dim_arr(np.ndarray arr) except -1:
*/
  __pyx_r = PyArray_Check(__pyx_v_obj);
  goto __pyx_L0;

  /* "utils.pxd":5665
 * # NumPy: ndarray ---------------------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_arr(object obj) except -1:             # <<<<<<<<<<<<<<
 *     """Check if an object is an instance or subclass of `np.ndarray` `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5676
 *     return np.PyArray_Check(obj)
 * 
 * cdef inline bint assure_1dim_arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is 1-dimensional.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_1dim_arr(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  __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("assure_1dim_arr", 0);

  /* "utils.pxd":5681
 *     :raises `<'ValueError'>`: If the array is not 1-dimensional.
 *     """
 *     if arr.ndim != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("Expects 1-D ndarray, instead got %d-dimensional array." % arr.ndim)
 *     return True
*/
  __pyx_t_1 = (__pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_arr) != 1);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5682
 *     """
 *     if arr.ndim != 1:
 *         raise ValueError("Expects 1-D ndarray, instead got %d-dimensional array." % arr.ndim)             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = __Pyx_PyLong_From_int(__pyx_f_5numpy_7ndarray_4ndim_ndim(__pyx_v_arr)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 5682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Expects_1_D_ndarray_instead_got, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5682, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __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(5, 5682, __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(5, 5682, __pyx_L1_error)

    /* "utils.pxd":5681
 *     :raises `<'ValueError'>`: If the array is not 1-dimensional.
 *     """
 *     if arr.ndim != 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("Expects 1-D ndarray, instead got %d-dimensional array." % arr.ndim)
 *     return True
*/
  }

  /* "utils.pxd":5683
 *     if arr.ndim != 1:
 *         raise ValueError("Expects 1-D ndarray, instead got %d-dimensional array." % arr.ndim)
 *     return True             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray assure_arr_contiguous(np.ndarray arr):
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":5676
 *     return np.PyArray_Check(obj)
 * 
 * cdef inline bint assure_1dim_arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is 1-dimensional.
 * 
*/

  /* 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("cytimes.utils.assure_1dim_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5685
 *     return True
 * 
 * cdef inline np.ndarray assure_arr_contiguous(np.ndarray arr):             # <<<<<<<<<<<<<<
 *     """Ensure that an ndarray is C-contiguous in memory `<'np.ndarray'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_assure_arr_contiguous(PyArrayObject *__pyx_v_arr) {
  PyArrayObject *__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("assure_arr_contiguous", 0);

  /* "utils.pxd":5691
 *         otherwise, returns a contiguous copy.
 *     """
 *     if np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         return arr
 *     return np.PyArray_GETCONTIGUOUS(arr)
*/
  __pyx_t_1 = PyArray_IS_C_CONTIGUOUS(__pyx_v_arr);
  if (__pyx_t_1) {

    /* "utils.pxd":5692
 *     """
 *     if np.PyArray_IS_C_CONTIGUOUS(arr):
 *         return arr             # <<<<<<<<<<<<<<
 *     return np.PyArray_GETCONTIGUOUS(arr)
 * 
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_arr);
    __pyx_r = __pyx_v_arr;
    goto __pyx_L0;

    /* "utils.pxd":5691
 *         otherwise, returns a contiguous copy.
 *     """
 *     if np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         return arr
 *     return np.PyArray_GETCONTIGUOUS(arr)
*/
  }

  /* "utils.pxd":5693
 *     if np.PyArray_IS_C_CONTIGUOUS(arr):
 *         return arr
 *     return np.PyArray_GETCONTIGUOUS(arr)             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint is_arr_int(np.ndarray arr) except -1:
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2 = ((PyObject *)PyArray_GETCONTIGUOUS(__pyx_v_arr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5693, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "utils.pxd":5685
 *     return True
 * 
 * cdef inline np.ndarray assure_arr_contiguous(np.ndarray arr):             # <<<<<<<<<<<<<<
 *     """Ensure that an ndarray is C-contiguous in memory `<'np.ndarray'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.assure_arr_contiguous", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5695
 *     return np.PyArray_GETCONTIGUOUS(arr)
 * 
 * cdef inline bint is_arr_int(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of integer dtype `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_arr_int(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;

  /* "utils.pxd":5700
 *     - Integer dtype: `int8`, `int16`, `int32` and `int64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT8,
 *         np.NPY_TYPES.NPY_INT16,
*/
  __pyx_t_1 = PyArray_TYPE(__pyx_v_arr);

  /* "utils.pxd":5701
 *     """
 *     return np.PyArray_TYPE(arr) in (
 *         np.NPY_TYPES.NPY_INT8,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT16,
 *         np.NPY_TYPES.NPY_INT32,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_INT8);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5700
 *     - Integer dtype: `int8`, `int16`, `int32` and `int64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT8,
 *         np.NPY_TYPES.NPY_INT16,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_INT16);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5703
 *         np.NPY_TYPES.NPY_INT8,
 *         np.NPY_TYPES.NPY_INT16,
 *         np.NPY_TYPES.NPY_INT32,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT64,
 *     )
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_INT32);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5700
 *     - Integer dtype: `int8`, `int16`, `int32` and `int64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT8,
 *         np.NPY_TYPES.NPY_INT16,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_INT64);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "utils.pxd":5695
 *     return np.PyArray_GETCONTIGUOUS(arr)
 * 
 * cdef inline bint is_arr_int(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of integer dtype `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5707
 *     )
 * 
 * cdef inline bint is_arr_uint(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of unsigned integer dtype `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_arr_uint(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;

  /* "utils.pxd":5712
 *     - Unsigned Integer dtype: `uint8`, `uint16`, `uint32` and `uint64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_UINT8,
 *         np.NPY_TYPES.NPY_UINT16,
*/
  __pyx_t_1 = PyArray_TYPE(__pyx_v_arr);

  /* "utils.pxd":5713
 *     """
 *     return np.PyArray_TYPE(arr) in (
 *         np.NPY_TYPES.NPY_UINT8,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_UINT16,
 *         np.NPY_TYPES.NPY_UINT32,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_UINT8);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5712
 *     - Unsigned Integer dtype: `uint8`, `uint16`, `uint32` and `uint64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_UINT8,
 *         np.NPY_TYPES.NPY_UINT16,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_UINT16);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5715
 *         np.NPY_TYPES.NPY_UINT8,
 *         np.NPY_TYPES.NPY_UINT16,
 *         np.NPY_TYPES.NPY_UINT32,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_UINT64,
 *     )
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_UINT32);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5712
 *     - Unsigned Integer dtype: `uint8`, `uint16`, `uint32` and `uint64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_UINT8,
 *         np.NPY_TYPES.NPY_UINT16,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_UINT64);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "utils.pxd":5707
 *     )
 * 
 * cdef inline bint is_arr_uint(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of unsigned integer dtype `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5719
 *     )
 * 
 * cdef inline bint is_arr_float(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of float dtype `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_arr_float(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;

  /* "utils.pxd":5724
 *     - Float dtype: `float16`, `float32` and `float64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_FLOAT16,
 *         np.NPY_TYPES.NPY_FLOAT32,
*/
  __pyx_t_1 = PyArray_TYPE(__pyx_v_arr);

  /* "utils.pxd":5725
 *     """
 *     return np.PyArray_TYPE(arr) in (
 *         np.NPY_TYPES.NPY_FLOAT16,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_FLOAT32,
 *         np.NPY_TYPES.NPY_FLOAT64,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_FLOAT16);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5724
 *     - Float dtype: `float16`, `float32` and `float64`.
 *     """
 *     return np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_FLOAT16,
 *         np.NPY_TYPES.NPY_FLOAT32,
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_FLOAT32);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L3_bool_binop_done;
  }

  /* "utils.pxd":5727
 *         np.NPY_TYPES.NPY_FLOAT16,
 *         np.NPY_TYPES.NPY_FLOAT32,
 *         np.NPY_TYPES.NPY_FLOAT64,             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_3 = (__pyx_t_1 == NPY_FLOAT64);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "utils.pxd":5719
 *     )
 * 
 * cdef inline bint is_arr_float(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a numpy array is of float dtype `<'bool'>`.
 * 
*/

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

/* "utils.pxd":5731
 * 
 * # . dtype
 * cdef inline np.ndarray arr_assure_int64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype int64 `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_assure_int64(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 *__pyx_optional_args) {
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  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("arr_assure_int64", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_copy = __pyx_optional_args->copy;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":5743
 *     """
 *     # Assure 1-D
 *     assure_1dim_arr(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Assure contiguous
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_1dim_arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5743, __pyx_L1_error)

  /* "utils.pxd":5746
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  __pyx_t_1 = (!PyArray_IS_C_CONTIGUOUS(__pyx_v_arr));
  if (__pyx_t_1) {

    /* "utils.pxd":5747
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)             # <<<<<<<<<<<<<<
 *         copy = False
 * 
*/
    __pyx_t_2 = ((PyObject *)PyArray_GETCONTIGUOUS(__pyx_v_arr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5747, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "utils.pxd":5748
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False             # <<<<<<<<<<<<<<
 * 
 *     # Assure dtype
*/
    __pyx_v_copy = 0;

    /* "utils.pxd":5746
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  }

  /* "utils.pxd":5751
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_INT64:             # <<<<<<<<<<<<<<
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
*/
  __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) == NPY_INT64);
  if (__pyx_t_1) {

    /* "utils.pxd":5752
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_INT64:
 *         return np.PyArray_Copy(arr) if copy else arr             # <<<<<<<<<<<<<<
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (__pyx_v_copy) {
      __pyx_t_3 = PyArray_Copy(__pyx_v_arr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5752, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5752, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF((PyObject *)__pyx_v_arr);
      __pyx_t_2 = ((PyObject *)__pyx_v_arr);
    }
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":5751
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_INT64:             # <<<<<<<<<<<<<<
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
*/
  }

  /* "utils.pxd":5754
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_assure_int64_like(np.ndarray arr, bint copy=True):
*/
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_2 = PyArray_Cast(__pyx_v_arr, NPY_INT64); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5754, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5754, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":5731
 * 
 * # . dtype
 * cdef inline np.ndarray arr_assure_int64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype int64 `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_assure_int64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5756
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_int64_like(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype
 *     int64 / datetime64[*] / timedelta64[*] `<'ndarray[int64*]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_assure_int64_like(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like *__pyx_optional_args) {
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __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("arr_assure_int64_like", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_copy = __pyx_optional_args->copy;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":5769
 *     """
 *     # Assure 1-D
 *     assure_1dim_arr(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Assure contiguous
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_1dim_arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5769, __pyx_L1_error)

  /* "utils.pxd":5772
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  __pyx_t_1 = (!PyArray_IS_C_CONTIGUOUS(__pyx_v_arr));
  if (__pyx_t_1) {

    /* "utils.pxd":5773
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)             # <<<<<<<<<<<<<<
 *         copy = False
 * 
*/
    __pyx_t_2 = ((PyObject *)PyArray_GETCONTIGUOUS(__pyx_v_arr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5773, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "utils.pxd":5774
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False             # <<<<<<<<<<<<<<
 * 
 *     # Assure dtype
*/
    __pyx_v_copy = 0;

    /* "utils.pxd":5772
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  }

  /* "utils.pxd":5777
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT64,
 *         np.NPY_TYPES.NPY_DATETIME,
*/
  __pyx_t_3 = PyArray_TYPE(__pyx_v_arr);

  /* "utils.pxd":5778
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) in (
 *         np.NPY_TYPES.NPY_INT64,             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_DATETIME,
 *         np.NPY_TYPES.NPY_TIMEDELTA,
*/
  __pyx_t_4 = (__pyx_t_3 == NPY_INT64);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }

  /* "utils.pxd":5777
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT64,
 *         np.NPY_TYPES.NPY_DATETIME,
*/
  __pyx_t_4 = (__pyx_t_3 == NPY_DATETIME);
  if (!__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L5_bool_binop_done;
  }

  /* "utils.pxd":5780
 *         np.NPY_TYPES.NPY_INT64,
 *         np.NPY_TYPES.NPY_DATETIME,
 *         np.NPY_TYPES.NPY_TIMEDELTA,             # <<<<<<<<<<<<<<
 *     ):
 *         return np.PyArray_Copy(arr) if copy else arr
*/
  __pyx_t_4 = (__pyx_t_3 == NPY_TIMEDELTA);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L5_bool_binop_done:;

  /* "utils.pxd":5777
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT64,
 *         np.NPY_TYPES.NPY_DATETIME,
*/
  __pyx_t_4 = __pyx_t_1;
  if (__pyx_t_4) {

    /* "utils.pxd":5782
 *         np.NPY_TYPES.NPY_TIMEDELTA,
 *     ):
 *         return np.PyArray_Copy(arr) if copy else arr             # <<<<<<<<<<<<<<
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (__pyx_v_copy) {
      __pyx_t_5 = PyArray_Copy(__pyx_v_arr); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 5782, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5782, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_5;
      __pyx_t_5 = 0;
    } else {
      __Pyx_INCREF((PyObject *)__pyx_v_arr);
      __pyx_t_2 = ((PyObject *)__pyx_v_arr);
    }
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":5777
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) in (             # <<<<<<<<<<<<<<
 *         np.NPY_TYPES.NPY_INT64,
 *         np.NPY_TYPES.NPY_DATETIME,
*/
  }

  /* "utils.pxd":5784
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_assure_float64(np.ndarray arr, bint copy=True):
*/
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_2 = PyArray_Cast(__pyx_v_arr, NPY_INT64); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5784, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5784, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":5756
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_int64_like(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype
 *     int64 / datetime64[*] / timedelta64[*] `<'ndarray[int64*]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_assure_int64_like", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5786
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_float64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype float64 `<'ndarray[float64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_assure_float64(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_arr_assure_float64 *__pyx_optional_args) {
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  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("arr_assure_float64", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_copy = __pyx_optional_args->copy;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":5798
 *     """
 *     # Assure 1-D
 *     assure_1dim_arr(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Assure contiguous
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_1dim_arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 5798, __pyx_L1_error)

  /* "utils.pxd":5801
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  __pyx_t_1 = (!PyArray_IS_C_CONTIGUOUS(__pyx_v_arr));
  if (__pyx_t_1) {

    /* "utils.pxd":5802
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)             # <<<<<<<<<<<<<<
 *         copy = False
 * 
*/
    __pyx_t_2 = ((PyObject *)PyArray_GETCONTIGUOUS(__pyx_v_arr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5802, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "utils.pxd":5803
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False             # <<<<<<<<<<<<<<
 * 
 *     # Assure dtype
*/
    __pyx_v_copy = 0;

    /* "utils.pxd":5801
 * 
 *     # Assure contiguous
 *     if not np.PyArray_IS_C_CONTIGUOUS(arr):             # <<<<<<<<<<<<<<
 *         arr = np.PyArray_GETCONTIGUOUS(arr)
 *         copy = False
*/
  }

  /* "utils.pxd":5806
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_FLOAT64:             # <<<<<<<<<<<<<<
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
*/
  __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) == NPY_FLOAT64);
  if (__pyx_t_1) {

    /* "utils.pxd":5807
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_FLOAT64:
 *         return np.PyArray_Copy(arr) if copy else arr             # <<<<<<<<<<<<<<
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_FLOAT64)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    if (__pyx_v_copy) {
      __pyx_t_3 = PyArray_Copy(__pyx_v_arr); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 5807, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5807, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_3;
      __pyx_t_3 = 0;
    } else {
      __Pyx_INCREF((PyObject *)__pyx_v_arr);
      __pyx_t_2 = ((PyObject *)__pyx_v_arr);
    }
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":5806
 * 
 *     # Assure dtype
 *     if np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_FLOAT64:             # <<<<<<<<<<<<<<
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
*/
  }

  /* "utils.pxd":5809
 *         return np.PyArray_Copy(arr) if copy else arr
 *     else:
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_FLOAT64)             # <<<<<<<<<<<<<<
 * 
 * # . create
*/
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_2 = PyArray_Cast(__pyx_v_arr, NPY_FLOAT64); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5809, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5809, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":5786
 *         return np.PyArray_Cast(arr, np.NPY_TYPES.NPY_INT64)
 * 
 * cdef inline np.ndarray arr_assure_float64(np.ndarray arr, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ensure that a 1-D array is contiguous and dtype float64 `<'ndarray[float64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_assure_float64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5812
 * 
 * # . create
 * cdef inline np.ndarray arr_zero_int64(np.npy_intp size):             # <<<<<<<<<<<<<<
 *     """Create a 1-D ndarray[int64] filled with zero `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_zero_int64(npy_intp __pyx_v_size) {
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  npy_intp __pyx_t_5[1];
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_zero_int64", 0);

  /* "utils.pxd":5821
 *     >>> np.zeros(size, dtype="int64")
 *     """
 *     if size < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     else:
*/
  __pyx_t_1 = (__pyx_v_size < 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5822
 *     """
 *     if size < 0:
 *         raise ValueError("The size of a new array must be a positive integer.")             # <<<<<<<<<<<<<<
 *     else:
 *         return np.PyArray_ZEROS(1, [size], np.NPY_TYPES.NPY_INT64, 0)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_The_size_of_a_new_array_must_be};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 5822, __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(5, 5822, __pyx_L1_error)

    /* "utils.pxd":5821
 *     >>> np.zeros(size, dtype="int64")
 *     """
 *     if size < 0:             # <<<<<<<<<<<<<<
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     else:
*/
  }

  /* "utils.pxd":5824
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     else:
 *         return np.PyArray_ZEROS(1, [size], np.NPY_TYPES.NPY_INT64, 0)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_fill_int64(np.npy_int64 value, np.npy_intp size):
*/
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5[0] = __pyx_v_size;
    __pyx_t_2 = PyArray_ZEROS(1, __pyx_t_5, NPY_INT64, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5824, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5824, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":5812
 * 
 * # . create
 * cdef inline np.ndarray arr_zero_int64(np.npy_intp size):             # <<<<<<<<<<<<<<
 *     """Create a 1-D ndarray[int64] filled with zero `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_zero_int64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5826
 *         return np.PyArray_ZEROS(1, [size], np.NPY_TYPES.NPY_INT64, 0)
 * 
 * cdef inline np.ndarray arr_fill_int64(np.npy_int64 value, np.npy_intp size):             # <<<<<<<<<<<<<<
 *     """Create a 1-D ndarray[int64] filled with a specific integer `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_fill_int64(npy_int64 __pyx_v_value, npy_intp __pyx_v_size) {
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  npy_intp __pyx_t_5[1];
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  npy_intp __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_fill_int64", 0);

  /* "utils.pxd":5837
 *     """
 *     # Fast-path
 *     if value == 0:             # <<<<<<<<<<<<<<
 *         return arr_zero_int64(size)
 * 
*/
  __pyx_t_1 = (__pyx_v_value == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":5838
 *     # Fast-path
 *     if value == 0:
 *         return arr_zero_int64(size)             # <<<<<<<<<<<<<<
 * 
 *     # New array
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_zero_int64(__pyx_v_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5838, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":5837
 *     """
 *     # Fast-path
 *     if value == 0:             # <<<<<<<<<<<<<<
 *         return arr_zero_int64(size)
 * 
*/
  }

  /* "utils.pxd":5841
 * 
 *     # New array
 *     if size < 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_size < 1);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5842
 *     # New array
 *     if size < 1:
 *         raise ValueError("The size of a new array must be a positive integer.")             # <<<<<<<<<<<<<<
 *     cdef:
 *         np.ndarray arr = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_INT64, 0)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_The_size_of_a_new_array_must_be};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 5842, __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(5, 5842, __pyx_L1_error)

    /* "utils.pxd":5841
 * 
 *     # New array
 *     if size < 1:             # <<<<<<<<<<<<<<
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     cdef:
*/
  }

  /* "utils.pxd":5844
 *         raise ValueError("The size of a new array must be a positive integer.")
 *     cdef:
 *         np.ndarray arr = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_INT64, 0)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_t_5[0] = __pyx_v_size;
  __pyx_t_2 = PyArray_EMPTY(1, __pyx_t_5, NPY_INT64, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5844, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 5844, __pyx_L1_error)
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":5845
 *     cdef:
 *         np.ndarray arr = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_INT64, 0)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *     for i in range(size):
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":5847
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         arr_ptr[i] = value
 *     return arr
*/
  __pyx_t_6 = __pyx_v_size;
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_i = __pyx_t_8;

    /* "utils.pxd":5848
 *         np.npy_intp i
 *     for i in range(size):
 *         arr_ptr[i] = value             # <<<<<<<<<<<<<<
 *     return arr
 * 
*/
    (__pyx_v_arr_ptr[__pyx_v_i]) = __pyx_v_value;
  }

  /* "utils.pxd":5849
 *     for i in range(size):
 *         arr_ptr[i] = value
 *     return arr             # <<<<<<<<<<<<<<
 * 
 * # . range
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);
  __pyx_r = __pyx_v_arr;
  goto __pyx_L0;

  /* "utils.pxd":5826
 *         return np.PyArray_ZEROS(1, [size], np.NPY_TYPES.NPY_INT64, 0)
 * 
 * cdef inline np.ndarray arr_fill_int64(np.npy_int64 value, np.npy_intp size):             # <<<<<<<<<<<<<<
 *     """Create a 1-D ndarray[int64] filled with a specific integer `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_fill_int64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5852
 * 
 * # . range
 * cdef inline np.ndarray arr_clamp(np.ndarray arr, np.npy_int64 minimum, np.npy_int64 maximum, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Clamp the values of a 1-D ndarray between 'minimum' and 'maximum' value `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_clamp(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_minimum, npy_int64 __pyx_v_maximum, struct __pyx_opt_args_7cytimes_5utils_arr_clamp *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  npy_intp __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_clamp", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":5873
 *     """
 *     # Validate
 *     if minimum > maximum:             # <<<<<<<<<<<<<<
 *         raise ValueError("minimum value cannot be greater than maximum value.")
 * 
*/
  __pyx_t_1 = (__pyx_v_minimum > __pyx_v_maximum);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":5874
 *     # Validate
 *     if minimum > maximum:
 *         raise ValueError("minimum value cannot be greater than maximum value.")             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_minimum_value_cannot_be_greater};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(5, 5874, __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(5, 5874, __pyx_L1_error)

    /* "utils.pxd":5873
 *     """
 *     # Validate
 *     if minimum > maximum:             # <<<<<<<<<<<<<<
 *         raise ValueError("minimum value cannot be greater than maximum value.")
 * 
*/
  }

  /* "utils.pxd":5878
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 5878, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":5879
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":5880
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":5885
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_offset == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":5886
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_6 = __pyx_v_size;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_i = __pyx_t_8;

      /* "utils.pxd":5887
 *     if offset == 0:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":5889
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Clamp value
*/
      __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":5890
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Clamp value
 *             if v > maximum:
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":5889
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Clamp value
*/
      }

      /* "utils.pxd":5892
 *                 continue
 *             # Clamp value
 *             if v > maximum:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = maximum
 *             elif v < minimum:
*/
      __pyx_t_1 = (__pyx_v_v > __pyx_v_maximum);
      if (__pyx_t_1) {

        /* "utils.pxd":5893
 *             # Clamp value
 *             if v > maximum:
 *                 out_ptr[i] = maximum             # <<<<<<<<<<<<<<
 *             elif v < minimum:
 *                 out_ptr[i] = minimum
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_maximum;

        /* "utils.pxd":5892
 *                 continue
 *             # Clamp value
 *             if v > maximum:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = maximum
 *             elif v < minimum:
*/
        goto __pyx_L8;
      }

      /* "utils.pxd":5894
 *             if v > maximum:
 *                 out_ptr[i] = maximum
 *             elif v < minimum:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = minimum
 * 
*/
      __pyx_t_1 = (__pyx_v_v < __pyx_v_minimum);
      if (__pyx_t_1) {

        /* "utils.pxd":5895
 *                 out_ptr[i] = maximum
 *             elif v < minimum:
 *                 out_ptr[i] = minimum             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_minimum;

        /* "utils.pxd":5894
 *             if v > maximum:
 *                 out_ptr[i] = maximum
 *             elif v < minimum:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = minimum
 * 
*/
      }
      __pyx_L8:;
      __pyx_L5_continue:;
    }

    /* "utils.pxd":5885
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":5899
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
  /*else*/ {
    __pyx_t_6 = __pyx_v_size;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_i = __pyx_t_8;

      /* "utils.pxd":5900
 *     else:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":5902
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Clamp value
*/
      __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":5903
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Clamp value
 *             if v > maximum:
*/
        goto __pyx_L9_continue;

        /* "utils.pxd":5902
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Clamp value
*/
      }

      /* "utils.pxd":5905
 *                 continue
 *             # Clamp value
 *             if v > maximum:             # <<<<<<<<<<<<<<
 *                 v = maximum
 *             elif v < minimum:
*/
      __pyx_t_1 = (__pyx_v_v > __pyx_v_maximum);
      if (__pyx_t_1) {

        /* "utils.pxd":5906
 *             # Clamp value
 *             if v > maximum:
 *                 v = maximum             # <<<<<<<<<<<<<<
 *             elif v < minimum:
 *                 v = minimum
*/
        __pyx_v_v = __pyx_v_maximum;

        /* "utils.pxd":5905
 *                 continue
 *             # Clamp value
 *             if v > maximum:             # <<<<<<<<<<<<<<
 *                 v = maximum
 *             elif v < minimum:
*/
        goto __pyx_L12;
      }

      /* "utils.pxd":5907
 *             if v > maximum:
 *                 v = maximum
 *             elif v < minimum:             # <<<<<<<<<<<<<<
 *                 v = minimum
 *             out_ptr[i] = v + offset
*/
      __pyx_t_1 = (__pyx_v_v < __pyx_v_minimum);
      if (__pyx_t_1) {

        /* "utils.pxd":5908
 *                 v = maximum
 *             elif v < minimum:
 *                 v = minimum             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v + offset
 * 
*/
        __pyx_v_v = __pyx_v_minimum;

        /* "utils.pxd":5907
 *             if v > maximum:
 *                 v = maximum
 *             elif v < minimum:             # <<<<<<<<<<<<<<
 *                 v = minimum
 *             out_ptr[i] = v + offset
*/
      }
      __pyx_L12:;

      /* "utils.pxd":5909
 *             elif v < minimum:
 *                 v = minimum
 *             out_ptr[i] = v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_offset);
      __pyx_L9_continue:;
    }
  }
  __pyx_L4:;

  /* "utils.pxd":5911
 *             out_ptr[i] = v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_min(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":5852
 * 
 * # . range
 * cdef inline np.ndarray arr_clamp(np.ndarray arr, np.npy_int64 minimum, np.npy_int64 maximum, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Clamp the values of a 1-D ndarray between 'minimum' and 'maximum' value `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_clamp", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5913
 *     return out
 * 
 * cdef inline np.ndarray arr_min(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_min(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_arr_min *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  int __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_min", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":5934
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":5935
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":5936
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":5941
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  __pyx_t_3 = (__pyx_v_offset == 0);
  if (__pyx_t_3) {

    /* "utils.pxd":5942
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":5943
 *     if offset == 0:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":5945
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":5946
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Min value
 *             if v > value:
*/
        goto __pyx_L4_continue;

        /* "utils.pxd":5945
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
      }

      /* "utils.pxd":5948
 *                 continue
 *             # Min value
 *             if v > value:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = value
 * 
*/
      __pyx_t_3 = (__pyx_v_v > __pyx_v_value);
      if (__pyx_t_3) {

        /* "utils.pxd":5949
 *             # Min value
 *             if v > value:
 *                 out_ptr[i] = value             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_value;

        /* "utils.pxd":5948
 *                 continue
 *             # Min value
 *             if v > value:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = value
 * 
*/
      }
      __pyx_L4_continue:;
    }

    /* "utils.pxd":5941
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":5953
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
  /*else*/ {
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":5954
 *     else:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":5956
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":5957
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Min value
 *             if v > value:
*/
        goto __pyx_L8_continue;

        /* "utils.pxd":5956
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
      }

      /* "utils.pxd":5959
 *                 continue
 *             # Min value
 *             if v > value:             # <<<<<<<<<<<<<<
 *                 v = value
 *             out_ptr[i] = v + offset
*/
      __pyx_t_3 = (__pyx_v_v > __pyx_v_value);
      if (__pyx_t_3) {

        /* "utils.pxd":5960
 *             # Min value
 *             if v > value:
 *                 v = value             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v + offset
 * 
*/
        __pyx_v_v = __pyx_v_value;

        /* "utils.pxd":5959
 *                 continue
 *             # Min value
 *             if v > value:             # <<<<<<<<<<<<<<
 *                 v = value
 *             out_ptr[i] = v + offset
*/
      }

      /* "utils.pxd":5961
 *             if v > value:
 *                 v = value
 *             out_ptr[i] = v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_offset);
      __pyx_L8_continue:;
    }
  }
  __pyx_L3:;

  /* "utils.pxd":5963
 *             out_ptr[i] = v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_max(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":5913
 *     return out
 * 
 * cdef inline np.ndarray arr_min(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_min", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":5965
 *     return out
 * 
 * cdef inline np.ndarray arr_max(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_max(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_arr_max *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  int __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_max", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":5986
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 5986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":5987
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":5988
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":5993
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  __pyx_t_3 = (__pyx_v_offset == 0);
  if (__pyx_t_3) {

    /* "utils.pxd":5994
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":5995
 *     if offset == 0:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":5997
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":5998
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Max value
 *             if v < value:
*/
        goto __pyx_L4_continue;

        /* "utils.pxd":5997
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
      }

      /* "utils.pxd":6000
 *                 continue
 *             # Max value
 *             if v < value:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = value
 * 
*/
      __pyx_t_3 = (__pyx_v_v < __pyx_v_value);
      if (__pyx_t_3) {

        /* "utils.pxd":6001
 *             # Max value
 *             if v < value:
 *                 out_ptr[i] = value             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_value;

        /* "utils.pxd":6000
 *                 continue
 *             # Max value
 *             if v < value:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = value
 * 
*/
      }
      __pyx_L4_continue:;
    }

    /* "utils.pxd":5993
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":6005
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
  /*else*/ {
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":6006
 *     else:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6008
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":6009
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Max value
 *             if v < value:
*/
        goto __pyx_L8_continue;

        /* "utils.pxd":6008
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
      }

      /* "utils.pxd":6011
 *                 continue
 *             # Max value
 *             if v < value:             # <<<<<<<<<<<<<<
 *                 v = value
 *             out_ptr[i] = v + offset
*/
      __pyx_t_3 = (__pyx_v_v < __pyx_v_value);
      if (__pyx_t_3) {

        /* "utils.pxd":6012
 *             # Max value
 *             if v < value:
 *                 v = value             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v + offset
 * 
*/
        __pyx_v_v = __pyx_v_value;

        /* "utils.pxd":6011
 *                 continue
 *             # Max value
 *             if v < value:             # <<<<<<<<<<<<<<
 *                 v = value
 *             out_ptr[i] = v + offset
*/
      }

      /* "utils.pxd":6013
 *             if v < value:
 *                 v = value
 *             out_ptr[i] = v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_offset);
      __pyx_L8_continue:;
    }
  }
  __pyx_L3:;

  /* "utils.pxd":6015
 *             out_ptr[i] = v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_min_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":5965
 *     return out
 * 
 * cdef inline np.ndarray arr_max(np.ndarray arr, np.npy_int64 value, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of a 1-D array with the scalar 'value' `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_max", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6017
 *     return out
 * 
 * cdef inline np.ndarray arr_min_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_min_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2, struct __pyx_opt_args_7cytimes_5utils_arr_min_arr *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_intp __pyx_v_size;
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_min_arr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6038
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":6039
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6040
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":6043
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 6043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 6043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_ndarrays_with_dif;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":6041
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 65 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 6041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6040, __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(5, 6040, __pyx_L1_error)

    /* "utils.pxd":6039
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":6048
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)             # <<<<<<<<<<<<<<
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6048, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6049
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6050
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6051
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v1, v2
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":6056
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             # Propagate NaT
*/
  __pyx_t_1 = (__pyx_v_offset == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6057
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             # Propagate NaT
 *             v1 = out_ptr[i]
*/
    __pyx_t_10 = __pyx_v_size;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_i = __pyx_t_12;

      /* "utils.pxd":6059
 *         for i in range(size):
 *             # Propagate NaT
 *             v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *             if v1 == LLONG_MIN:
 *                 continue
*/
      __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6060
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6061
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":6060
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      }

      /* "utils.pxd":6062
 *             if v1 == LLONG_MIN:
 *                 continue
 *             v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
*/
      __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

      /* "utils.pxd":6063
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6064
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6065
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
 *                 continue             # <<<<<<<<<<<<<<
 *             # Min value
 *             if v1 > v2:
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":6063
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      }

      /* "utils.pxd":6067
 *                 continue
 *             # Min value
 *             if v1 > v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 * 
*/
      __pyx_t_1 = (__pyx_v_v1 > __pyx_v_v2);
      if (__pyx_t_1) {

        /* "utils.pxd":6068
 *             # Min value
 *             if v1 > v2:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6067
 *                 continue
 *             # Min value
 *             if v1 > v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 * 
*/
      }
      __pyx_L5_continue:;
    }

    /* "utils.pxd":6056
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             # Propagate NaT
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":6072
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             # Propagate NaT
 *             v1 = out_ptr[i]
*/
  /*else*/ {
    __pyx_t_10 = __pyx_v_size;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_i = __pyx_t_12;

      /* "utils.pxd":6074
 *         for i in range(size):
 *             # Propagate NaT
 *             v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *             if v1 == LLONG_MIN:
 *                 continue
*/
      __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6075
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6076
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":6075
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      }

      /* "utils.pxd":6077
 *             if v1 == LLONG_MIN:
 *                 continue
 *             v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
*/
      __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

      /* "utils.pxd":6078
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6079
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *                 continue
 *             # Min value
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6080
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
 *                 continue             # <<<<<<<<<<<<<<
 *             # Min value
 *             if v1 > v2:
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":6078
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      }

      /* "utils.pxd":6082
 *                 continue
 *             # Min value
 *             if v1 > v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2 + offset
 *             else:
*/
      __pyx_t_1 = (__pyx_v_v1 > __pyx_v_v2);
      if (__pyx_t_1) {

        /* "utils.pxd":6083
 *             # Min value
 *             if v1 > v2:
 *                 out_ptr[i] = v2 + offset             # <<<<<<<<<<<<<<
 *             else:
 *                 out_ptr[i] = v1 + offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v2 + __pyx_v_offset);

        /* "utils.pxd":6082
 *                 continue
 *             # Min value
 *             if v1 > v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2 + offset
 *             else:
*/
        goto __pyx_L14;
      }

      /* "utils.pxd":6085
 *                 out_ptr[i] = v2 + offset
 *             else:
 *                 out_ptr[i] = v1 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      /*else*/ {
        (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v1 + __pyx_v_offset);
      }
      __pyx_L14:;
      __pyx_L10_continue:;
    }
  }
  __pyx_L4:;

  /* "utils.pxd":6087
 *                 out_ptr[i] = v1 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_max_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6017
 *     return out
 * 
 * cdef inline np.ndarray arr_min_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise minimum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_min_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6089
 *     return out
 * 
 * cdef inline np.ndarray arr_max_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_max_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2, struct __pyx_opt_args_7cytimes_5utils_arr_max_arr *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_intp __pyx_v_size;
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_max_arr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6109
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":6110
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6111
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":6114
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 6114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 6114, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_ndarrays_with_dif;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":6112
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 65 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 6112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6111, __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(5, 6111, __pyx_L1_error)

    /* "utils.pxd":6110
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":6119
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)             # <<<<<<<<<<<<<<
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6119, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6120
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6120, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6121
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6122
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v1, v2
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":6127
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             # Propagate NaT
*/
  __pyx_t_1 = (__pyx_v_offset == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6128
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             # Propagate NaT
 *             v1 = out_ptr[i]
*/
    __pyx_t_10 = __pyx_v_size;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_i = __pyx_t_12;

      /* "utils.pxd":6130
 *         for i in range(size):
 *             # Propagate NaT
 *             v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *             if v1 == LLONG_MIN:
 *                 continue
*/
      __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6131
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6132
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":6131
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      }

      /* "utils.pxd":6133
 *             if v1 == LLONG_MIN:
 *                 continue
 *             v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
*/
      __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

      /* "utils.pxd":6134
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6135
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6136
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
 *                 continue             # <<<<<<<<<<<<<<
 *             # Max value
 *             if v1 < v2:
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":6134
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      }

      /* "utils.pxd":6138
 *                 continue
 *             # Max value
 *             if v1 < v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 * 
*/
      __pyx_t_1 = (__pyx_v_v1 < __pyx_v_v2);
      if (__pyx_t_1) {

        /* "utils.pxd":6139
 *             # Max value
 *             if v1 < v2:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6138
 *                 continue
 *             # Max value
 *             if v1 < v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 * 
*/
      }
      __pyx_L5_continue:;
    }

    /* "utils.pxd":6127
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             # Propagate NaT
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":6143
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             # Propagate NaT
 *             v1 = out_ptr[i]
*/
  /*else*/ {
    __pyx_t_10 = __pyx_v_size;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_v_i = __pyx_t_12;

      /* "utils.pxd":6145
 *         for i in range(size):
 *             # Propagate NaT
 *             v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *             if v1 == LLONG_MIN:
 *                 continue
*/
      __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6146
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6147
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":6146
 *             # Propagate NaT
 *             v1 = out_ptr[i]
 *             if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             v2 = arr_ptr[i]
*/
      }

      /* "utils.pxd":6148
 *             if v1 == LLONG_MIN:
 *                 continue
 *             v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
*/
      __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

      /* "utils.pxd":6149
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6150
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *                 continue
 *             # Max value
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

        /* "utils.pxd":6151
 *             if v2 == LLONG_MIN:
 *                 out_ptr[i] = v2
 *                 continue             # <<<<<<<<<<<<<<
 *             # Max value
 *             if v1 < v2:
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":6149
 *                 continue
 *             v2 = arr_ptr[i]
 *             if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2
 *                 continue
*/
      }

      /* "utils.pxd":6153
 *                 continue
 *             # Max value
 *             if v1 < v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2 + offset
 *             else:
*/
      __pyx_t_1 = (__pyx_v_v1 < __pyx_v_v2);
      if (__pyx_t_1) {

        /* "utils.pxd":6154
 *             # Max value
 *             if v1 < v2:
 *                 out_ptr[i] = v2 + offset             # <<<<<<<<<<<<<<
 *             else:
 *                 out_ptr[i] = v1 + offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v2 + __pyx_v_offset);

        /* "utils.pxd":6153
 *                 continue
 *             # Max value
 *             if v1 < v2:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = v2 + offset
 *             else:
*/
        goto __pyx_L14;
      }

      /* "utils.pxd":6156
 *                 out_ptr[i] = v2 + offset
 *             else:
 *                 out_ptr[i] = v1 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      /*else*/ {
        (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v1 + __pyx_v_offset);
      }
      __pyx_L14:;
      __pyx_L10_continue:;
    }
  }
  __pyx_L4:;

  /* "utils.pxd":6158
 *                 out_ptr[i] = v1 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * # . arithmetic
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6089
 *     return out
 * 
 * cdef inline np.ndarray arr_max_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise maximum of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_max_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6161
 * 
 * # . arithmetic
 * cdef inline np.ndarray arr_abs(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise absolute of a 1-D array `<'ndarray[int64]'`>
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_abs(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_arr_abs *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  int __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_abs", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6181
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":6182
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6183
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6188
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  __pyx_t_3 = (__pyx_v_offset == 0);
  if (__pyx_t_3) {

    /* "utils.pxd":6189
 *     # No offset
 *     if offset == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":6190
 *     if offset == 0:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6192
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Abs value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":6193
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Abs value
 *             if v < 0:
*/
        goto __pyx_L4_continue;

        /* "utils.pxd":6192
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Abs value
*/
      }

      /* "utils.pxd":6195
 *                 continue
 *             # Abs value
 *             if v < 0:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = -v
 * 
*/
      __pyx_t_3 = (__pyx_v_v < 0);
      if (__pyx_t_3) {

        /* "utils.pxd":6196
 *             # Abs value
 *             if v < 0:
 *                 out_ptr[i] = -v             # <<<<<<<<<<<<<<
 * 
 *     # With offset
*/
        (__pyx_v_out_ptr[__pyx_v_i]) = (-__pyx_v_v);

        /* "utils.pxd":6195
 *                 continue
 *             # Abs value
 *             if v < 0:             # <<<<<<<<<<<<<<
 *                 out_ptr[i] = -v
 * 
*/
      }
      __pyx_L4_continue:;
    }

    /* "utils.pxd":6188
 * 
 *     # No offset
 *     if offset == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
    goto __pyx_L3;
  }

  /* "utils.pxd":6200
 *     # With offset
 *     else:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
  /*else*/ {
    __pyx_t_4 = __pyx_v_size;
    __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;

      /* "utils.pxd":6201
 *     else:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6203
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Abs value
*/
      __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_3) {

        /* "utils.pxd":6204
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Abs value
 *             if v < 0:
*/
        goto __pyx_L8_continue;

        /* "utils.pxd":6203
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Abs value
*/
      }

      /* "utils.pxd":6206
 *                 continue
 *             # Abs value
 *             if v < 0:             # <<<<<<<<<<<<<<
 *                 v = -v
 *             out_ptr[i] = v + offset
*/
      __pyx_t_3 = (__pyx_v_v < 0);
      if (__pyx_t_3) {

        /* "utils.pxd":6207
 *             # Abs value
 *             if v < 0:
 *                 v = -v             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v + offset
 * 
*/
        __pyx_v_v = (-__pyx_v_v);

        /* "utils.pxd":6206
 *                 continue
 *             # Abs value
 *             if v < 0:             # <<<<<<<<<<<<<<
 *                 v = -v
 *             out_ptr[i] = v + offset
*/
      }

      /* "utils.pxd":6208
 *             if v < 0:
 *                 v = -v
 *             out_ptr[i] = v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_offset);
      __pyx_L8_continue:;
    }
  }
  __pyx_L3:;

  /* "utils.pxd":6210
 *             out_ptr[i] = v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_neg(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6161
 * 
 * # . arithmetic
 * cdef inline np.ndarray arr_abs(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Take the elementwise absolute of a 1-D array `<'ndarray[int64]'`>
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_abs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6212
 *     return out
 * 
 * cdef inline np.ndarray arr_neg(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Negate the values of a 1-D array `<'ndarray[int64]'>`
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_neg(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_arr_neg *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_neg", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6232
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":6233
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6234
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6239
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":6240
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6242
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Negate value
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":6243
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Negate value
 *         out_ptr[i] = -v + offset
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":6242
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Negate value
*/
    }

    /* "utils.pxd":6245
 *             continue
 *         # Negate value
 *         out_ptr[i] = -v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((-__pyx_v_v) + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":6247
 *         out_ptr[i] = -v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_add(np.ndarray arr, np.npy_int64 value, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6212
 *     return out
 * 
 * cdef inline np.ndarray arr_neg(np.ndarray arr, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Negate the values of a 1-D array `<'ndarray[int64]'>`
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_neg", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6249
 *     return out
 * 
 * cdef inline np.ndarray arr_add(np.ndarray arr, np.npy_int64 value, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Add a 'value' to the 1-D array `<'np.ndarray'>`
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_add(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value, struct __pyx_opt_args_7cytimes_5utils_arr_add *__pyx_optional_args) {
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  int __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_add", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_copy = __pyx_optional_args->copy;
    }
  }

  /* "utils.pxd":6268
 *     """
 *     # Fast-path
 *     cdef np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *     if value == 0:
 *         return out
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 6268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":6269
 *     # Fast-path
 *     cdef np.ndarray out = arr_assure_int64_like(arr, copy)
 *     if value == 0:             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
  __pyx_t_3 = (__pyx_v_value == 0);
  if (__pyx_t_3) {

    /* "utils.pxd":6270
 *     cdef np.ndarray out = arr_assure_int64_like(arr, copy)
 *     if value == 0:
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":6269
 *     # Fast-path
 *     cdef np.ndarray out = arr_assure_int64_like(arr, copy)
 *     if value == 0:             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
  }

  /* "utils.pxd":6274
 *     # Setup
 *     cdef:
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6275
 *     cdef:
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6280
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_4 = __pyx_v_size;
  __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;

    /* "utils.pxd":6281
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6283
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Add value
*/
    __pyx_t_3 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_3) {

      /* "utils.pxd":6284
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Add value
 *         out_ptr[i] = v + value
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":6283
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Add value
*/
    }

    /* "utils.pxd":6286
 *             continue
 *         # Add value
 *         out_ptr[i] = v + value             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_value);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":6288
 *         out_ptr[i] = v + value
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6249
 *     return out
 * 
 * cdef inline np.ndarray arr_add(np.ndarray arr, np.npy_int64 value, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Add a 'value' to the 1-D array `<'np.ndarray'>`
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6290
 *     return out
 * 
 * cdef inline np.ndarray arr_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Multiply the values of a 1-D array by the 'factor' `<'np.ndarray'>`
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6310
 *     """
 *     # Fast-path
 *     if factor == 1:             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6311
 *     # Fast-path
 *     if factor == 1:
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6310
 *     """
 *     # Fast-path
 *     if factor == 1:             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6315
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6315, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6316
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6317
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6322
 * 
 *     # Zero factor
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6323
 *     # Zero factor
 *     if factor == 0:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":6324
 *     if factor == 0:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6326
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Set to offset
*/
      __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6327
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Set to offset
 *             out_ptr[i] = offset
*/
        goto __pyx_L5_continue;

        /* "utils.pxd":6326
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Set to offset
*/
      }

      /* "utils.pxd":6329
 *                 continue
 *             # Set to offset
 *             out_ptr[i] = offset             # <<<<<<<<<<<<<<
 * 
 *     # Compute
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_offset;
      __pyx_L5_continue:;
    }

    /* "utils.pxd":6322
 * 
 *     # Zero factor
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  }

  /* "utils.pxd":6332
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":6333
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6335
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Multiply value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6336
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Multiply value
 *         out_ptr[i] = v * factor + offset
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6335
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Multiply value
*/
    }

    /* "utils.pxd":6338
 *             continue
 *         # Multiply value
 *         out_ptr[i] = v * factor + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_v * __pyx_v_factor) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6340
 *         out_ptr[i] = v * factor + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_mod(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6290
 *     return out
 * 
 * cdef inline np.ndarray arr_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Multiply the values of a 1-D array by the 'factor' `<'np.ndarray'>`
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.utils.arr_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6342
 *     return out
 * 
 * cdef inline np.ndarray arr_mod(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise modulo of a 1-D array by `factor` with Python semantics
 *     (remainder has the same sign as the divisor) `<'np.ndarray'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_mod(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_mod *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  int __pyx_v_neg_f;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  npy_intp __pyx_t_8;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_mod", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6363
 *     """
 *     # Validate
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_mod: division by zero.")
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6364
 *     # Validate
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_mod: division by zero.")             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_mod_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6364, __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(5, 6364, __pyx_L1_error)

    /* "utils.pxd":6363
 *     """
 *     # Validate
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_mod: division by zero.")
 * 
*/
  }

  /* "utils.pxd":6368
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6369
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6370
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6373
 *         np.npy_intp i
 *         np.npy_int64 v
 *         bint neg_f = factor < 0             # <<<<<<<<<<<<<<
 * 
 *     # Fast path: factor == 1
*/
  __pyx_v_neg_f = (__pyx_v_factor < 0);

  /* "utils.pxd":6376
 * 
 *     # Fast path: factor == 1
 *     if factor == 1 or factor == -1:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
  switch (__pyx_v_factor) {
    case 1:
    case -1LL:

    /* "utils.pxd":6377
 *     # Fast path: factor == 1
 *     if factor == 1 or factor == -1:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             v = out_ptr[i]
 *             # Preserve NaT
*/
    __pyx_t_6 = __pyx_v_size;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_i = __pyx_t_8;

      /* "utils.pxd":6378
 *     if factor == 1 or factor == -1:
 *         for i in range(size):
 *             v = out_ptr[i]             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             if v == LLONG_MIN:
*/
      __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

      /* "utils.pxd":6380
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Set to offset
*/
      __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
      if (__pyx_t_1) {

        /* "utils.pxd":6381
 *             # Preserve NaT
 *             if v == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Set to offset
 *             out_ptr[i] = offset
*/
        goto __pyx_L4_continue;

        /* "utils.pxd":6380
 *             v = out_ptr[i]
 *             # Preserve NaT
 *             if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Set to offset
*/
      }

      /* "utils.pxd":6383
 *                 continue
 *             # Set to offset
 *             out_ptr[i] = offset             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_offset;
      __pyx_L4_continue:;
    }

    /* "utils.pxd":6384
 *             # Set to offset
 *             out_ptr[i] = offset
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compute
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":6376
 * 
 *     # Fast path: factor == 1
 *     if factor == 1 or factor == -1:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             v = out_ptr[i]
*/
    break;
    default: break;
  }

  /* "utils.pxd":6387
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_6 = __pyx_v_size;
  __pyx_t_7 = __pyx_t_6;
  for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
    __pyx_v_i = __pyx_t_8;

    /* "utils.pxd":6388
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6390
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Modulo value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6391
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Modulo value
 *         with cython.cdivision(True):
*/
      goto __pyx_L7_continue;

      /* "utils.pxd":6390
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Modulo value
*/
    }

    /* "utils.pxd":6394
 *         # Modulo value
 *         with cython.cdivision(True):
 *             v = v % factor             # <<<<<<<<<<<<<<
 *         if v != 0 and ((v < 0) != neg_f):
 *             v += factor
*/
    __pyx_v_v = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6395
 *         with cython.cdivision(True):
 *             v = v % factor
 *         if v != 0 and ((v < 0) != neg_f):             # <<<<<<<<<<<<<<
 *             v += factor
 *         out_ptr[i] = v + offset
*/
    __pyx_t_9 = (__pyx_v_v != 0);
    if (__pyx_t_9) {
    } else {
      __pyx_t_1 = __pyx_t_9;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_9 = ((__pyx_v_v < 0) != __pyx_v_neg_f);
    __pyx_t_1 = __pyx_t_9;
    __pyx_L11_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":6396
 *             v = v % factor
 *         if v != 0 and ((v < 0) != neg_f):
 *             v += factor             # <<<<<<<<<<<<<<
 *         out_ptr[i] = v + offset
 * 
*/
      __pyx_v_v = (__pyx_v_v + __pyx_v_factor);

      /* "utils.pxd":6395
 *         with cython.cdivision(True):
 *             v = v % factor
 *         if v != 0 and ((v < 0) != neg_f):             # <<<<<<<<<<<<<<
 *             v += factor
 *         out_ptr[i] = v + offset
*/
    }

    /* "utils.pxd":6397
 *         if v != 0 and ((v < 0) != neg_f):
 *             v += factor
 *         out_ptr[i] = v + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v + __pyx_v_offset);
    __pyx_L7_continue:;
  }

  /* "utils.pxd":6399
 *         out_ptr[i] = v + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_even(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6342
 *     return out
 * 
 * cdef inline np.ndarray arr_mod(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise modulo of a 1-D array by `factor` with Python semantics
 *     (remainder has the same sign as the divisor) `<'np.ndarray'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_mod", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6401
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even) <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_even(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_even *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_even", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6421
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_even: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6422
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_even_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6422, __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(5, 6422, __pyx_L1_error)

    /* "utils.pxd":6421
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_even: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6423
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6424
 *         raise ZeroDivisionError("arr_div_even: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6424, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6423
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6425
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6426
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6426, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6425
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6430
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6430, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6431
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6432
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6437
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6438
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6439
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6441
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6442
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6441
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6445
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6446
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6447
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6448
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6449
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      __pyx_t_12 = (__pyx_v_abs_r > __pyx_v_half);
      if (!__pyx_t_12) {
      } else {
        __pyx_t_1 = __pyx_t_12;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_12 = (__pyx_v_abs_r == __pyx_v_half);
      if (__pyx_t_12) {
      } else {
        __pyx_t_1 = __pyx_t_12;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_12 = ((__pyx_v_q & 1) != 0);
      __pyx_t_1 = __pyx_t_12;
      __pyx_L11_bool_binop_done:;
      if (__pyx_t_1) {

        /* "utils.pxd":6450
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6449
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      }

      /* "utils.pxd":6446
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6451
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6453
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_even_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6401
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even) <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_even", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6455
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_even_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_even_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_even __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_even_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6477
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6478
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_even(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6477
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":6479
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_even(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6480
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_even(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6480, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6479
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_even(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":6481
 *     if multiple == 1:
 *         return arr_div_even(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6482
 *         return arr_div_even(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_even_mul_division_by_zer};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 6482, __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(5, 6482, __pyx_L1_error)

    /* "utils.pxd":6481
 *     if multiple == 1:
 *         return arr_div_even(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":6483
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6484
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6484, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6483
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_even_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":6485
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6486
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6486, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6485
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6490
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6491
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6492
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6497
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6498
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6499
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6501
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6502
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide & Multiply
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6501
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    }

    /* "utils.pxd":6505
 *         # Divide & Multiply
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6506
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6507
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6508
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6509
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      __pyx_t_12 = (__pyx_v_abs_r > __pyx_v_half);
      if (!__pyx_t_12) {
      } else {
        __pyx_t_1 = __pyx_t_12;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_12 = (__pyx_v_abs_r == __pyx_v_half);
      if (__pyx_t_12) {
      } else {
        __pyx_t_1 = __pyx_t_12;
        goto __pyx_L13_bool_binop_done;
      }
      __pyx_t_12 = ((__pyx_v_q & 1) != 0);
      __pyx_t_1 = __pyx_t_12;
      __pyx_L13_bool_binop_done:;
      if (__pyx_t_1) {

        /* "utils.pxd":6510
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6509
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      }

      /* "utils.pxd":6506
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6511
 *             if abs_r > half or (abs_r == half and (q & 1) != 0):
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6513
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_up(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6455
 *     return out
 * 
 * cdef inline np.ndarray arr_div_even_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-to-even),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_even_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6515
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-up / away-from-zero) <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_up(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_up *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_up", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6532
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_up: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6533
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_up_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6533, __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(5, 6533, __pyx_L1_error)

    /* "utils.pxd":6532
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_up: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6534
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6535
 *         raise ZeroDivisionError("arr_div_up: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6535, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6534
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6536
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6537
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6536
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6541
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6542
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6543
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6548
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6549
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6550
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6552
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6553
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6552
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6556
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6557
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6558
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r >= half:
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6559
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6560
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r >= half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      __pyx_t_1 = (__pyx_v_abs_r >= __pyx_v_half);
      if (__pyx_t_1) {

        /* "utils.pxd":6561
 *             half  = abs_f - abs_r
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6560
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r >= half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      }

      /* "utils.pxd":6557
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6562
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6564
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_up_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6515
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-up / away-from-zero) <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_up", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6566
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to nearest away from
 *     zero (half-up), then scale by 'multiple' <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_up_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_up_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_up __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_up_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6585
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6586
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_up(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6586, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6585
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":6587
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_up(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6588
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_up(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_up(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6588, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6587
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_up(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":6589
 *     if multiple == 1:
 *         return arr_div_up(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6590
 *         return arr_div_up(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_up_mul_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 6590, __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(5, 6590, __pyx_L1_error)

    /* "utils.pxd":6589
 *     if multiple == 1:
 *         return arr_div_up(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":6591
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6592
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6592, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6591
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_up_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":6593
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6594
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6593
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6598
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6599
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6600
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6605
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6606
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6607
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6609
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6610
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide & Multiply
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6609
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    }

    /* "utils.pxd":6613
 *         # Divide & Multiply
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6614
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6615
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r >= half:
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6616
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6617
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r >= half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      __pyx_t_1 = (__pyx_v_abs_r >= __pyx_v_half);
      if (__pyx_t_1) {

        /* "utils.pxd":6618
 *             half  = abs_f - abs_r
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6617
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r >= half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      }

      /* "utils.pxd":6614
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6619
 *             if abs_r >= half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6621
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_down(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6566
 *     return out
 * 
 * cdef inline np.ndarray arr_div_up_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to nearest away from
 *     zero (half-up), then scale by 'multiple' <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_up_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6623
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest
 *     integers (half-down / toward-zero) <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_down(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_down *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_down", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6641
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_down: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6642
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_down_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6642, __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(5, 6642, __pyx_L1_error)

    /* "utils.pxd":6641
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_down: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6643
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6644
 *         raise ZeroDivisionError("arr_div_down: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6644, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6643
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6645
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6646
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6646, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6645
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6650
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6651
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6652
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6657
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6658
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6659
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6661
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6662
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6661
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6665
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6666
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6667
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r > half:
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6668
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6669
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      __pyx_t_1 = (__pyx_v_abs_r > __pyx_v_half);
      if (__pyx_t_1) {

        /* "utils.pxd":6670
 *             half  = abs_f - abs_r
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6669
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset
*/
      }

      /* "utils.pxd":6666
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6671
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6673
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_down_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6623
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest
 *     integers (half-down / toward-zero) <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_down", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6675
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-down),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_down_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_down_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_abs_f;
  npy_int64 __pyx_v_abs_r;
  npy_int64 __pyx_v_half;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_down __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_int64 __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_down_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6694
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6695
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_down(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6695, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6694
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":6696
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_down(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6697
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_down(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_down(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6696
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_down(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":6698
 *     if multiple == 1:
 *         return arr_div_down(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6699
 *         return arr_div_down(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_down_mul_division_by_zer};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 6699, __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(5, 6699, __pyx_L1_error)

    /* "utils.pxd":6698
 *     if multiple == 1:
 *         return arr_div_down(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":6700
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6701
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6701, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6700
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_down_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":6702
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6703
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6702
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6707
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6707, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6708
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6709
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r, abs_f, abs_r, half
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6714
 * 
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor             # <<<<<<<<<<<<<<
 *     for i in range(size):
 *         v = out_ptr[i]
*/
  __pyx_t_1 = (__pyx_v_factor < 0);
  if (__pyx_t_1) {
    __pyx_t_8 = (-__pyx_v_factor);
  } else {
    __pyx_t_8 = __pyx_v_factor;
  }
  __pyx_v_abs_f = __pyx_t_8;

  /* "utils.pxd":6715
 *     # Compute
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":6716
 *     abs_f = -factor if factor < 0 else factor
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6718
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6719
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide & Multiply
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6718
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide & Multiply
*/
    }

    /* "utils.pxd":6722
 *         # Divide & Multiply
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6723
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    __pyx_t_1 = (__pyx_v_r != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":6724
 *             q = v / factor; r = v % factor
 *         if r != 0:
 *             abs_r = -r if r < 0 else r             # <<<<<<<<<<<<<<
 *             half  = abs_f - abs_r
 *             if abs_r > half:
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_8 = (-__pyx_v_r);
      } else {
        __pyx_t_8 = __pyx_v_r;
      }
      __pyx_v_abs_r = __pyx_t_8;

      /* "utils.pxd":6725
 *         if r != 0:
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r             # <<<<<<<<<<<<<<
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
*/
      __pyx_v_half = (__pyx_v_abs_f - __pyx_v_abs_r);

      /* "utils.pxd":6726
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      __pyx_t_1 = (__pyx_v_abs_r > __pyx_v_half);
      if (__pyx_t_1) {

        /* "utils.pxd":6727
 *             half  = abs_f - abs_r
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
        __pyx_t_1 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
        if (__pyx_t_1) {
          __pyx_t_8 = 1;
        } else {
          __pyx_t_8 = -1LL;
        }
        __pyx_v_q = (__pyx_v_q + __pyx_t_8);

        /* "utils.pxd":6726
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
 *             if abs_r > half:             # <<<<<<<<<<<<<<
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset
*/
      }

      /* "utils.pxd":6723
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0:             # <<<<<<<<<<<<<<
 *             abs_r = -r if r < 0 else r
 *             half  = abs_f - abs_r
*/
    }

    /* "utils.pxd":6728
 *             if abs_r > half:
 *                 q += 1 if ((v ^ factor) >= 0) else -1
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6730
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_ceil(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6675
 *     return out
 * 
 * cdef inline np.ndarray arr_div_down_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and rounds to the nearest integers (half-down),
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_down_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6732
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_ceil(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_ceil", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6752
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6753
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_ceil_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6753, __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(5, 6753, __pyx_L1_error)

    /* "utils.pxd":6752
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6754
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6755
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6755, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6754
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6756
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6757
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6756
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6761
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6761, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6762
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6763
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6768
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":6769
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6771
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6772
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6771
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6775
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6776
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):             # <<<<<<<<<<<<<<
 *             q += 1
 *         out_ptr[i] = q + offset
*/
    __pyx_t_11 = (__pyx_v_r != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_11 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":6777
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q + 1);

      /* "utils.pxd":6776
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):             # <<<<<<<<<<<<<<
 *             q += 1
 *         out_ptr[i] = q + offset
*/
    }

    /* "utils.pxd":6778
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6780
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_ceil_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6732
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_ceil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6782
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_ceil_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_ceil_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6804
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6805
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_ceil(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6805, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6804
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":6806
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_ceil(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6807
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_ceil(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6807, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6806
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_ceil(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":6808
 *     if multiple == 1:
 *         return arr_div_ceil(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6809
 *         return arr_div_ceil(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_ceil_mul_division_by_zer};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 6809, __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(5, 6809, __pyx_L1_error)

    /* "utils.pxd":6808
 *     if multiple == 1:
 *         return arr_div_ceil(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":6810
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6811
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6810
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_ceil_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":6812
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6813
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6812
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6817
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6818
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6819
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6824
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":6825
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6827
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6828
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6827
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6831
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6832
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):             # <<<<<<<<<<<<<<
 *             q += 1
 *         out_ptr[i] = q * multiple + offset
*/
    __pyx_t_11 = (__pyx_v_r != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_11 = ((__pyx_v_v ^ __pyx_v_factor) >= 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":6833
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q + 1);

      /* "utils.pxd":6832
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) >= 0):             # <<<<<<<<<<<<<<
 *             q += 1
 *         out_ptr[i] = q * multiple + offset
*/
    }

    /* "utils.pxd":6834
 *         if r != 0 and ((v ^ factor) >= 0):
 *             q += 1
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6836
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_floor(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6782
 *     return out
 * 
 * cdef inline np.ndarray arr_div_ceil_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and ceils up to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_ceil_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6838
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_floor(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_floor *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_floor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6858
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6859
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_floor_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6859, __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(5, 6859, __pyx_L1_error)

    /* "utils.pxd":6858
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6860
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6861
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6861, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6860
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6862
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6863
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6863, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6862
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6867
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6867, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6868
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6869
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6874
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":6875
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6877
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6878
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6877
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6881
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6882
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    __pyx_t_11 = (__pyx_v_r != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_11 = ((__pyx_v_v ^ __pyx_v_factor) < 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":6883
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":6882
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    }

    /* "utils.pxd":6884
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6886
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_floor_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6838
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_floor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6888
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_floor_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_floor_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_floor_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6910
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":6911
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_floor(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6911, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6910
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":6912
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6913
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_floor(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6913, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6912
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":6914
 *     if multiple == 1:
 *         return arr_div_floor(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6915
 *         return arr_div_floor(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_floor_mul_division_by_ze};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 6915, __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(5, 6915, __pyx_L1_error)

    /* "utils.pxd":6914
 *     if multiple == 1:
 *         return arr_div_floor(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":6916
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6917
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6916
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_floor_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":6918
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6919
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6919, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6918
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6923
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6924
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6925
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6930
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":6931
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6933
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6934
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":6933
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6937
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor             # <<<<<<<<<<<<<<
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);
    __pyx_v_r = (__pyx_v_v % __pyx_v_factor);

    /* "utils.pxd":6938
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q * multiple + offset
*/
    __pyx_t_11 = (__pyx_v_r != 0);
    if (__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_11 = ((__pyx_v_v ^ __pyx_v_factor) < 0);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":6939
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":6938
 *         with cython.cdivision(True):
 *             q = v / factor; r = v % factor
 *         if r != 0 and ((v ^ factor) < 0):             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q * multiple + offset
*/
    }

    /* "utils.pxd":6940
 *         if r != 0 and ((v ^ factor) < 0):
 *             q -= 1
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":6942
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_trunc(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6888
 *     return out
 * 
 * cdef inline np.ndarray arr_div_floor_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and floors down to the nearest integers,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_floor_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6944
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and and truncate toward zero `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_trunc(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_neg __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_trunc", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":6961
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":6962
 *     # Validate / Fast-path
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
*/
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_arr_div_trunc_division_by_zero};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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(5, 6962, __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(5, 6962, __pyx_L1_error)

    /* "utils.pxd":6961
 *     """
 *     # Validate / Fast-path
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
*/
  }

  /* "utils.pxd":6963
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":6964
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6963
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
*/
  }

  /* "utils.pxd":6965
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":6966
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset
 *         return arr_neg(arr, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_neg(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":6965
 *     if factor == 1:  # factor == 1  q = v (no rounding) + offset
 *         return arr_add(arr, offset, copy)
 *     if factor == -1:  # factor == -1  q = -v (exact) + offset             # <<<<<<<<<<<<<<
 *         return arr_neg(arr, offset, copy)
 * 
*/
  }

  /* "utils.pxd":6970
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 6970, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":6971
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":6972
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":6977
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":6978
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":6980
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":6981
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":6980
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":6984
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);

    /* "utils.pxd":6985
 *         with cython.cdivision(True):
 *             q = v / factor
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":6987
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_div_trunc_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6944
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc(np.ndarray arr, np.npy_int64 factor, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and and truncate toward zero `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.arr_div_trunc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":6989
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and truncate toward zero,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_div_trunc_mul(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_factor, npy_int64 __pyx_v_multiple, struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc_mul *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_trunc __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  size_t __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_div_trunc_mul", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":7008
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  __pyx_t_1 = (__pyx_v_multiple == 0);
  if (__pyx_t_1) {

    /* "utils.pxd":7009
 *     # Validate / Fast-path
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)             # <<<<<<<<<<<<<<
 *     if multiple == 1:
 *         return arr_div_trunc(arr, factor, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":7008
 *     """
 *     # Validate / Fast-path
 *     if multiple == 0:             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
*/
  }

  /* "utils.pxd":7010
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_trunc(arr, factor, offset, copy)
 *     if factor == 0:
*/
  __pyx_t_1 = (__pyx_v_multiple == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":7011
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:
 *         return arr_div_trunc(arr, factor, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_trunc(__pyx_v_arr, __pyx_v_factor, &__pyx_t_4)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7011, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":7010
 *     if multiple == 0:
 *         return arr_mul(arr, 0, offset, copy)
 *     if multiple == 1:             # <<<<<<<<<<<<<<
 *         return arr_div_trunc(arr, factor, offset, copy)
 *     if factor == 0:
*/
  }

  /* "utils.pxd":7012
 *     if multiple == 1:
 *         return arr_div_trunc(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 0);
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7013
 *         return arr_div_trunc(arr, factor, offset, copy)
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")             # <<<<<<<<<<<<<<
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
*/
    __pyx_t_5 = NULL;
    __pyx_t_6 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_arr_div_trunc_mul_division_by_ze};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ZeroDivisionError)), __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_2)) __PYX_ERR(5, 7013, __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(5, 7013, __pyx_L1_error)

    /* "utils.pxd":7012
 *     if multiple == 1:
 *         return arr_div_trunc(arr, factor, offset, copy)
 *     if factor == 0:             # <<<<<<<<<<<<<<
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
*/
  }

  /* "utils.pxd":7014
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  __pyx_t_1 = (__pyx_v_factor == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":7015
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)             # <<<<<<<<<<<<<<
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_multiple, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7015, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":7014
 *     if factor == 0:
 *         raise ZeroDivisionError("arr_div_trunc_mul: division by zero.")
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
*/
  }

  /* "utils.pxd":7016
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  __pyx_t_1 = (__pyx_v_factor == -1LL);
  if (__pyx_t_1) {

    /* "utils.pxd":7017
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset
 *         return arr_mul(arr, -multiple, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.offset = __pyx_v_offset;
    __pyx_t_3.copy = __pyx_v_copy;
    __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (-__pyx_v_multiple), &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7017, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyArrayObject *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "utils.pxd":7016
 *     if factor == 1:  # factor == 1  q = v (no rounding) * multiple + offset
 *         return arr_mul(arr, multiple, offset, copy)
 *     if factor == -1:  # factor == -1  q = v (exact) * -multiple + offset             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, -multiple, offset, copy)
 * 
*/
  }

  /* "utils.pxd":7021
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7022
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7023
 *         np.ndarray out = arr_assure_int64_like(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":7028
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":7029
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7031
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7032
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Divide value
 *         with cython.cdivision(True):
*/
      goto __pyx_L8_continue;

      /* "utils.pxd":7031
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Divide value
*/
    }

    /* "utils.pxd":7035
 *         # Divide value
 *         with cython.cdivision(True):
 *             q = v / factor             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q * multiple + offset
 * 
*/
    __pyx_v_q = (__pyx_v_v / __pyx_v_factor);

    /* "utils.pxd":7036
 *         with cython.cdivision(True):
 *             q = v / factor
 *         out_ptr[i] = q * multiple + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_q * __pyx_v_multiple) + __pyx_v_offset);
    __pyx_L8_continue:;
  }

  /* "utils.pxd":7038
 *         out_ptr[i] = q * multiple + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_add_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":6989
 *     return out
 * 
 * cdef inline np.ndarray arr_div_trunc_mul(np.ndarray arr, np.npy_int64 factor, np.npy_int64 multiple, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Divide a 1-D array by `factor` and truncate toward zero,
 *     then scale by `multiple` <'ndarray[int64]'>.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.utils.arr_div_trunc_mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7040
 *     return out
 * 
 * cdef inline np.ndarray arr_add_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise addition of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_add_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2, struct __pyx_opt_args_7cytimes_5utils_arr_add_arr *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_intp __pyx_v_size;
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_add_arr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":7061
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7062
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform addition on ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7063
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot perform addition on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7066
 *             "Cannot perform addition on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_perform_addition_on_ndarr;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7064
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot perform addition on ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 77 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7063, __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(5, 7063, __pyx_L1_error)

    /* "utils.pxd":7062
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform addition on ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7071
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)             # <<<<<<<<<<<<<<
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7072
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7073
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7074
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v1, v2
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7079
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         v1 = out_ptr[i]
*/
  __pyx_t_10 = __pyx_v_size;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;

    /* "utils.pxd":7081
 *     for i in range(size):
 *         # Propagate NaT
 *         v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             continue
*/
    __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7082
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7083
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7082
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    }

    /* "utils.pxd":7084
 *         if v1 == LLONG_MIN:
 *             continue
 *         v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
*/
    __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7085
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7086
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *             continue
 *         # Add values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

      /* "utils.pxd":7087
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
 *             continue             # <<<<<<<<<<<<<<
 *         # Add values
 *         out_ptr[i] = v1 + v2 + offset
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7085
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    }

    /* "utils.pxd":7089
 *             continue
 *         # Add values
 *         out_ptr[i] = v1 + v2 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_v1 + __pyx_v_v2) + __pyx_v_offset);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7091
 *         out_ptr[i] = v1 + v2 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_sub_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7040
 *     return out
 * 
 * cdef inline np.ndarray arr_add_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise addition of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_add_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7093
 *     return out
 * 
 * cdef inline np.ndarray arr_sub_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise subtraction of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_sub_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2, struct __pyx_opt_args_7cytimes_5utils_arr_sub_arr *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_intp __pyx_v_size;
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_sub_arr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":7114
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7115
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform subtraction on ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7116
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot perform subtraction on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7119
 *             "Cannot perform subtraction on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7119, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_perform_subtraction_on_nd;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7117
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot perform subtraction on ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 80 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7117, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7116, __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(5, 7116, __pyx_L1_error)

    /* "utils.pxd":7115
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform subtraction on ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7124
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)             # <<<<<<<<<<<<<<
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7124, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7125
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7126
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7127
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v1, v2
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7132
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         v1 = out_ptr[i]
*/
  __pyx_t_10 = __pyx_v_size;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;

    /* "utils.pxd":7134
 *     for i in range(size):
 *         # Propagate NaT
 *         v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             continue
*/
    __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7135
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7136
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7135
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    }

    /* "utils.pxd":7137
 *         if v1 == LLONG_MIN:
 *             continue
 *         v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
*/
    __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7138
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7139
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *             continue
 *         # Subtract values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

      /* "utils.pxd":7140
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
 *             continue             # <<<<<<<<<<<<<<
 *         # Subtract values
 *         out_ptr[i] = v1 - v2 + offset
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7138
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    }

    /* "utils.pxd":7142
 *             continue
 *         # Subtract values
 *         out_ptr[i] = v1 - v2 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_v1 - __pyx_v_v2) + __pyx_v_offset);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7144
 *         out_ptr[i] = v1 - v2 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_mul_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7093
 *     return out
 * 
 * cdef inline np.ndarray arr_sub_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise subtraction of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_sub_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7146
 *     return out
 * 
 * cdef inline np.ndarray arr_mul_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise multiplication of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_mul_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2, struct __pyx_opt_args_7cytimes_5utils_arr_mul_arr *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_intp __pyx_v_size;
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_v_arr = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_mul_arr", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":7167
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7168
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform multiplication on ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7169
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot perform multiplication on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7172
 *             "Cannot perform multiplication on ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_perform_multiplication_on;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7170
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot perform multiplication on ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 83 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7170, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7169, __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(5, 7169, __pyx_L1_error)

    /* "utils.pxd":7168
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot perform multiplication on ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7177
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)             # <<<<<<<<<<<<<<
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = __pyx_v_copy;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7178
 *     cdef:
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7178, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_arr = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7179
 *         np.ndarray out = arr_assure_int64_like(arr1, copy)
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7180
 *         np.ndarray arr = arr_assure_int64_like(arr2, False)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v1, v2
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7185
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         v1 = out_ptr[i]
*/
  __pyx_t_10 = __pyx_v_size;
  __pyx_t_11 = __pyx_t_10;
  for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
    __pyx_v_i = __pyx_t_12;

    /* "utils.pxd":7187
 *     for i in range(size):
 *         # Propagate NaT
 *         v1 = out_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             continue
*/
    __pyx_v_v1 = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7188
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7189
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7188
 *         # Propagate NaT
 *         v1 = out_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr_ptr[i]
*/
    }

    /* "utils.pxd":7190
 *         if v1 == LLONG_MIN:
 *             continue
 *         v2 = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
*/
    __pyx_v_v2 = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7191
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7192
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2             # <<<<<<<<<<<<<<
 *             continue
 *         # Multiply values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_v2;

      /* "utils.pxd":7193
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = v2
 *             continue             # <<<<<<<<<<<<<<
 *         # Multiply values
 *         out_ptr[i] = v1 * v2 + offset
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7191
 *             continue
 *         v2 = arr_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = v2
 *             continue
*/
    }

    /* "utils.pxd":7195
 *             continue
 *         # Multiply values
 *         out_ptr[i] = v1 * v2 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_v1 * __pyx_v_v2) + __pyx_v_offset);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7197
 *         out_ptr[i] = v1 * v2 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * # . comparison
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7146
 *     return out
 * 
 * cdef inline np.ndarray arr_mul_arr(np.ndarray arr1, np.ndarray arr2, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise multiplication of two 1-D arrays <'ndarray[int64]'>.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_mul_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7200
 * 
 * # . comparison
 * cdef inline np.ndarray arr_eq(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_eq(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value) {
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3[1];
  int __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_eq", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7217
 *     """
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":7220
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7221
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7224
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7224, __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_5numpy_ndarray))))) __PYX_ERR(5, 7224, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7225
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7229
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  __pyx_t_4 = (__pyx_v_value == LLONG_MIN);
  if (__pyx_t_4) {

    /* "utils.pxd":7230
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *         return out
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":7231
 *     if value == LLONG_MIN:
 *         for i in range(size):
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;
    }

    /* "utils.pxd":7232
 *         for i in range(size):
 *             out_ptr[i] = False
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compare
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":7229
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  }

  /* "utils.pxd":7235
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v = arr_ptr[i]
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":7237
 *     for i in range(size):
 *         # Preserve NaT
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7238
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_4 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_4) {

      /* "utils.pxd":7239
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare value
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7240
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare value
 *         out_ptr[i] = v == value
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":7238
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7242
 *             continue
 *         # Compare value
 *         out_ptr[i] = v == value             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v == __pyx_v_value);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":7243
 *         # Compare value
 *         out_ptr[i] = v == value
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_gt(np.ndarray arr, np.npy_int64 value):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7200
 * 
 * # . comparison
 * cdef inline np.ndarray arr_eq(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_eq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7245
 *     return out
 * 
 * cdef inline np.ndarray arr_gt(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_gt(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value) {
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3[1];
  int __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_gt", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7262
 *     """
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":7265
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7266
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7269
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7269, __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_5numpy_ndarray))))) __PYX_ERR(5, 7269, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7270
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7274
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  __pyx_t_4 = (__pyx_v_value == LLONG_MIN);
  if (__pyx_t_4) {

    /* "utils.pxd":7275
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *         return out
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":7276
 *     if value == LLONG_MIN:
 *         for i in range(size):
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;
    }

    /* "utils.pxd":7277
 *         for i in range(size):
 *             out_ptr[i] = False
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compare
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":7274
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  }

  /* "utils.pxd":7280
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v = arr_ptr[i]
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":7282
 *     for i in range(size):
 *         # Preserve NaT
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7283
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_4 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_4) {

      /* "utils.pxd":7284
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare value
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7285
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare value
 *         out_ptr[i] = v > value
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":7283
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7287
 *             continue
 *         # Compare value
 *         out_ptr[i] = v > value             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v > __pyx_v_value);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":7288
 *         # Compare value
 *         out_ptr[i] = v > value
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_ge(np.ndarray arr, np.npy_int64 value):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7245
 *     return out
 * 
 * cdef inline np.ndarray arr_gt(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_gt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7290
 *     return out
 * 
 * cdef inline np.ndarray arr_ge(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than-or-equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_ge(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value) {
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3[1];
  int __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_ge", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7307
 *     """
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":7310
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7311
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7314
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7314, __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_5numpy_ndarray))))) __PYX_ERR(5, 7314, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7315
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7319
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  __pyx_t_4 = (__pyx_v_value == LLONG_MIN);
  if (__pyx_t_4) {

    /* "utils.pxd":7320
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *         return out
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":7321
 *     if value == LLONG_MIN:
 *         for i in range(size):
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;
    }

    /* "utils.pxd":7322
 *         for i in range(size):
 *             out_ptr[i] = False
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compare
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":7319
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  }

  /* "utils.pxd":7325
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v = arr_ptr[i]
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":7327
 *     for i in range(size):
 *         # Preserve NaT
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7328
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_4 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_4) {

      /* "utils.pxd":7329
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare value
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7330
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare value
 *         out_ptr[i] = v >= value
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":7328
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7332
 *             continue
 *         # Compare value
 *         out_ptr[i] = v >= value             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v >= __pyx_v_value);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":7333
 *         # Compare value
 *         out_ptr[i] = v >= value
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_lt(np.ndarray arr, np.npy_int64 value):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7290
 *     return out
 * 
 * cdef inline np.ndarray arr_ge(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than-or-equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_ge", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7335
 *     return out
 * 
 * cdef inline np.ndarray arr_lt(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise less-than comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_lt(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value) {
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3[1];
  int __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_lt", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7352
 *     """
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7352, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":7355
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7356
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7359
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7359, __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_5numpy_ndarray))))) __PYX_ERR(5, 7359, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7360
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7364
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  __pyx_t_4 = (__pyx_v_value == LLONG_MIN);
  if (__pyx_t_4) {

    /* "utils.pxd":7365
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *         return out
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":7366
 *     if value == LLONG_MIN:
 *         for i in range(size):
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;
    }

    /* "utils.pxd":7367
 *         for i in range(size):
 *             out_ptr[i] = False
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compare
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":7364
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  }

  /* "utils.pxd":7370
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v = arr_ptr[i]
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":7372
 *     for i in range(size):
 *         # Preserve NaT
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7373
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_4 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_4) {

      /* "utils.pxd":7374
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare value
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7375
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare value
 *         out_ptr[i] = v < value
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":7373
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7377
 *             continue
 *         # Compare value
 *         out_ptr[i] = v < value             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v < __pyx_v_value);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":7378
 *         # Compare value
 *         out_ptr[i] = v < value
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_le(np.ndarray arr, np.npy_int64 value):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7335
 *     return out
 * 
 * cdef inline np.ndarray arr_lt(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise less-than comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_lt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7380
 *     return out
 * 
 * cdef inline np.ndarray arr_le(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise less-than-or-equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_le(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_value) {
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_2;
  npy_intp __pyx_t_3[1];
  int __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_le", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7397
 *     """
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7397, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":7400
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7401
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7404
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7404, __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_5numpy_ndarray))))) __PYX_ERR(5, 7404, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7405
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7409
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  __pyx_t_4 = (__pyx_v_value == LLONG_MIN);
  if (__pyx_t_4) {

    /* "utils.pxd":7410
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *         return out
*/
    __pyx_t_5 = __pyx_v_size;
    __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;

      /* "utils.pxd":7411
 *     if value == LLONG_MIN:
 *         for i in range(size):
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *         return out
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;
    }

    /* "utils.pxd":7412
 *         for i in range(size):
 *             out_ptr[i] = False
 *         return out             # <<<<<<<<<<<<<<
 * 
 *     # Compare
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __Pyx_INCREF((PyObject *)__pyx_v_out);
    __pyx_r = __pyx_v_out;
    goto __pyx_L0;

    /* "utils.pxd":7409
 * 
 *     # Fast-path: value is NaT
 *     if value == LLONG_MIN:             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             out_ptr[i] = False
*/
  }

  /* "utils.pxd":7415
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v = arr_ptr[i]
*/
  __pyx_t_5 = __pyx_v_size;
  __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;

    /* "utils.pxd":7417
 *     for i in range(size):
 *         # Preserve NaT
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7418
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_4 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_4) {

      /* "utils.pxd":7419
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare value
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7420
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare value
 *         out_ptr[i] = v <= value
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":7418
 *         # Preserve NaT
 *         v = arr_ptr[i]
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7422
 *             continue
 *         # Compare value
 *         out_ptr[i] = v <= value             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v <= __pyx_v_value);
    __pyx_L6_continue:;
  }

  /* "utils.pxd":7423
 *         # Compare value
 *         out_ptr[i] = v <= value
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_eq_arr(np.ndarray arr1, np.ndarray arr2):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7380
 *     return out
 * 
 * cdef inline np.ndarray arr_le(np.ndarray arr, np.npy_int64 value):             # <<<<<<<<<<<<<<
 *     """Elementwise less-than-or-equal comparison of a 1-D array to a scalar 'value' `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.arr_le", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7425
 *     return out
 * 
 * cdef inline np.ndarray arr_eq_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise equal comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_eq_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2) {
  npy_intp __pyx_v_size;
  npy_int64 *__pyx_v_arr1_ptr;
  npy_int64 *__pyx_v_arr2_ptr;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10[1];
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  npy_intp __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_eq_arr", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr1);
  __Pyx_INCREF((PyObject *)__pyx_v_arr2);

  /* "utils.pxd":7441
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7442
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7443
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7446
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7446, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_ndarrays_with_dif;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7444
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 65 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7443, __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(5, 7443, __pyx_L1_error)

    /* "utils.pxd":7442
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7450
 * 
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)             # <<<<<<<<<<<<<<
 *     arr2 = arr_assure_int64_like(arr2, False)
 *     cdef:
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7450, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr1, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7451
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)
 *     arr2 = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target arrays
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7451, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr2, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7454
 *     cdef:
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)
 *         np.npy_intp i
*/
  __pyx_v_arr1_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr1));

  /* "utils.pxd":7455
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_arr2_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr2));

  /* "utils.pxd":7458
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v1, v2
*/
  __pyx_t_10[0] = __pyx_v_size;
  __pyx_t_2 = PyArray_EMPTY(1, __pyx_t_10, NPY_BOOL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 7458, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7459
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v1, v2
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7463
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
*/
  __pyx_t_11 = __pyx_v_size;
  __pyx_t_12 = __pyx_t_11;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_i = __pyx_t_13;

    /* "utils.pxd":7465
 *     for i in range(size):
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v1 = (__pyx_v_arr1_ptr[__pyx_v_i]);

    /* "utils.pxd":7466
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7467
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr2_ptr[i]
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7468
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7466
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7469
 *             out_ptr[i] = False
 *             continue
 *         v2 = arr2_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v2 = (__pyx_v_arr2_ptr[__pyx_v_i]);

    /* "utils.pxd":7470
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7471
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7472
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare values
 *         out_ptr[i] = v1 == v2
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7470
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7474
 *             continue
 *         # Compare values
 *         out_ptr[i] = v1 == v2             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v1 == __pyx_v_v2);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7475
 *         # Compare values
 *         out_ptr[i] = v1 == v2
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_gt_arr(np.ndarray arr1, np.ndarray arr2):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7425
 *     return out
 * 
 * cdef inline np.ndarray arr_eq_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise equal comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_eq_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr1);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr2);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7477
 *     return out
 * 
 * cdef inline np.ndarray arr_gt_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_gt_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2) {
  npy_intp __pyx_v_size;
  npy_int64 *__pyx_v_arr1_ptr;
  npy_int64 *__pyx_v_arr2_ptr;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10[1];
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  npy_intp __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_gt_arr", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr1);
  __Pyx_INCREF((PyObject *)__pyx_v_arr2);

  /* "utils.pxd":7493
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7494
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7495
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7498
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7498, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_ndarrays_with_dif;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7496
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 65 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7495, __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(5, 7495, __pyx_L1_error)

    /* "utils.pxd":7494
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7502
 * 
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)             # <<<<<<<<<<<<<<
 *     arr2 = arr_assure_int64_like(arr2, False)
 *     cdef:
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr1, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7503
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)
 *     arr2 = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target arrays
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7503, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr2, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7506
 *     cdef:
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)
 *         np.npy_intp i
*/
  __pyx_v_arr1_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr1));

  /* "utils.pxd":7507
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_arr2_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr2));

  /* "utils.pxd":7510
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v1, v2
*/
  __pyx_t_10[0] = __pyx_v_size;
  __pyx_t_2 = PyArray_EMPTY(1, __pyx_t_10, NPY_BOOL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 7510, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7511
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v1, v2
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7515
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
*/
  __pyx_t_11 = __pyx_v_size;
  __pyx_t_12 = __pyx_t_11;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_i = __pyx_t_13;

    /* "utils.pxd":7517
 *     for i in range(size):
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v1 = (__pyx_v_arr1_ptr[__pyx_v_i]);

    /* "utils.pxd":7518
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7519
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr2_ptr[i]
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7520
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7518
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7521
 *             out_ptr[i] = False
 *             continue
 *         v2 = arr2_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v2 = (__pyx_v_arr2_ptr[__pyx_v_i]);

    /* "utils.pxd":7522
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7523
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7524
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare values
 *         out_ptr[i] = v1 > v2
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7522
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7526
 *             continue
 *         # Compare values
 *         out_ptr[i] = v1 > v2             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v1 > __pyx_v_v2);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7527
 *         # Compare values
 *         out_ptr[i] = v1 > v2
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray arr_ge_arr(np.ndarray arr1, np.ndarray arr2):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7477
 *     return out
 * 
 * cdef inline np.ndarray arr_gt_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_gt_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr1);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr2);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7529
 *     return out
 * 
 * cdef inline np.ndarray arr_ge_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than-or-equal comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_arr_ge_arr(PyArrayObject *__pyx_v_arr1, PyArrayObject *__pyx_v_arr2) {
  npy_intp __pyx_v_size;
  npy_int64 *__pyx_v_arr1_ptr;
  npy_int64 *__pyx_v_arr2_ptr;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v1;
  npy_int64 __pyx_v_v2;
  PyArrayObject *__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[4];
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_9;
  npy_intp __pyx_t_10[1];
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  npy_intp __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("arr_ge_arr", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_arr1);
  __Pyx_INCREF((PyObject *)__pyx_v_arr2);

  /* "utils.pxd":7545
 *     """
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]             # <<<<<<<<<<<<<<
 *     if size != arr2.shape[0]:
 *         raise ValueError(
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr1)[0]);

  /* "utils.pxd":7546
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  __pyx_t_1 = (__pyx_v_size != (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]));
  if (unlikely(__pyx_t_1)) {

    /* "utils.pxd":7547
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
*/
    __pyx_t_3 = NULL;

    /* "utils.pxd":7550
 *             "Cannot compare ndarrays with different lengths.\n"
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_npy_intp(__pyx_v_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 7550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_npy_intp((__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr2)[0]), 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_compare_ndarrays_with_dif;
    __pyx_t_6[1] = __pyx_t_4;
    __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_arr2_length;
    __pyx_t_6[3] = __pyx_t_5;

    /* "utils.pxd":7548
 *     if size != arr2.shape[0]:
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"             # <<<<<<<<<<<<<<
 *             "  - arr1 length: %d\n"
 *             "  - arr2 length: %d" % (size, arr2.shape[0])
*/
    __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 4, 65 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 18 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7548, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_t_7};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7547, __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(5, 7547, __pyx_L1_error)

    /* "utils.pxd":7546
 *     # Validate
 *     cdef np.npy_intp size = arr1.shape[0]
 *     if size != arr2.shape[0]:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot compare ndarrays with different lengths.\n"
*/
  }

  /* "utils.pxd":7554
 * 
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)             # <<<<<<<<<<<<<<
 *     arr2 = arr_assure_int64_like(arr2, False)
 *     cdef:
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr1, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr1, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7555
 *     # Setup
 *     arr1 = arr_assure_int64_like(arr1, False)
 *     arr2 = arr_assure_int64_like(arr2, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target arrays
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.copy = 0;
  __pyx_t_2 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr2, &__pyx_t_9)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7555, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF_SET(__pyx_v_arr2, ((PyArrayObject *)__pyx_t_2));
  __pyx_t_2 = 0;

  /* "utils.pxd":7558
 *     cdef:
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)             # <<<<<<<<<<<<<<
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)
 *         np.npy_intp i
*/
  __pyx_v_arr1_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr1));

  /* "utils.pxd":7559
 *         # Target arrays
 *         np.npy_int64* arr1_ptr = <np.npy_int64*> np.PyArray_DATA(arr1)
 *         np.npy_int64* arr2_ptr = <np.npy_int64*> np.PyArray_DATA(arr2)             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_arr2_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr2));

  /* "utils.pxd":7562
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v1, v2
*/
  __pyx_t_10[0] = __pyx_v_size;
  __pyx_t_2 = PyArray_EMPTY(1, __pyx_t_10, NPY_BOOL, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 7562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 7562, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":7563
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v1, v2
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7567
 * 
 *     # Compare
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
*/
  __pyx_t_11 = __pyx_v_size;
  __pyx_t_12 = __pyx_t_11;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_i = __pyx_t_13;

    /* "utils.pxd":7569
 *     for i in range(size):
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]             # <<<<<<<<<<<<<<
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v1 = (__pyx_v_arr1_ptr[__pyx_v_i]);

    /* "utils.pxd":7570
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v1 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7571
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         v2 = arr2_ptr[i]
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7572
 *         if v1 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7570
 *         # Preserve NaT
 *         v1 = arr1_ptr[i]
 *         if v1 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7573
 *             out_ptr[i] = False
 *             continue
 *         v2 = arr2_ptr[i]             # <<<<<<<<<<<<<<
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
*/
    __pyx_v_v2 = (__pyx_v_arr2_ptr[__pyx_v_i]);

    /* "utils.pxd":7574
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_1 = (__pyx_v_v2 == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":7575
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Compare values
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":7576
 *         if v2 == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Compare values
 *         out_ptr[i] = v1 >= v2
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":7574
 *             continue
 *         v2 = arr2_ptr[i]
 *         if v2 == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":7578
 *             continue
 *         # Compare values
 *         out_ptr[i] = v1 >= v2             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_v1 >= __pyx_v_v2);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":7579
 *         # Compare values
 *         out_ptr[i] = v1 >= v2
 *     return out             # <<<<<<<<<<<<<<
 * 
 * # NumPy: ndarray[datetime64] ---------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7529
 *     return out
 * 
 * cdef inline np.ndarray arr_ge_arr(np.ndarray arr1, np.ndarray arr2):             # <<<<<<<<<<<<<<
 *     """Elementwise greater-than-or-equal comparison of two 1-D arrays `<'ndarray[bool]'>`.
 * 
*/

  /* 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_7);
  __Pyx_AddTraceback("cytimes.utils.arr_ge_arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr1);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr2);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7583
 * # NumPy: ndarray[datetime64] ---------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_dt64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if the array is dtype of 'datetime64[*]' `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64arr(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;

  /* "utils.pxd":7589
 *     >>> isinstance(arr.dtype, np.dtypes.DateTime64DType)
 *     """
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint assure_dt64arr(np.ndarray arr) except -1:
*/
  __pyx_r = (PyArray_TYPE(__pyx_v_arr) == NPY_DATETIME);
  goto __pyx_L0;

  /* "utils.pxd":7583
 * # NumPy: ndarray[datetime64] ---------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_dt64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if the array is dtype of 'datetime64[*]' `<'bool'>`.
 * 
*/

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

/* "utils.pxd":7591
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 * 
 * cdef inline bint assure_dt64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is dtype of 'datetime64[*]'"""
 *     if not is_dt64arr(arr):
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_dt64arr(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __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;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assure_dt64arr", 0);

  /* "utils.pxd":7593
 * cdef inline bint assure_dt64arr(np.ndarray arr) except -1:
 *     """Assure the array is dtype of 'datetime64[*]'"""
 *     if not is_dt64arr(arr):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.ndarray[datetime64[*]]', "
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 7593, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {

    /* "utils.pxd":7594
 *     """Assure the array is dtype of 'datetime64[*]'"""
 *     if not is_dt64arr(arr):
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Expects an instance of 'np.ndarray[datetime64[*]]', "
 *             "instead got 'np.ndarray[%s]'." % arr.dtype
*/
    __pyx_t_4 = NULL;

    /* "utils.pxd":7596
 *         raise TypeError(
 *             "Expects an instance of 'np.ndarray[datetime64[*]]', "
 *             "instead got 'np.ndarray[%s]'." % arr.dtype             # <<<<<<<<<<<<<<
 *         )
 *     return True
*/
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_np_ndarra, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 7596, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 7594, __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(5, 7594, __pyx_L1_error)

    /* "utils.pxd":7593
 * cdef inline bint assure_dt64arr(np.ndarray arr) except -1:
 *     """Assure the array is dtype of 'datetime64[*]'"""
 *     if not is_dt64arr(arr):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects an instance of 'np.ndarray[datetime64[*]]', "
*/
  }

  /* "utils.pxd":7598
 *             "instead got 'np.ndarray[%s]'." % arr.dtype
 *         )
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . range check
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":7591
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 * 
 * cdef inline bint assure_dt64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is dtype of 'datetime64[*]'"""
 *     if not is_dt64arr(arr):
*/

  /* 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_AddTraceback("cytimes.utils.assure_dt64arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7601
 * 
 * # . range check
 * cdef inline bint is_dt64arr_ns_safe(np.ndarray arr, int arr_reso=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a 1-D array can be safely represented as datetime64[ns] `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_minimum;
  npy_int64 __pyx_v_maximum;
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PY_LONG_LONG __pyx_t_3;
  PY_LONG_LONG __pyx_t_4;
  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;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64_like __pyx_t_10;
  npy_intp __pyx_t_11;
  npy_intp __pyx_t_12;
  npy_intp __pyx_t_13;
  int __pyx_t_14;
  int __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_dt64arr_ns_safe", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":7620
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":7621
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":7622
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 7622, __pyx_L1_error)

      /* "utils.pxd":7621
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":7623
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Get min & max range
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 7623, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":7620
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":7627
 *     # Get min & max range
 *     cdef np.npy_int64 minimum, maximum
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_NS_MIN, DT64_NS_NS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  switch (__pyx_v_arr_reso) {
    case NPY_FR_ns:

    /* "utils.pxd":7628
 *     cdef np.npy_int64 minimum, maximum
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         minimum, maximum = DT64_NS_NS_MIN, DT64_NS_NS_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         minimum, maximum = DT64_NS_US_MIN, DT64_NS_US_MAX
*/
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_NS_MIN;
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_NS_MAX;
    __pyx_v_minimum = __pyx_t_3;
    __pyx_v_maximum = __pyx_t_4;

    /* "utils.pxd":7627
 *     # Get min & max range
 *     cdef np.npy_int64 minimum, maximum
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_NS_MIN, DT64_NS_NS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
    break;
    case NPY_FR_us:

    /* "utils.pxd":7630
 *         minimum, maximum = DT64_NS_NS_MIN, DT64_NS_NS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         minimum, maximum = DT64_NS_US_MIN, DT64_NS_US_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         minimum, maximum = DT64_NS_MS_MIN, DT64_NS_MS_MAX
*/
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_US_MIN;
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_US_MAX;
    __pyx_v_minimum = __pyx_t_4;
    __pyx_v_maximum = __pyx_t_3;

    /* "utils.pxd":7629
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         minimum, maximum = DT64_NS_NS_MIN, DT64_NS_NS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_US_MIN, DT64_NS_US_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":7632
 *         minimum, maximum = DT64_NS_US_MIN, DT64_NS_US_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         minimum, maximum = DT64_NS_MS_MIN, DT64_NS_MS_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         minimum, maximum = DT64_NS_SS_MIN, DT64_NS_SS_MAX
*/
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_MS_MIN;
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_MS_MAX;
    __pyx_v_minimum = __pyx_t_3;
    __pyx_v_maximum = __pyx_t_4;

    /* "utils.pxd":7631
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         minimum, maximum = DT64_NS_US_MIN, DT64_NS_US_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_MS_MIN, DT64_NS_MS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":7634
 *         minimum, maximum = DT64_NS_MS_MIN, DT64_NS_MS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         minimum, maximum = DT64_NS_SS_MIN, DT64_NS_SS_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         minimum, maximum = DT64_NS_MI_MIN, DT64_NS_MI_MAX
*/
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_SS_MIN;
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_SS_MAX;
    __pyx_v_minimum = __pyx_t_4;
    __pyx_v_maximum = __pyx_t_3;

    /* "utils.pxd":7633
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         minimum, maximum = DT64_NS_MS_MIN, DT64_NS_MS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_SS_MIN, DT64_NS_SS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":7636
 *         minimum, maximum = DT64_NS_SS_MIN, DT64_NS_SS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         minimum, maximum = DT64_NS_MI_MIN, DT64_NS_MI_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         minimum, maximum = DT64_NS_HH_MIN, DT64_NS_HH_MAX
*/
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_MI_MIN;
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_MI_MAX;
    __pyx_v_minimum = __pyx_t_3;
    __pyx_v_maximum = __pyx_t_4;

    /* "utils.pxd":7635
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         minimum, maximum = DT64_NS_SS_MIN, DT64_NS_SS_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_MI_MIN, DT64_NS_MI_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":7638
 *         minimum, maximum = DT64_NS_MI_MIN, DT64_NS_MI_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         minimum, maximum = DT64_NS_HH_MIN, DT64_NS_HH_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         minimum, maximum = DT64_NS_DD_MIN, DT64_NS_DD_MAX
*/
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_HH_MIN;
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_HH_MAX;
    __pyx_v_minimum = __pyx_t_4;
    __pyx_v_maximum = __pyx_t_3;

    /* "utils.pxd":7637
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         minimum, maximum = DT64_NS_MI_MIN, DT64_NS_MI_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_HH_MIN, DT64_NS_HH_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":7640
 *         minimum, maximum = DT64_NS_HH_MIN, DT64_NS_HH_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         minimum, maximum = DT64_NS_DD_MIN, DT64_NS_DD_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         minimum, maximum = DT64_NS_WW_MIN, DT64_NS_WW_MAX
*/
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_DD_MIN;
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_DD_MAX;
    __pyx_v_minimum = __pyx_t_3;
    __pyx_v_maximum = __pyx_t_4;

    /* "utils.pxd":7639
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         minimum, maximum = DT64_NS_HH_MIN, DT64_NS_HH_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_DD_MIN, DT64_NS_DD_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
    break;
    case NPY_FR_W:

    /* "utils.pxd":7642
 *         minimum, maximum = DT64_NS_DD_MIN, DT64_NS_DD_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         minimum, maximum = DT64_NS_WW_MIN, DT64_NS_WW_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         minimum, maximum = DT64_NS_MM_MIN, DT64_NS_MM_MAX
*/
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_WW_MIN;
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_WW_MAX;
    __pyx_v_minimum = __pyx_t_4;
    __pyx_v_maximum = __pyx_t_3;

    /* "utils.pxd":7641
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         minimum, maximum = DT64_NS_DD_MIN, DT64_NS_DD_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_WW_MIN, DT64_NS_WW_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
    break;
    case NPY_FR_M:

    /* "utils.pxd":7644
 *         minimum, maximum = DT64_NS_WW_MIN, DT64_NS_WW_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         minimum, maximum = DT64_NS_MM_MIN, DT64_NS_MM_MAX             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         minimum, maximum = DT64_NS_YY_MIN, DT64_NS_YY_MAX
*/
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_MM_MIN;
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_MM_MAX;
    __pyx_v_minimum = __pyx_t_3;
    __pyx_v_maximum = __pyx_t_4;

    /* "utils.pxd":7643
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         minimum, maximum = DT64_NS_WW_MIN, DT64_NS_WW_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_MM_MIN, DT64_NS_MM_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
    break;
    case NPY_FR_Y:

    /* "utils.pxd":7646
 *         minimum, maximum = DT64_NS_MM_MIN, DT64_NS_MM_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         minimum, maximum = DT64_NS_YY_MIN, DT64_NS_YY_MAX             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError(
*/
    __pyx_t_4 = __pyx_v_7cytimes_5utils_DT64_NS_YY_MIN;
    __pyx_t_3 = __pyx_v_7cytimes_5utils_DT64_NS_YY_MAX;
    __pyx_v_minimum = __pyx_t_4;
    __pyx_v_maximum = __pyx_t_3;

    /* "utils.pxd":7645
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         minimum, maximum = DT64_NS_MM_MIN, DT64_NS_MM_MAX
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         minimum, maximum = DT64_NS_YY_MIN, DT64_NS_YY_MAX
 *     else:
*/
    break;
    default:

    /* "utils.pxd":7648
 *         minimum, maximum = DT64_NS_YY_MIN, DT64_NS_YY_MAX
 *     else:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Unsupported datetime resolution '%s'. "
 *             "Accepts: Y, M, W, D, h, m, s, ms, us, ns."
*/
    __pyx_t_6 = NULL;

    /* "utils.pxd":7651
 *             "Unsupported datetime resolution '%s'. "
 *             "Accepts: Y, M, W, D, h, m, s, ms, us, ns."
 *             % nptime_unit_int2str(arr_reso)             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_7 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_arr_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 7651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_datetime_resolution, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 7651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_8};
      __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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_8); __pyx_t_8 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(5, 7648, __pyx_L1_error)
    break;
  }

  /* "utils.pxd":7655
 * 
 *     # Setup
 *     arr = arr_assure_int64_like(arr, False)             # <<<<<<<<<<<<<<
 *     cdef:
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
*/
  __pyx_t_10.__pyx_n = 1;
  __pyx_t_10.copy = 0;
  __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64_like(__pyx_v_arr, &__pyx_t_10)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 7655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
  __pyx_t_5 = 0;

  /* "utils.pxd":7657
 *     arr = arr_assure_int64_like(arr, False)
 *     cdef:
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":7658
 *     cdef:
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":7663
 * 
 *     # Check
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = arr_ptr[i]
 *         if not minimum < v < maximum and v != LLONG_MIN:
*/
  __pyx_t_11 = __pyx_v_size;
  __pyx_t_12 = __pyx_t_11;
  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_12; __pyx_t_13+=1) {
    __pyx_v_i = __pyx_t_13;

    /* "utils.pxd":7664
 *     # Check
 *     for i in range(size):
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         if not minimum < v < maximum and v != LLONG_MIN:
 *             return False
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":7665
 *     for i in range(size):
 *         v = arr_ptr[i]
 *         if not minimum < v < maximum and v != LLONG_MIN:             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    __pyx_t_14 = (__pyx_v_minimum < __pyx_v_v);
    if (__pyx_t_14) {
      __pyx_t_14 = (__pyx_v_v < __pyx_v_maximum);
    }
    __pyx_t_15 = (!__pyx_t_14);
    if (__pyx_t_15) {
    } else {
      __pyx_t_1 = __pyx_t_15;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_v != LLONG_MIN);
    __pyx_t_1 = __pyx_t_15;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":7666
 *         v = arr_ptr[i]
 *         if not minimum < v < maximum and v != LLONG_MIN:
 *             return False             # <<<<<<<<<<<<<<
 *     return True
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "utils.pxd":7665
 *     for i in range(size):
 *         v = arr_ptr[i]
 *         if not minimum < v < maximum and v != LLONG_MIN:             # <<<<<<<<<<<<<<
 *             return False
 *     return True
*/
    }
  }

  /* "utils.pxd":7667
 *         if not minimum < v < maximum and v != LLONG_MIN:
 *             return False
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . access
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":7601
 * 
 * # . range check
 * cdef inline bint is_dt64arr_ns_safe(np.ndarray arr, int arr_reso=-1) except -1:             # <<<<<<<<<<<<<<
 *     """Check if a 1-D array can be safely represented as datetime64[ns] `<'bool'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cytimes.utils.is_dt64arr_ns_safe", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7670
 * 
 * # . access
 * cdef inline np.ndarray dt64arr_year(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract civil year numbers from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7690
 *     >>> arr.astype('datetime64[Y]').astype('int64') + 1970 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_add(out, EPOCH_YEAR + offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7690, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7691
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *     return arr_add(out, EPOCH_YEAR + offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_quarter(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 1;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_out, (__pyx_v_7cytimes_5utils_EPOCH_YEAR + __pyx_v_offset), &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7691, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7670
 * 
 * # . access
 * cdef inline np.ndarray dt64arr_year(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract civil year numbers from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7693
 *     return arr_add(out, EPOCH_YEAR + offset, False)
 * 
 * cdef inline np.ndarray dt64arr_quarter(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract quarter numbers (1..4) from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_quarter(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_quarter *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_quarter", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7715
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7716
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7717
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":7721
 *         np.npy_int64 v, r
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":7722
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7724
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to quarter
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":7725
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Convert to quarter
 *         with cython.cdivision(True):
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":7724
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to quarter
*/
    }

    /* "utils.pxd":7728
 *         # Convert to quarter
 *         with cython.cdivision(True):
 *             r = v % 12             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 r += 12
*/
    __pyx_v_r = (__pyx_v_v % 12);

    /* "utils.pxd":7729
 *         with cython.cdivision(True):
 *             r = v % 12
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 r += 12
 *             out_ptr[i] = (r / 3) + 1 + offset
*/
    __pyx_t_6 = (__pyx_v_r < 0);
    if (__pyx_t_6) {

      /* "utils.pxd":7730
 *             r = v % 12
 *             if r < 0:
 *                 r += 12             # <<<<<<<<<<<<<<
 *             out_ptr[i] = (r / 3) + 1 + offset
 * 
*/
      __pyx_v_r = (__pyx_v_r + 12);

      /* "utils.pxd":7729
 *         with cython.cdivision(True):
 *             r = v % 12
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 r += 12
 *             out_ptr[i] = (r / 3) + 1 + offset
*/
    }

    /* "utils.pxd":7731
 *             if r < 0:
 *                 r += 12
 *             out_ptr[i] = (r / 3) + 1 + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (((__pyx_v_r / 3) + 1) + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":7733
 *             out_ptr[i] = (r / 3) + 1 + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_month(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7693
 *     return arr_add(out, EPOCH_YEAR + offset, False)
 * 
 * cdef inline np.ndarray dt64arr_quarter(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract quarter numbers (1..4) from a 1-D ndarray[datetime64[*]] `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_quarter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7735
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_month(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract month numbers (1..12) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_month(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_month *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_month", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7755
 *     >>> arr.astype('datetime64[M]').astype('int64') % 12 + 1 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 12, offset + 1, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7755, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7756
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 12, offset + 1, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_weekday(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = (__pyx_v_offset + 1);
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 12, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7756, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7735
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_month(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract month numbers (1..12) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7758
 *     return arr_mod(out, 12, offset + 1, False)
 * 
 * cdef inline np.ndarray dt64arr_weekday(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract weekday numbers (0=Mon .. 6=Sun) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_weekday(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_weekday *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_weekday", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7780
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7781
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7782
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":7786
 *         np.npy_int64 v, r
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":7787
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7789
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to weekday (0=Monday, 6=Sunday)
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":7790
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Convert to weekday (0=Monday, 6=Sunday)
 *         with cython.cdivision(True):
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":7789
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to weekday (0=Monday, 6=Sunday)
*/
    }

    /* "utils.pxd":7793
 *         # Convert to weekday (0=Monday, 6=Sunday)
 *         with cython.cdivision(True):
 *             r = v % 7             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             r += 7
*/
    __pyx_v_r = (__pyx_v_v % 7);

    /* "utils.pxd":7794
 *         with cython.cdivision(True):
 *             r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += 7
 *         # Anchor to Thursday (3)
*/
    __pyx_t_6 = (__pyx_v_r < 0);
    if (__pyx_t_6) {

      /* "utils.pxd":7795
 *             r = v % 7
 *         if r < 0:
 *             r += 7             # <<<<<<<<<<<<<<
 *         # Anchor to Thursday (3)
 *         r += 3
*/
      __pyx_v_r = (__pyx_v_r + 7);

      /* "utils.pxd":7794
 *         with cython.cdivision(True):
 *             r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             r += 7
 *         # Anchor to Thursday (3)
*/
    }

    /* "utils.pxd":7797
 *             r += 7
 *         # Anchor to Thursday (3)
 *         r += 3             # <<<<<<<<<<<<<<
 *         if r >= 7:
 *             r -= 7
*/
    __pyx_v_r = (__pyx_v_r + 3);

    /* "utils.pxd":7798
 *         # Anchor to Thursday (3)
 *         r += 3
 *         if r >= 7:             # <<<<<<<<<<<<<<
 *             r -= 7
 *         out_ptr[i] = r + offset
*/
    __pyx_t_6 = (__pyx_v_r >= 7);
    if (__pyx_t_6) {

      /* "utils.pxd":7799
 *         r += 3
 *         if r >= 7:
 *             r -= 7             # <<<<<<<<<<<<<<
 *         out_ptr[i] = r + offset
 * 
*/
      __pyx_v_r = (__pyx_v_r - 7);

      /* "utils.pxd":7798
 *         # Anchor to Thursday (3)
 *         r += 3
 *         if r >= 7:             # <<<<<<<<<<<<<<
 *             r -= 7
 *         out_ptr[i] = r + offset
*/
    }

    /* "utils.pxd":7800
 *         if r >= 7:
 *             r -= 7
 *         out_ptr[i] = r + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_r + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":7802
 *         out_ptr[i] = r + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_day(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7758
 *     return arr_mod(out, 12, offset + 1, False)
 * 
 * cdef inline np.ndarray dt64arr_weekday(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract weekday numbers (0=Mon .. 6=Sun) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7804
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract day-of-month (1..31) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_day(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_day *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_n;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_n400;
  npy_int64 __pyx_v_n100;
  npy_int64 __pyx_v_n4;
  npy_int64 __pyx_v_n1;
  npy_int64 __pyx_v_yy;
  npy_int64 __pyx_v_mm;
  npy_int64 __pyx_v_days_bf;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_day", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7822
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7823
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":7824
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, n, r, n400, n100, n4, n1, yy, mm, days_bf
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":7828
 *         np.npy_int64 v, n, r, n400, n100, n4, n1, yy, mm, days_bf
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":7829
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":7831
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":7832
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 * 
 *         # Convert to 0-based offset from 0001-01-01
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":7831
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    }

    /* "utils.pxd":7835
 * 
 *         # Convert to 0-based offset from 0001-01-01
 *         n = v + EPOCH_DAY - 1             # <<<<<<<<<<<<<<
 * 
 *         with cython.cdivision(True):
*/
    __pyx_v_n = ((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY) - 1);

    /* "utils.pxd":7839
 *         with cython.cdivision(True):
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
*/
    __pyx_v_n400 = (__pyx_v_n / 0x23AB1);
    __pyx_v_r = (__pyx_v_n % 0x23AB1);

    /* "utils.pxd":7840
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    __pyx_t_6 = (__pyx_v_r < 0);
    if (__pyx_t_6) {

      /* "utils.pxd":7841
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:
 *                 n400 -= 1; r += 146_097             # <<<<<<<<<<<<<<
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
*/
      __pyx_v_n400 = (__pyx_v_n400 - 1);
      __pyx_v_r = (__pyx_v_r + 0x23AB1);

      /* "utils.pxd":7840
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    }

    /* "utils.pxd":7842
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
 *             n = r             # <<<<<<<<<<<<<<
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524
*/
    __pyx_v_n = __pyx_v_r;

    /* "utils.pxd":7844
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524             # <<<<<<<<<<<<<<
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461
*/
    __pyx_v_n100 = (__pyx_v_n / 0x8EAC);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x8EAC, 1);

    /* "utils.pxd":7846
 *             n100 = n / 36_524;  n %= 36_524
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461             # <<<<<<<<<<<<<<
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365
*/
    __pyx_v_n4 = (__pyx_v_n / 0x5B5);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x5B5, 1);

    /* "utils.pxd":7848
 *             n4   = n / 1_461;   n %= 1_461
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365             # <<<<<<<<<<<<<<
 * 
 *         # End-of-cycle dates map directly to December 31 (day=31)
*/
    __pyx_v_n1 = (__pyx_v_n / 0x16D);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x16D, 1);

    /* "utils.pxd":7851
 * 
 *         # End-of-cycle dates map directly to December 31 (day=31)
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             out_ptr[i] = 31 + offset
 *             continue
*/
    __pyx_t_7 = (__pyx_v_n100 == 4);
    if (!__pyx_t_7) {
    } else {
      __pyx_t_6 = __pyx_t_7;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_7 = (__pyx_v_n1 == 4);
    __pyx_t_6 = __pyx_t_7;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_6) {

      /* "utils.pxd":7852
 *         # End-of-cycle dates map directly to December 31 (day=31)
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             out_ptr[i] = 31 + offset             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = (31 + __pyx_v_offset);

      /* "utils.pxd":7853
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             out_ptr[i] = 31 + offset
 *             continue             # <<<<<<<<<<<<<<
 * 
 *         # Compute day of month (1..31)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":7851
 * 
 *         # End-of-cycle dates map directly to December 31 (day=31)
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             out_ptr[i] = 31 + offset
 *             continue
*/
    }

    /* "utils.pxd":7856
 * 
 *         # Compute day of month (1..31)
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1             # <<<<<<<<<<<<<<
 *         mm = (n + 50) >> 5  # initial 1..12 estimate
 *         days_bf = days_bf_month(yy, mm)
*/
    __pyx_v_yy = (((((__pyx_v_n400 * 0x190) + (__pyx_v_n100 * 0x64)) + (__pyx_v_n4 * 4)) + __pyx_v_n1) + 1);

    /* "utils.pxd":7857
 *         # Compute day of month (1..31)
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         mm = (n + 50) >> 5  # initial 1..12 estimate             # <<<<<<<<<<<<<<
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:
*/
    __pyx_v_mm = ((__pyx_v_n + 50) >> 5);

    /* "utils.pxd":7858
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         mm = (n + 50) >> 5  # initial 1..12 estimate
 *         days_bf = days_bf_month(yy, mm)             # <<<<<<<<<<<<<<
 *         if days_bf > n:
 *             days_bf = days_bf_month(yy, mm - 1)
*/
    __pyx_v_days_bf = __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm);

    /* "utils.pxd":7859
 *         mm = (n + 50) >> 5  # initial 1..12 estimate
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:             # <<<<<<<<<<<<<<
 *             days_bf = days_bf_month(yy, mm - 1)
 *         out_ptr[i] = (n - days_bf + 1) + offset
*/
    __pyx_t_6 = (__pyx_v_days_bf > __pyx_v_n);
    if (__pyx_t_6) {

      /* "utils.pxd":7860
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:
 *             days_bf = days_bf_month(yy, mm - 1)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = (n - days_bf + 1) + offset
 * 
*/
      __pyx_v_days_bf = __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, (__pyx_v_mm - 1));

      /* "utils.pxd":7859
 *         mm = (n + 50) >> 5  # initial 1..12 estimate
 *         days_bf = days_bf_month(yy, mm)
 *         if days_bf > n:             # <<<<<<<<<<<<<<
 *             days_bf = days_bf_month(yy, mm - 1)
 *         out_ptr[i] = (n - days_bf + 1) + offset
*/
    }

    /* "utils.pxd":7861
 *         if days_bf > n:
 *             days_bf = days_bf_month(yy, mm - 1)
 *         out_ptr[i] = (n - days_bf + 1) + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (((__pyx_v_n - __pyx_v_days_bf) + 1) + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":7863
 *         out_ptr[i] = (n - days_bf + 1) + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_hour(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7804
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract day-of-month (1..31) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_day", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7865
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_hour(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract hour-of-day (0..23) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_hour(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_hour *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_hour", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7885
 *     >>> arr.astype('datetime64[h]').astype('int64') % 24 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_h(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 24, offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_h(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7885, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7886
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_h(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 24, offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_minute(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = __pyx_v_offset;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 24, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7865
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_hour(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract hour-of-day (0..23) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_hour", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7888
 *     return arr_mod(out, 24, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_minute(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract minute-of-hour (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_minute(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_minute *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_minute", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7908
 *     >>> arr.astype('datetime64[m]').astype('int64') % 60 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_m(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 60, offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7909
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_m(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 60, offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_second(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = __pyx_v_offset;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 60, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7888
 *     return arr_mod(out, 24, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_minute(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract minute-of-hour (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_minute", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7911
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_second(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract second-of-minute (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_second(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_second *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_second", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7931
 *     >>> arr.astype('datetime64[s]').astype('int64') % 60 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_s(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 60, offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_s(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7931, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7932
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_s(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 60, offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_millisecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = __pyx_v_offset;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 60, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7932, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7911
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_second(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract second-of-minute (0..59) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_second", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7934
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_millisecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract millisecond-of-second (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_millisecond(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_millisecond *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_millisecond", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7954
 *     >>> arr.astype('datetime64[ms]').astype('int64') % 1000 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 1_000, offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ms(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7955
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 1_000, offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_microsecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = __pyx_v_offset;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 0x3E8, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7934
 *     return arr_mod(out, 60, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_millisecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract millisecond-of-second (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_millisecond", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7957
 *     return arr_mod(out, 1_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_microsecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract microsecond-of-second (0..999,999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_microsecond(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_microsecond *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_microsecond", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":7977
 *     >>> arr.astype('datetime64[us]').astype('int64') % 1_000_000 + offset
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_us(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     return arr_mod(out, 1_000_000, offset, False)
 * 
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7977, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":7978
 *     """
 *     cdef np.ndarray out = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *     return arr_mod(out, 1_000_000, offset, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_nanosecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3.__pyx_n = 2;
  __pyx_t_3.offset = __pyx_v_offset;
  __pyx_t_3.copy = 0;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 0xF4240, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 7978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":7957
 *     return arr_mod(out, 1_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_microsecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract microsecond-of-second (0..999,999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_microsecond", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":7980
 *     return arr_mod(out, 1_000_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_nanosecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract nanosecond-of-microsecond (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_nanosecond(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_nanosecond *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_6;
  npy_intp __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_nanosecond", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":8001
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":8002
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":8003
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8003, __pyx_L1_error)

      /* "utils.pxd":8002
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":8004
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Compute nanosecond
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 8004, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":8001
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":8008
 *     # Compute nanosecond
 *     cdef np.ndarray out
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         out = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
 *         return arr_mod(out, 1_000, offset, False)
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":8009
 *     cdef np.ndarray out
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         out = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         return arr_mod(out, 1_000, offset, False)
 * 
*/
    __pyx_t_4.__pyx_n = 3;
    __pyx_t_4.arr_reso = __pyx_v_arr_reso;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ns(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8009, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_out = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":8010
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         out = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
 *         return arr_mod(out, 1_000, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Return zero for coarser resolutions
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_out, 0x3E8, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8008
 *     # Compute nanosecond
 *     cdef np.ndarray out
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         out = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
 *         return arr_mod(out, 1_000, offset, False)
*/
  }

  /* "utils.pxd":8013
 * 
 *     # Return zero for coarser resolutions
 *     out = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     cdef:
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
*/
  __pyx_t_6.__pyx_n = 1;
  __pyx_t_6.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8013, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "utils.pxd":8015
 *     out = arr_assure_int64(arr, copy)
 *     cdef:
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i, v
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8016
 *     cdef:
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i, v
 *     for i in range(size):
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8018
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i, v
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if out_ptr[i] == LLONG_MIN:
*/
  __pyx_t_7 = __pyx_v_size;
  __pyx_t_8 = __pyx_t_7;
  for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
    __pyx_v_i = __pyx_t_9;

    /* "utils.pxd":8020
 *     for i in range(size):
 *         # Propagate NaT
 *         if out_ptr[i] == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         out_ptr[i] = offset
*/
    __pyx_t_1 = ((__pyx_v_out_ptr[__pyx_v_i]) == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":8021
 *         # Propagate NaT
 *         if out_ptr[i] == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         out_ptr[i] = offset
 *     return out
*/
      goto __pyx_L6_continue;

      /* "utils.pxd":8020
 *     for i in range(size):
 *         # Propagate NaT
 *         if out_ptr[i] == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         out_ptr[i] = offset
*/
    }

    /* "utils.pxd":8022
 *         if out_ptr[i] == LLONG_MIN:
 *             continue
 *         out_ptr[i] = offset             # <<<<<<<<<<<<<<
 *     return out
 * 
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_v_offset;
    __pyx_L6_continue:;
  }

  /* "utils.pxd":8023
 *             continue
 *         out_ptr[i] = offset
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_times(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":7980
 *     return arr_mod(out, 1_000_000, offset, False)
 * 
 * cdef inline np.ndarray dt64arr_nanosecond(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract nanosecond-of-microsecond (0..999) from a 1-D ndarray[datetime64[*]] <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_nanosecond", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8025
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_times(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract time-of-day (elapsed since midnight) in the same unit as `arr` <'ndarray[int64]'>.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_times(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_times *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_mod __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_times", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8043
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":8044
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":8045
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8045, __pyx_L1_error)

      /* "utils.pxd":8044
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":8046
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Compute times
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 8046, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":8043
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":8049
 * 
 *     # Compute times
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mod(arr, NS_DAY, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8049, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":8050
 *     # Compute times
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":8051
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mod(arr, NS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mod(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8051, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8050
 *     # Compute times
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":8052
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mod(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":8053
 *         return arr_mod(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mod(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mod(arr, MS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8053, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8052
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mod(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":8054
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mod(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":8055
 *         return arr_mod(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mod(arr, MS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mod(arr, SS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8055, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8054
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mod(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  }

  /* "utils.pxd":8056
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mod(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":8057
 *         return arr_mod(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mod(arr, SS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_mod(arr, 1440, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8057, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8056
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mod(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  }

  /* "utils.pxd":8058
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mod(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":8059
 *         return arr_mod(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_mod(arr, 1440, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_mod(arr, 24, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, 0x5A0, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8059, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8058
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mod(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  }

  /* "utils.pxd":8060
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_mod(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, 24, offset, False)
 *     if arr_reso in (
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":8061
 *         return arr_mod(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_mod(arr, 24, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso in (
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mod(__pyx_v_arr, 24, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8061, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8060
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_mod(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_mod(arr, 24, offset, False)
 *     if arr_reso in (
*/
  }

  /* "utils.pxd":8062
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_mod(arr, 24, offset, False)
 *     if arr_reso in (             # <<<<<<<<<<<<<<
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day
 *         np.NPY_DATETIMEUNIT.NPY_FR_W,  # week
*/
  switch (__pyx_v_arr_reso) {
    case NPY_FR_D:

    /* "utils.pxd":8063
 *         return arr_mod(arr, 24, offset, False)
 *     if arr_reso in (
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day             # <<<<<<<<<<<<<<
 *         np.NPY_DATETIMEUNIT.NPY_FR_W,  # week
 *         np.NPY_DATETIMEUNIT.NPY_FR_M,  # month
*/
    case NPY_FR_W:

    /* "utils.pxd":8064
 *     if arr_reso in (
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day
 *         np.NPY_DATETIMEUNIT.NPY_FR_W,  # week             # <<<<<<<<<<<<<<
 *         np.NPY_DATETIMEUNIT.NPY_FR_M,  # month
 *         np.NPY_DATETIMEUNIT.NPY_FR_Y,  # year
*/
    case NPY_FR_M:

    /* "utils.pxd":8065
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day
 *         np.NPY_DATETIMEUNIT.NPY_FR_W,  # week
 *         np.NPY_DATETIMEUNIT.NPY_FR_M,  # month             # <<<<<<<<<<<<<<
 *         np.NPY_DATETIMEUNIT.NPY_FR_Y,  # year
 *     ):
*/
    case NPY_FR_Y:

    /* "utils.pxd":8068
 *         np.NPY_DATETIMEUNIT.NPY_FR_Y,  # year
 *     ):
 *         return arr_mul(arr, 0, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8068, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8062
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_mod(arr, 24, offset, False)
 *     if arr_reso in (             # <<<<<<<<<<<<<<
 *         np.NPY_DATETIMEUNIT.NPY_FR_D,  # day
 *         np.NPY_DATETIMEUNIT.NPY_FR_W,  # week
*/
    break;
    default: break;
  }

  /* "utils.pxd":8071
 * 
 *     # Unsupported resolution
 *     _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 * 
 * # . calendar
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8071, __pyx_L1_error)

  /* "utils.pxd":8025
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_times(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract time-of-day (elapsed since midnight) in the same unit as `arr` <'ndarray[int64]'>.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_times", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8074
 * 
 * # . calendar
 * cdef inline np.ndarray dt64arr_isocalendar(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Return ISO-8601 calendar components for each element of a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_isocalendar(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_isocalendar *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  __pyx_t_7cytimes_5utils_iso __pyx_v__iso;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3[2];
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __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("dt64arr_isocalendar", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8106
 *          [2003   43    1]]
 *     """
 *     arr = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8106, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":8109
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":8110
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":8113
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(2, [size, 3], np.NPY_TYPES.NPY_INT64, 0)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_3[1] = 3;
  __pyx_t_1 = PyArray_EMPTY(2, __pyx_t_3, NPY_INT64, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8113, __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_5numpy_ndarray))))) __PYX_ERR(5, 8113, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8114
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(2, [size, 3], np.NPY_TYPES.NPY_INT64, 0)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 *         ymd _ymd
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8119
 *         iso _iso
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = arr_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_4 = __pyx_v_size;
  __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;

    /* "utils.pxd":8120
 * 
 *     for i in range(size):
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":8122
 *         v = arr_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[0] = out_ptr[1] = out_ptr[2] = v
 *         # Calculate ISO calendar (year, week, weekday)
*/
    __pyx_t_7 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_7) {

      /* "utils.pxd":8123
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             out_ptr[0] = out_ptr[1] = out_ptr[2] = v             # <<<<<<<<<<<<<<
 *         # Calculate ISO calendar (year, week, weekday)
 *         else:
*/
      (__pyx_v_out_ptr[0]) = __pyx_v_v;
      (__pyx_v_out_ptr[1]) = __pyx_v_v;
      (__pyx_v_out_ptr[2]) = __pyx_v_v;

      /* "utils.pxd":8122
 *         v = arr_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[0] = out_ptr[1] = out_ptr[2] = v
 *         # Calculate ISO calendar (year, week, weekday)
*/
      goto __pyx_L5;
    }

    /* "utils.pxd":8126
 *         # Calculate ISO calendar (year, week, weekday)
 *         else:
 *             _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *             _iso = ymd_isocalendar(_ymd.year, _ymd.month, _ymd.day)
 *             out_ptr[0] = _iso.year
*/
    /*else*/ {
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

      /* "utils.pxd":8127
 *         else:
 *             _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *             _iso = ymd_isocalendar(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 *             out_ptr[0] = _iso.year
 *             out_ptr[1] = _iso.week
*/
      __pyx_v__iso = __pyx_f_7cytimes_5utils_ymd_isocalendar(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);

      /* "utils.pxd":8128
 *             _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *             _iso = ymd_isocalendar(_ymd.year, _ymd.month, _ymd.day)
 *             out_ptr[0] = _iso.year             # <<<<<<<<<<<<<<
 *             out_ptr[1] = _iso.week
 *             out_ptr[2] = _iso.weekday
*/
      __pyx_t_8 = __pyx_v__iso.year;
      (__pyx_v_out_ptr[0]) = __pyx_t_8;

      /* "utils.pxd":8129
 *             _iso = ymd_isocalendar(_ymd.year, _ymd.month, _ymd.day)
 *             out_ptr[0] = _iso.year
 *             out_ptr[1] = _iso.week             # <<<<<<<<<<<<<<
 *             out_ptr[2] = _iso.weekday
 *         # Increment +3
*/
      __pyx_t_8 = __pyx_v__iso.week;
      (__pyx_v_out_ptr[1]) = __pyx_t_8;

      /* "utils.pxd":8130
 *             out_ptr[0] = _iso.year
 *             out_ptr[1] = _iso.week
 *             out_ptr[2] = _iso.weekday             # <<<<<<<<<<<<<<
 *         # Increment +3
 *         out_ptr += 3
*/
      __pyx_t_8 = __pyx_v__iso.weekday;
      (__pyx_v_out_ptr[2]) = __pyx_t_8;
    }
    __pyx_L5:;

    /* "utils.pxd":8132
 *             out_ptr[2] = _iso.weekday
 *         # Increment +3
 *         out_ptr += 3             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    __pyx_v_out_ptr = (__pyx_v_out_ptr + 3);
  }

  /* "utils.pxd":8134
 *         out_ptr += 3
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_isoyear(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8074
 * 
 * # . calendar
 * cdef inline np.ndarray dt64arr_isocalendar(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Return ISO-8601 calendar components for each element of a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_isocalendar", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8136
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoyear(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 year numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_isoyear(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoyear *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_isoyear", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8155
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8156
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8157
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8162
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":8163
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8165
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO year
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8166
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Calculate ISO year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8165
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO year
*/
    }

    /* "utils.pxd":8168
 *             continue
 *         # Calculate ISO year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = ymd_isoyear(_ymd.year, _ymd.month, _ymd.day)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8169
 *         # Calculate ISO year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = ymd_isoyear(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_ymd_isoyear(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8171
 *         out_ptr[i] = ymd_isoyear(_ymd.year, _ymd.month, _ymd.day)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_isoweek(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8136
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoyear(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 year numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_isoyear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8173
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweek(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 week numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_isoweek(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweek *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_isoweek", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8192
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8192, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8193
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8194
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8199
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":8200
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8202
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO week
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8203
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Calculate ISO week
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8202
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO week
*/
    }

    /* "utils.pxd":8205
 *             continue
 *         # Calculate ISO week
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = ymd_isoweek(_ymd.year, _ymd.month, _ymd.day)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8206
 *         # Calculate ISO week
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = ymd_isoweek(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_ymd_isoweek(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8208
 *         out_ptr[i] = ymd_isoweek(_ymd.year, _ymd.month, _ymd.day)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_isoweekday(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8173
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweek(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 week numbers from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_isoweek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8210
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweekday(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 weekday numbers (1=Mon .. 7=Sun) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_isoweekday(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_isoweekday *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_isoweekday", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8229
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8230
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8231
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8236
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":8237
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8239
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO weekday
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8240
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Calculate ISO weekday
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8239
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate ISO weekday
*/
    }

    /* "utils.pxd":8242
 *             continue
 *         # Calculate ISO weekday
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = ymd_isoweekday(_ymd.year, _ymd.month, _ymd.day)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8243
 *         # Calculate ISO weekday
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = ymd_isoweekday(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_ymd_isoweekday(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8245
 *         out_ptr[i] = ymd_isoweekday(_ymd.year, _ymd.month, _ymd.day)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_is_leap_year(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8210
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_isoweekday(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract ISO-8601 weekday numbers (1=Mon .. 7=Sun) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_isoweekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8247
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_leap_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for leap years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_is_leap_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_leap_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  npy_intp __pyx_t_3[1];
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_is_leap_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8264
 *         NaT values (LLONG_MIN) are emitted as `False`.
 *     """
 *     arr = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":8267
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":8268
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":8271
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8271, __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_5numpy_ndarray))))) __PYX_ERR(5, 8271, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8272
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8275
 *         np.npy_int64 v
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = arr_ptr[i]
 *         # Handle NaT
*/
  __pyx_t_4 = __pyx_v_size;
  __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;

    /* "utils.pxd":8276
 * 
 *     for i in range(size):
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         # Handle NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":8278
 *         v = arr_ptr[i]
 *         # Handle NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_7 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_7) {

      /* "utils.pxd":8279
 *         # Handle NaT
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Check leap year
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":8280
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Check leap year
 *         out_ptr[i] = is_leap_year(v + EPOCH_YEAR)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8278
 *         v = arr_ptr[i]
 *         # Handle NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":8282
 *             continue
 *         # Check leap year
 *         out_ptr[i] = is_leap_year(v + EPOCH_YEAR)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_is_leap_year((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_YEAR));
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8284
 *         out_ptr[i] = is_leap_year(v + EPOCH_YEAR)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_is_long_year(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8247
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_leap_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for leap years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_is_leap_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8286
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_long_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for long years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_is_long_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_is_long_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  PyArrayObject *__pyx_v_out = 0;
  npy_bool *__pyx_v_out_ptr;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  npy_intp __pyx_t_3[1];
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_is_long_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8303
 *         NaT values (LLONG_MIN) are emitted as `False`.
 *     """
 *     arr = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":8306
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":8307
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         # Output array
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":8310
 *         np.npy_intp i
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)             # <<<<<<<<<<<<<<
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)
 *         np.npy_int64 v
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_BOOL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8310, __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_5numpy_ndarray))))) __PYX_ERR(5, 8310, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8311
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_BOOL, 0)
 *         np.npy_bool* out_ptr = <np.npy_bool*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_int64 v
 * 
*/
  __pyx_v_out_ptr = ((npy_bool *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8314
 *         np.npy_int64 v
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = arr_ptr[i]
 *         # Handle NaT
*/
  __pyx_t_4 = __pyx_v_size;
  __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;

    /* "utils.pxd":8315
 * 
 *     for i in range(size):
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         # Handle NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":8317
 *         v = arr_ptr[i]
 *         # Handle NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    __pyx_t_7 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_7) {

      /* "utils.pxd":8318
 *         # Handle NaT
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False             # <<<<<<<<<<<<<<
 *             continue
 *         # Check long year
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = 0;

      /* "utils.pxd":8319
 *         if v == LLONG_MIN:
 *             out_ptr[i] = False
 *             continue             # <<<<<<<<<<<<<<
 *         # Check long year
 *         out_ptr[i] = is_long_year(v + EPOCH_YEAR)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8317
 *         v = arr_ptr[i]
 *         # Handle NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = False
 *             continue
*/
    }

    /* "utils.pxd":8321
 *             continue
 *         # Check long year
 *         out_ptr[i] = is_long_year(v + EPOCH_YEAR)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_is_long_year((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_YEAR));
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8323
 *         out_ptr[i] = is_long_year(v + EPOCH_YEAR)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_leap_bt_years(np.ndarray arr, np.npy_int64 year, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8286
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_is_long_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Elementwise check for long years of a 1-D datetime64 array `<'ndarray[bool]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_is_long_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8325
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_leap_bt_years(np.ndarray arr, np.npy_int64 year, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Compute the number of leap years between the target `year` and elements
 *     of a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_leap_bt_years(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_year, struct __pyx_opt_args_7cytimes_5utils_dt64arr_leap_bt_years *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_leap_bt_years", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8347
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8348
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8349
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8353
 *         np.npy_int64 v
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8354
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8356
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate leap years between
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8357
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Calculate leap years between
 *         out_ptr[i] = leaps_bt_years(v + EPOCH_YEAR, year)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8356
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Calculate leap years between
*/
    }

    /* "utils.pxd":8359
 *             continue
 *         # Calculate leap years between
 *         out_ptr[i] = leaps_bt_years(v + EPOCH_YEAR, year)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_leaps_bt_years((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_YEAR), __pyx_v_year);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8361
 *         out_ptr[i] = leaps_bt_years(v + EPOCH_YEAR, year)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_in_year(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8325
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_leap_bt_years(np.ndarray arr, np.npy_int64 year, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Compute the number of leap years between the target `year` and elements
 *     of a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_leap_bt_years", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8363
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days in the year (365/366) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_in_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_in_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8382
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8382, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8383
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8384
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8388
 *         np.npy_int64 v
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8389
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8391
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days in year
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8392
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Get days in year
 *         out_ptr[i] = days_in_year(v + EPOCH_YEAR)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8391
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days in year
*/
    }

    /* "utils.pxd":8394
 *             continue
 *         # Get days in year
 *         out_ptr[i] = days_in_year(v + EPOCH_YEAR)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_in_year((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_YEAR));
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8396
 *         out_ptr[i] = days_in_year(v + EPOCH_YEAR)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_bf_year(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8363
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days in the year (365/366) from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_in_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8398
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days strictly before January 1 of year under the
 *     proleptic Gregorian rules from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_bf_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_bf_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8418
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8419
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8420
 *         np.ndarray out = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8424
 *         np.npy_int64 v
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8425
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8427
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days before year
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8428
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Get days before year
 *         out_ptr[i] = days_bf_year(v + EPOCH_YEAR)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8427
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days before year
*/
    }

    /* "utils.pxd":8430
 *             continue
 *         # Get days before year
 *         out_ptr[i] = days_bf_year(v + EPOCH_YEAR)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_bf_year((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_YEAR));
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8432
 *         out_ptr[i] = days_bf_year(v + EPOCH_YEAR)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_day_of_year(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8398
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the number of days strictly before January 1 of year under the
 *     proleptic Gregorian rules from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_bf_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8434
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-year from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_day_of_year(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_year *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_day_of_year", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8453
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8453, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8454
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8455
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8460
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8461
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8463
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days of year
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8464
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Get days of year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8463
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Get days of year
*/
    }

    /* "utils.pxd":8466
 *             continue
 *         # Get days of year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = day_of_year(_ymd.year, _ymd.month, _ymd.day)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8467
 *         # Get days of year
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = day_of_year(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_day_of_year(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8469
 *         out_ptr[i] = day_of_year(_ymd.year, _ymd.month, _ymd.day)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_in_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8434
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_year(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-year from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_day_of_year", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8471
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar quarter under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_in_quarter(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_quarter *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_in_quarter", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8491
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8491, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8492
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8493
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8498
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8499
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8501
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days in quarter
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8502
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Compute days in quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8501
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days in quarter
*/
    }

    /* "utils.pxd":8504
 *             continue
 *         # Compute days in quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = days_in_quarter(_ymd.year, _ymd.month)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8505
 *         # Compute days in quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = days_in_quarter(_ymd.year, _ymd.month)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_in_quarter(__pyx_v__ymd.year, __pyx_v__ymd.month);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8507
 *         out_ptr[i] = days_in_quarter(_ymd.year, _ymd.month)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_bf_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8471
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar quarter under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_in_quarter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8509
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar quarter under the proleptic Gregorian rules from a 1-D
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_bf_quarter(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_quarter *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_bf_quarter", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8530
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8531
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8532
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8537
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8538
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8540
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days before quarter
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8541
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Compute days before quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8540
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days before quarter
*/
    }

    /* "utils.pxd":8543
 *             continue
 *         # Compute days before quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = days_bf_quarter(_ymd.year, _ymd.month)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8544
 *         # Compute days before quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = days_bf_quarter(_ymd.year, _ymd.month)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_bf_quarter(__pyx_v__ymd.year, __pyx_v__ymd.month);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8546
 *         out_ptr[i] = days_bf_quarter(_ymd.year, _ymd.month)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_day_of_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8509
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar quarter under the proleptic Gregorian rules from a 1-D
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_bf_quarter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8548
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-quarter from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_day_of_quarter(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_day_of_quarter *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_day_of_quarter", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8568
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8569
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8570
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8575
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8576
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8578
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days of quarter
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8579
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Compute days of quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8578
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days of quarter
*/
    }

    /* "utils.pxd":8581
 *             continue
 *         # Compute days of quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = day_of_quarter(_ymd.year, _ymd.month, _ymd.day)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8582
 *         # Compute days of quarter
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = day_of_quarter(_ymd.year, _ymd.month, _ymd.day)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_day_of_quarter(__pyx_v__ymd.year, __pyx_v__ymd.month, __pyx_v__ymd.day);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8584
 *         out_ptr[i] = day_of_quarter(_ymd.year, _ymd.month, _ymd.day)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_in_month(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8548
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_day_of_quarter(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract the 1-based ordinal day-of-quarter from a 1-D datetime64 array `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_day_of_quarter", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8586
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar month under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_in_month(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_in_month", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8606
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8606, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8607
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8608
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8613
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8614
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8616
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days in month
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8617
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Compute days in month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8616
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days in month
*/
    }

    /* "utils.pxd":8619
 *             continue
 *         # Compute days in month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = days_in_month(_ymd.year, _ymd.month)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8620
 *         # Compute days in month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = days_in_month(_ymd.year, _ymd.month)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_in_month(__pyx_v__ymd.year, __pyx_v__ymd.month);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8622
 *         out_ptr[i] = days_in_month(_ymd.year, _ymd.month)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_days_bf_month(np.ndarray arr, int arr_reso=-1, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8586
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_in_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days in calendar month under the proleptic Gregorian rules
 *     from a 1-D datetime64 array `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_in_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8624
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar month under the proleptic Gregorian rules from a 1-D
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_days_bf_month(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_bf_month *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_days_bf_month", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }

  /* "utils.pxd":8645
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8646
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8647
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8652
 *         ymd _ymd
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Propagate NaT
*/
  __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;

    /* "utils.pxd":8653
 * 
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Propagate NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8655
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days before month
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8656
 *         # Propagate NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Compute days before month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8655
 *         v = out_ptr[i]
 *         # Propagate NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Compute days before month
*/
    }

    /* "utils.pxd":8658
 *             continue
 *         # Compute days before month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)             # <<<<<<<<<<<<<<
 *         out_ptr[i] = days_bf_month(_ymd.year, _ymd.month)
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY));

    /* "utils.pxd":8659
 *         # Compute days before month
 *         _ymd = ymd_fr_ord(v + EPOCH_DAY)
 *         out_ptr[i] = days_bf_month(_ymd.year, _ymd.month)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_f_7cytimes_5utils_days_bf_month(__pyx_v__ymd.year, __pyx_v__ymd.month);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8661
 *         out_ptr[i] = days_bf_month(_ymd.year, _ymd.month)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * # . conversion: int64
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8624
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_days_bf_month(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Extract number of days strictly before the first day of the
 *     calendar month under the proleptic Gregorian rules from a 1-D
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_days_bf_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8664
 * 
 * # . conversion: int64
 * cdef inline np.ndarray dt64arr_fr_int64(np.npy_int64 value, np.npy_intp size, str unit):             # <<<<<<<<<<<<<<
 *     """Create a 1-D datetime64 array filled with the specified integer `value` `<'ndarray[datetime64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_fr_int64(npy_int64 __pyx_v_value, npy_intp __pyx_v_size, PyObject *__pyx_v_unit) {
  PyArrayObject *__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("dt64arr_fr_int64", 0);

  /* "utils.pxd":8675
 *     >>> np.full(size, value, dtype=f"datetime64[{unit}]")
 *     """
 *     return arr_fill_int64(value, size).astype(nptime_unit_str2dt64(unit))             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64(np.ndarray arr, str as_unit, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_fill_int64(__pyx_v_value, __pyx_v_size)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_4 = __pyx_f_7cytimes_5utils_nptime_unit_str2dt64(__pyx_v_unit); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 8675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __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_astype, __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;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8675, __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_5numpy_ndarray))))) __PYX_ERR(5, 8675, __pyx_L1_error)
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":8664
 * 
 * # . conversion: int64
 * cdef inline np.ndarray dt64arr_fr_int64(np.npy_int64 value, np.npy_intp size, str unit):             # <<<<<<<<<<<<<<
 *     """Create a 1-D datetime64 array filled with the specified integer `value` `<'ndarray[datetime64]'>`.
 * 
*/

  /* 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("cytimes.utils.dt64arr_fr_int64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8677
 *     return arr_fill_int64(value, size).astype(nptime_unit_str2dt64(unit))
 * 
 * cdef inline np.ndarray dt64arr_as_int64(np.ndarray arr, str as_unit, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 ticks in the requested unit `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_as_unit, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64 *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  Py_ssize_t __pyx_v_size;
  Py_UCS4 __pyx_v_ch;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  Py_UCS4 __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_9;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Q __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_11;
  int __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us __pyx_t_14;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":8703
 *     >>> arr.astype(f"datetime64[{as_unit}]").astype("int64") + offset
 *     """
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 *     cdef:
*/
  __pyx_t_1 = (__pyx_v_as_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":8704
 *     """
 *     if as_unit is None:
 *         _raise_invalid_nptime_str_unit_error(as_unit)             # <<<<<<<<<<<<<<
 *     cdef:
 *         Py_ssize_t size = str_len(as_unit)
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_as_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8704, __pyx_L1_error)

    /* "utils.pxd":8703
 *     >>> arr.astype(f"datetime64[{as_unit}]").astype("int64") + offset
 *     """
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 *     cdef:
*/
  }

  /* "utils.pxd":8706
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 *     cdef:
 *         Py_ssize_t size = str_len(as_unit)             # <<<<<<<<<<<<<<
 *         Py_UCS4 ch
 * 
*/
  __pyx_v_size = PyUnicode_GET_LENGTH(__pyx_v_as_unit);

  /* "utils.pxd":8710
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'M', 'Y'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         if ch == "s":
*/
  __pyx_t_1 = (__pyx_v_size == 1);
  if (__pyx_t_1) {

    /* "utils.pxd":8711
 *     # Unit: 's', 'm', 'h', 'D', 'M', 'Y'
 *     if size == 1:
 *         ch = str_read(as_unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "s":
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_as_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 8711, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":8712
 *     if size == 1:
 *         ch = str_read(as_unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x73);
    if (__pyx_t_1) {

      /* "utils.pxd":8713
 *         ch = str_read(as_unit, 0)
 *         if ch == "s":
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_4.__pyx_n = 3;
      __pyx_t_4.arr_reso = __pyx_v_arr_reso;
      __pyx_t_4.offset = __pyx_v_offset;
      __pyx_t_4.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_s(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8713, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8712
 *     if size == 1:
 *         ch = str_read(as_unit, 0)
 *         if ch == "s":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
 *         if ch == "m":
*/
    }

    /* "utils.pxd":8714
 *         if ch == "s":
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 *         if ch == "h":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":8715
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
 *         if ch == "m":
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "h":
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_5.__pyx_n = 3;
      __pyx_t_5.arr_reso = __pyx_v_arr_reso;
      __pyx_t_5.offset = __pyx_v_offset;
      __pyx_t_5.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(__pyx_v_arr, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8715, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8714
 *         if ch == "s":
 *             return dt64arr_as_int64_s(arr, arr_reso, offset, copy)
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 *         if ch == "h":
*/
    }

    /* "utils.pxd":8716
 *         if ch == "m":
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
 *         if ch == "D":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x68);
    if (__pyx_t_1) {

      /* "utils.pxd":8717
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 *         if ch == "h":
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "D":
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6.__pyx_n = 3;
      __pyx_t_6.arr_reso = __pyx_v_arr_reso;
      __pyx_t_6.offset = __pyx_v_offset;
      __pyx_t_6.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_h(__pyx_v_arr, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8717, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8716
 *         if ch == "m":
 *             return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 *         if ch == "h":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
 *         if ch == "D":
*/
    }

    /* "utils.pxd":8718
 *         if ch == "h":
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
 *         if ch == "W":
*/
    __pyx_t_1 = (__pyx_v_ch == 68);
    if (__pyx_t_1) {

      /* "utils.pxd":8719
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
 *         if ch == "D":
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "W":
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7.__pyx_n = 3;
      __pyx_t_7.arr_reso = __pyx_v_arr_reso;
      __pyx_t_7.offset = __pyx_v_offset;
      __pyx_t_7.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8719, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8718
 *         if ch == "h":
 *             return dt64arr_as_int64_h(arr, arr_reso, offset, copy)
 *         if ch == "D":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
 *         if ch == "W":
*/
    }

    /* "utils.pxd":8720
 *         if ch == "D":
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 *         if ch == "M":
*/
    __pyx_t_1 = (__pyx_v_ch == 87);
    if (__pyx_t_1) {

      /* "utils.pxd":8721
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
 *         if ch == "W":
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "M":
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_8.__pyx_n = 3;
      __pyx_t_8.arr_reso = __pyx_v_arr_reso;
      __pyx_t_8.offset = __pyx_v_offset;
      __pyx_t_8.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_W(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8720
 *         if ch == "D":
 *             return dt64arr_as_int64_D(arr, arr_reso, offset, copy)
 *         if ch == "W":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 *         if ch == "M":
*/
    }

    /* "utils.pxd":8722
 *         if ch == "W":
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
 *         if ch == "Q":
*/
    __pyx_t_1 = (__pyx_v_ch == 77);
    if (__pyx_t_1) {

      /* "utils.pxd":8723
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 *         if ch == "M":
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "Q":
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_9.__pyx_n = 3;
      __pyx_t_9.arr_reso = __pyx_v_arr_reso;
      __pyx_t_9.offset = __pyx_v_offset;
      __pyx_t_9.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8723, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8722
 *         if ch == "W":
 *             return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 *         if ch == "M":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
 *         if ch == "Q":
*/
    }

    /* "utils.pxd":8724
 *         if ch == "M":
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
 *         if ch == "Q":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
 *         if ch == "Y":
*/
    __pyx_t_1 = (__pyx_v_ch == 81);
    if (__pyx_t_1) {

      /* "utils.pxd":8725
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
 *         if ch == "Q":
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "Y":
 *             return dt64arr_as_int64_Y(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_10.__pyx_n = 3;
      __pyx_t_10.arr_reso = __pyx_v_arr_reso;
      __pyx_t_10.offset = __pyx_v_offset;
      __pyx_t_10.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Q(__pyx_v_arr, &__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8724
 *         if ch == "M":
 *             return dt64arr_as_int64_M(arr, arr_reso, offset, copy)
 *         if ch == "Q":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
 *         if ch == "Y":
*/
    }

    /* "utils.pxd":8726
 *         if ch == "Q":
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_Y(arr, arr_reso, offset, copy)
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 89);
    if (__pyx_t_1) {

      /* "utils.pxd":8727
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
 *         if ch == "Y":
 *             return dt64arr_as_int64_Y(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'ns', 'us', 'ms'
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_11.__pyx_n = 3;
      __pyx_t_11.arr_reso = __pyx_v_arr_reso;
      __pyx_t_11.offset = __pyx_v_offset;
      __pyx_t_11.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8727, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8726
 *         if ch == "Q":
 *             return dt64arr_as_int64_Q(arr, arr_reso, offset, copy)
 *         if ch == "Y":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_Y(arr, arr_reso, offset, copy)
 * 
*/
    }

    /* "utils.pxd":8710
 * 
 *     # Unit: 's', 'm', 'h', 'D', 'M', 'Y'
 *     if size == 1:             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         if ch == "s":
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":8730
 * 
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         if ch == "n":
*/
  __pyx_t_12 = (__pyx_v_size == 2);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_as_unit, 1); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 8730, __pyx_L1_error)
  __pyx_t_12 = (__pyx_t_2 == 0x73);
  __pyx_t_1 = __pyx_t_12;
  __pyx_L13_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":8731
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":
 *         ch = str_read(as_unit, 0)             # <<<<<<<<<<<<<<
 *         if ch == "n":
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
*/
    __pyx_t_2 = PyUnicode_ReadChar(__pyx_v_as_unit, 0); if (unlikely(__pyx_t_2 == ((Py_UCS4)-1))) __PYX_ERR(5, 8731, __pyx_L1_error)
    __pyx_v_ch = __pyx_t_2;

    /* "utils.pxd":8732
 *     elif size == 2 and str_read(as_unit, 1) == "s":
 *         ch = str_read(as_unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
 *         if ch == "u":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6E);
    if (__pyx_t_1) {

      /* "utils.pxd":8733
 *         ch = str_read(as_unit, 0)
 *         if ch == "n":
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "u":
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_13.__pyx_n = 3;
      __pyx_t_13.arr_reso = __pyx_v_arr_reso;
      __pyx_t_13.offset = __pyx_v_offset;
      __pyx_t_13.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ns(__pyx_v_arr, &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8733, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8732
 *     elif size == 2 and str_read(as_unit, 1) == "s":
 *         ch = str_read(as_unit, 0)
 *         if ch == "n":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
 *         if ch == "u":
*/
    }

    /* "utils.pxd":8734
 *         if ch == "n":
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
 *         if ch == "m":
*/
    __pyx_t_1 = (__pyx_v_ch == 0x75);
    if (__pyx_t_1) {

      /* "utils.pxd":8735
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
 *         if ch == "u":
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 *         if ch == "m":
 *             return dt64arr_as_int64_ms(arr, arr_reso, offset, copy)
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_14.__pyx_n = 3;
      __pyx_t_14.arr_reso = __pyx_v_arr_reso;
      __pyx_t_14.offset = __pyx_v_offset;
      __pyx_t_14.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(__pyx_v_arr, &__pyx_t_14)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8735, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8734
 *         if ch == "n":
 *             return dt64arr_as_int64_ns(arr, arr_reso, offset, copy)
 *         if ch == "u":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
 *         if ch == "m":
*/
    }

    /* "utils.pxd":8736
 *         if ch == "u":
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_ms(arr, arr_reso, offset, copy)
 * 
*/
    __pyx_t_1 = (__pyx_v_ch == 0x6D);
    if (__pyx_t_1) {

      /* "utils.pxd":8737
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
 *         if ch == "m":
 *             return dt64arr_as_int64_ms(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Unit: 'min' for pandas compatibility
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_15.__pyx_n = 3;
      __pyx_t_15.arr_reso = __pyx_v_arr_reso;
      __pyx_t_15.offset = __pyx_v_offset;
      __pyx_t_15.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ms(__pyx_v_arr, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8737, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":8736
 *         if ch == "u":
 *             return dt64arr_as_int64_us(arr, arr_reso, offset, copy)
 *         if ch == "m":             # <<<<<<<<<<<<<<
 *             return dt64arr_as_int64_ms(arr, arr_reso, offset, copy)
 * 
*/
    }

    /* "utils.pxd":8730
 * 
 *     # Unit: 'ns', 'us', 'ms'
 *     elif size == 2 and str_read(as_unit, 1) == "s":             # <<<<<<<<<<<<<<
 *         ch = str_read(as_unit, 0)
 *         if ch == "n":
*/
    goto __pyx_L4;
  }

  /* "utils.pxd":8740
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":             # <<<<<<<<<<<<<<
 *         return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 * 
*/
  __pyx_t_12 = (__pyx_v_size == 3);
  if (__pyx_t_12) {
  } else {
    __pyx_t_1 = __pyx_t_12;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_12 = (__Pyx_PyUnicode_Equals(__pyx_v_as_unit, __pyx_mstate_global->__pyx_n_u_min, Py_EQ)); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(5, 8740, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_12;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":8741
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":
 *         return dt64arr_as_int64_m(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported unit
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.arr_reso = __pyx_v_arr_reso;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(__pyx_v_arr, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8741, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8740
 * 
 *     # Unit: 'min' for pandas compatibility
 *     elif size == 3 and as_unit == "min":             # <<<<<<<<<<<<<<
 *         return dt64arr_as_int64_m(arr, arr_reso, offset, copy)
 * 
*/
  }
  __pyx_L4:;

  /* "utils.pxd":8744
 * 
 *     # Unsupported unit
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, as_unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Y(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_v_as_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8744, __pyx_L1_error)

  /* "utils.pxd":8677
 *     return arr_fill_int64(value, size).astype(nptime_unit_str2dt64(unit))
 * 
 * cdef inline np.ndarray dt64arr_as_int64(np.ndarray arr, str as_unit, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 ticks in the requested unit `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8746
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, as_unit)
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Y(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 year ticks (Y) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_n;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_n400;
  npy_int64 __pyx_v_n100;
  npy_int64 __pyx_v_n4;
  npy_int64 __pyx_v_n1;
  npy_int64 __pyx_v_yy;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_Y", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8769
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":8770
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":8771
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8771, __pyx_L1_error)

      /* "utils.pxd":8770
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":8772
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: datetime64[Y]
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 8772, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":8769
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":8775
 * 
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":8776
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 * 
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8776, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":8777
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: datetime64[M]
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8777, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8775
 * 
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)
*/
  }

  /* "utils.pxd":8780
 * 
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_div_floor(arr, 12, offset, False)
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":8781
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 12, offset, False)
 * 
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8781, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":8782
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_div_floor(arr, 12, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, 12, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8782, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8780
 * 
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_div_floor(arr, 12, offset, False)
*/
  }

  /* "utils.pxd":8786
 *     # Setup
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 3;
  __pyx_t_7.arr_reso = __pyx_v_arr_reso;
  __pyx_t_7.offset = 0;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "utils.pxd":8787
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8788
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, n, r, n400, n100, n4, n1, yy
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8793
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":8794
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8796
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":8797
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 * 
 *         # Convert to 0-based offset from 0001-01-01
*/
      goto __pyx_L7_continue;

      /* "utils.pxd":8796
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    }

    /* "utils.pxd":8800
 * 
 *         # Convert to 0-based offset from 0001-01-01
 *         n = v + EPOCH_DAY - 1             # <<<<<<<<<<<<<<
 * 
 *         with cython.cdivision(True):
*/
    __pyx_v_n = ((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY) - 1);

    /* "utils.pxd":8804
 *         with cython.cdivision(True):
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
*/
    __pyx_v_n400 = (__pyx_v_n / 0x23AB1);
    __pyx_v_r = (__pyx_v_n % 0x23AB1);

    /* "utils.pxd":8805
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":8806
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:
 *                 n400 -= 1; r += 146_097             # <<<<<<<<<<<<<<
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
*/
      __pyx_v_n400 = (__pyx_v_n400 - 1);
      __pyx_v_r = (__pyx_v_r + 0x23AB1);

      /* "utils.pxd":8805
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    }

    /* "utils.pxd":8807
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
 *             n = r             # <<<<<<<<<<<<<<
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524
*/
    __pyx_v_n = __pyx_v_r;

    /* "utils.pxd":8809
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524             # <<<<<<<<<<<<<<
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461
*/
    __pyx_v_n100 = (__pyx_v_n / 0x8EAC);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x8EAC, 1);

    /* "utils.pxd":8811
 *             n100 = n / 36_524;  n %= 36_524
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461             # <<<<<<<<<<<<<<
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365
*/
    __pyx_v_n4 = (__pyx_v_n / 0x5B5);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x5B5, 1);

    /* "utils.pxd":8813
 *             n4   = n / 1_461;   n %= 1_461
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365             # <<<<<<<<<<<<<<
 * 
 *         # Compute the year
*/
    __pyx_v_n1 = (__pyx_v_n / 0x16D);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x16D, 1);

    /* "utils.pxd":8816
 * 
 *         # Compute the year
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1             # <<<<<<<<<<<<<<
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             yy -= 1
*/
    __pyx_v_yy = (((((__pyx_v_n400 * 0x190) + (__pyx_v_n100 * 0x64)) + (__pyx_v_n4 * 4)) + __pyx_v_n1) + 1);

    /* "utils.pxd":8817
 *         # Compute the year
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             yy -= 1
 *         out_ptr[i] = yy - EPOCH_YEAR + offset
*/
    __pyx_t_11 = (__pyx_v_n100 == 4);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_11 = (__pyx_v_n1 == 4);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":8818
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             yy -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = yy - EPOCH_YEAR + offset
 * 
*/
      __pyx_v_yy = (__pyx_v_yy - 1);

      /* "utils.pxd":8817
 *         # Compute the year
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             yy -= 1
 *         out_ptr[i] = yy - EPOCH_YEAR + offset
*/
    }

    /* "utils.pxd":8819
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             yy -= 1
 *         out_ptr[i] = yy - EPOCH_YEAR + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((__pyx_v_yy - __pyx_v_7cytimes_5utils_EPOCH_YEAR) + __pyx_v_offset);
    __pyx_L7_continue:;
  }

  /* "utils.pxd":8821
 *         out_ptr[i] = yy - EPOCH_YEAR + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Q(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8746
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, as_unit)
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Y(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 year ticks (Y) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_Y", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8823
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Q(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 quarter ticks (Q) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_Q(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Q *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_Q", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":8846
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8847
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8848
 *         np.ndarray out = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8853
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # preserve NaT value
*/
  __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;

    /* "utils.pxd":8854
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # preserve NaT value
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8856
 *         v = out_ptr[i]
 *         # preserve NaT value
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # convert months to quarters
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8857
 *         # preserve NaT value
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # convert months to quarters
 *         with cython.cdivision(True):
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8856
 *         v = out_ptr[i]
 *         # preserve NaT value
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # convert months to quarters
*/
    }

    /* "utils.pxd":8860
 *         # convert months to quarters
 *         with cython.cdivision(True):
 *             q = v / 3; r = v % 3             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_v / 3);
    __pyx_v_r = (__pyx_v_v % 3);

    /* "utils.pxd":8861
 *         with cython.cdivision(True):
 *             q = v / 3; r = v % 3
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    __pyx_t_6 = (__pyx_v_r < 0);
    if (__pyx_t_6) {

      /* "utils.pxd":8862
 *             q = v / 3; r = v % 3
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":8861
 *         with cython.cdivision(True):
 *             q = v / 3; r = v % 3
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    }

    /* "utils.pxd":8863
 *         if r < 0:
 *             q -= 1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8865
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_M(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8823
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_Q(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 quarter ticks (Q) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_Q", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8867
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_M(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 month ticks (M) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_n;
  npy_int64 __pyx_v_r;
  npy_int64 __pyx_v_n400;
  npy_int64 __pyx_v_n100;
  npy_int64 __pyx_v_n4;
  npy_int64 __pyx_v_n1;
  npy_int64 __pyx_v_yy;
  npy_int64 __pyx_v_mm;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_7;
  npy_intp __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  int __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_M", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":8890
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":8891
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":8892
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 8892, __pyx_L1_error)

      /* "utils.pxd":8891
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":8893
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: datetime64[Y]
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 8893, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":8890
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":8896
 * 
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_mul(arr, 12, offset, False)
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":8897
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 12, offset, False)
 * 
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":8898
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_mul(arr, 12, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path: datetime64[M]
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 12, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8896
 * 
 *     # Fast-path: datetime64[Y]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_mul(arr, 12, offset, False)
*/
  }

  /* "utils.pxd":8901
 * 
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":8902
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 * 
*/
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.copy = __pyx_v_copy;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8902, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":8903
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8903, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":8901
 * 
 *     # Fast-path: datetime64[M]
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         arr = arr_assure_int64(arr, copy)
 *         return arr_add(arr, offset, False)
*/
  }

  /* "utils.pxd":8907
 *     # Setup
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_7.__pyx_n = 3;
  __pyx_t_7.arr_reso = __pyx_v_arr_reso;
  __pyx_t_7.offset = 0;
  __pyx_t_7.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 8907, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "utils.pxd":8908
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8909
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, n, r, n400, n100, n4, n1, yy, mm
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8914
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_8 = __pyx_v_size;
  __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;

    /* "utils.pxd":8915
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8917
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    __pyx_t_1 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_1) {

      /* "utils.pxd":8918
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 * 
 *         # Convert to 0-based offset from 0001-01-01
*/
      goto __pyx_L7_continue;

      /* "utils.pxd":8917
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 * 
*/
    }

    /* "utils.pxd":8921
 * 
 *         # Convert to 0-based offset from 0001-01-01
 *         n = v + EPOCH_DAY - 1             # <<<<<<<<<<<<<<
 * 
 *         with cython.cdivision(True):
*/
    __pyx_v_n = ((__pyx_v_v + __pyx_v_7cytimes_5utils_EPOCH_DAY) - 1);

    /* "utils.pxd":8925
 *         with cython.cdivision(True):
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
*/
    __pyx_v_n400 = (__pyx_v_n / 0x23AB1);
    __pyx_v_r = (__pyx_v_n % 0x23AB1);

    /* "utils.pxd":8926
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {

      /* "utils.pxd":8927
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:
 *                 n400 -= 1; r += 146_097             # <<<<<<<<<<<<<<
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
*/
      __pyx_v_n400 = (__pyx_v_n400 - 1);
      __pyx_v_r = (__pyx_v_r + 0x23AB1);

      /* "utils.pxd":8926
 *             # Number of complete 400-year cycles
 *             n400 = n / 146_097; r = n % 146_097
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 n400 -= 1; r += 146_097
 *             n = r
*/
    }

    /* "utils.pxd":8928
 *             if r < 0:
 *                 n400 -= 1; r += 146_097
 *             n = r             # <<<<<<<<<<<<<<
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524
*/
    __pyx_v_n = __pyx_v_r;

    /* "utils.pxd":8930
 *             n = r
 *             # Number of complete 100-year cycles within the 400-year cycle
 *             n100 = n / 36_524;  n %= 36_524             # <<<<<<<<<<<<<<
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461
*/
    __pyx_v_n100 = (__pyx_v_n / 0x8EAC);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x8EAC, 1);

    /* "utils.pxd":8932
 *             n100 = n / 36_524;  n %= 36_524
 *             # Number of complete 4-year cycles within the 100-year cycle
 *             n4   = n / 1_461;   n %= 1_461             # <<<<<<<<<<<<<<
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365
*/
    __pyx_v_n4 = (__pyx_v_n / 0x5B5);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x5B5, 1);

    /* "utils.pxd":8934
 *             n4   = n / 1_461;   n %= 1_461
 *             # Number of complete years within the 4-year cycle
 *             n1   = n / 365;     n %= 365             # <<<<<<<<<<<<<<
 * 
 *         # Compute year & month
*/
    __pyx_v_n1 = (__pyx_v_n / 0x16D);
    __pyx_v_n = __Pyx_mod_npy_int64(__pyx_v_n, 0x16D, 1);

    /* "utils.pxd":8937
 * 
 *         # Compute year & month
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1             # <<<<<<<<<<<<<<
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             yy -= 1; mm = 12
*/
    __pyx_v_yy = (((((__pyx_v_n400 * 0x190) + (__pyx_v_n100 * 0x64)) + (__pyx_v_n4 * 4)) + __pyx_v_n1) + 1);

    /* "utils.pxd":8938
 *         # Compute year & month
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             yy -= 1; mm = 12
 *         else:
*/
    __pyx_t_11 = (__pyx_v_n100 == 4);
    if (!__pyx_t_11) {
    } else {
      __pyx_t_1 = __pyx_t_11;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_11 = (__pyx_v_n1 == 4);
    __pyx_t_1 = __pyx_t_11;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_1) {

      /* "utils.pxd":8939
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates
 *             yy -= 1; mm = 12             # <<<<<<<<<<<<<<
 *         else:
 *             mm = (n + 50) >> 5  # initial 1..12 estimate
*/
      __pyx_v_yy = (__pyx_v_yy - 1);
      __pyx_v_mm = 12;

      /* "utils.pxd":8938
 *         # Compute year & month
 *         yy = n400 * 400 + n100 * 100 + n4 * 4 + n1 + 1
 *         if n100 == 4 or n1 == 4:  # end-of-cycle dates             # <<<<<<<<<<<<<<
 *             yy -= 1; mm = 12
 *         else:
*/
      goto __pyx_L11;
    }

    /* "utils.pxd":8941
 *             yy -= 1; mm = 12
 *         else:
 *             mm = (n + 50) >> 5  # initial 1..12 estimate             # <<<<<<<<<<<<<<
 *             if days_bf_month(yy, mm) > n:
 *                 mm -= 1
*/
    /*else*/ {
      __pyx_v_mm = ((__pyx_v_n + 50) >> 5);

      /* "utils.pxd":8942
 *         else:
 *             mm = (n + 50) >> 5  # initial 1..12 estimate
 *             if days_bf_month(yy, mm) > n:             # <<<<<<<<<<<<<<
 *                 mm -= 1
 * 
*/
      __pyx_t_1 = (__pyx_f_7cytimes_5utils_days_bf_month(__pyx_v_yy, __pyx_v_mm) > __pyx_v_n);
      if (__pyx_t_1) {

        /* "utils.pxd":8943
 *             mm = (n + 50) >> 5  # initial 1..12 estimate
 *             if days_bf_month(yy, mm) > n:
 *                 mm -= 1             # <<<<<<<<<<<<<<
 * 
 *         # Total months since epoch
*/
        __pyx_v_mm = (__pyx_v_mm - 1);

        /* "utils.pxd":8942
 *         else:
 *             mm = (n + 50) >> 5  # initial 1..12 estimate
 *             if days_bf_month(yy, mm) > n:             # <<<<<<<<<<<<<<
 *                 mm -= 1
 * 
*/
      }
    }
    __pyx_L11:;

    /* "utils.pxd":8946
 * 
 *         # Total months since epoch
 *         out_ptr[i] = (yy - EPOCH_YEAR) * 12 + (mm - 1) + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((((__pyx_v_yy - __pyx_v_7cytimes_5utils_EPOCH_YEAR) * 12) + (__pyx_v_mm - 1)) + __pyx_v_offset);
    __pyx_L7_continue:;
  }

  /* "utils.pxd":8948
 *         out_ptr[i] = (yy - EPOCH_YEAR) * 12 + (mm - 1) + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_W(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8867
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_M(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 month ticks (M) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_M", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8950
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_W(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_W(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_W", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":8973
 *     """
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 8973, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":8974
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":8975
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":8980
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # preserve NaT value
*/
  __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;

    /* "utils.pxd":8981
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # preserve NaT value
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":8983
 *         v = out_ptr[i]
 *         # preserve NaT value
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # convert days to weeks
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":8984
 *         # preserve NaT value
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # convert days to weeks
 *         with cython.cdivision(True):
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":8983
 *         v = out_ptr[i]
 *         # preserve NaT value
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # convert days to weeks
*/
    }

    /* "utils.pxd":8987
 *         # convert days to weeks
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_v / 7);
    __pyx_v_r = (__pyx_v_v % 7);

    /* "utils.pxd":8988
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    __pyx_t_6 = (__pyx_v_r < 0);
    if (__pyx_t_6) {

      /* "utils.pxd":8989
 *             q = v / 7; r = v % 7
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":8988
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    }

    /* "utils.pxd":8990
 *         if r < 0:
 *             q -= 1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L3_continue:;
  }

  /* "utils.pxd":8992
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_D(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":8950
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_W(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_W", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":8994
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_D(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 day ticks (D) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9017
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9018
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9019
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9019, __pyx_L1_error)

      /* "utils.pxd":9018
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9020
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9020, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9017
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9023
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_DAY, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9023, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9024
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9025
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9025, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9024
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9026
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9027
 *         return arr_div_floor(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9027, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9026
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9028
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9029
 *         return arr_div_floor(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9029, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9028
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9030
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9031
 *         return arr_div_floor(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 1440, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9031, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9030
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9032
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9033
 *         return arr_div_floor(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 1440, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_div_floor(arr, 24, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, 0x5A0, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9032
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9034
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9035
 *         return arr_div_floor(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_div_floor(arr, 24, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, 24, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9035, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9034
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 1440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9036
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_div_floor(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9037
 *         return arr_div_floor(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9036
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_div_floor(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9038
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9039
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 7, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9039, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9038
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9040
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9041
 *         return arr_mul(arr, 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 1, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = 1;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9041, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9040
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9042
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 1, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9043
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 1, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = 1;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9042
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 1, offset, False)
 * 
*/
  }

  /* "utils.pxd":9046
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "D")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_h(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_D); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9046, __pyx_L1_error)

  /* "utils.pxd":8994
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_int64_D(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 day ticks (D) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9048
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "D")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_h(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 hour ticks (h) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_h(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_h", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9071
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9072
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9073
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9073, __pyx_L1_error)

      /* "utils.pxd":9072
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9074
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9074, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9071
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9077
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9077, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9078
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9079
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9079, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9078
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9080
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9081
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9081, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9080
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9082
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9083
 *         return arr_div_floor(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_HOUR, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9083, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9082
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9084
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9085
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 60, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_HOUR, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9085, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9084
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9086
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9087
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 60, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, 60, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9087, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9086
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9088
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9089
 *         return arr_div_floor(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 24, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9089, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9088
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_div_floor(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9090
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9091
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 24, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 24 * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 24, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9091, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9090
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9092
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 24 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9093
 *         return arr_mul(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 24 * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0xa8, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9093, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9092
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 24 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9094
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 24 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9095
 *         return arr_mul(arr, 24 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 24, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = 24;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9095, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9094
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 24 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9096
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 24, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9097
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 24, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = 24;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9097, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9096
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 24, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 24, offset, False)
 * 
*/
  }

  /* "utils.pxd":9100
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "h")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_m(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_h); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9100, __pyx_L1_error)

  /* "utils.pxd":9048
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "D")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_h(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 hour ticks (h) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_h", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9102
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "h")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_m(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 minute ticks (m) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_m", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9125
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9126
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9127
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9127, __pyx_L1_error)

      /* "utils.pxd":9126
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9128
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9128, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9125
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9131
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9131, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9132
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9133
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9132
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9134
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9135
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9135, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9134
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9136
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9137
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_MINUTE, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9137, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9136
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9138
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9139
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_MINUTE, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9139, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9138
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9140
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9141
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, 60, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9141, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9140
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_div_floor(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9142
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9143
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, 60, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 1_440, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 60, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9142
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9144
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9145
 *         return arr_mul(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 1_440, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 1_440 * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x5A0, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9145, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9144
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, 60, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9146
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 1_440 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9147
 *         return arr_mul(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 1_440 * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x2760, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9147, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9146
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, 1_440 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9148
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 1_440 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9149
 *         return arr_mul(arr, 1_440 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 1_440, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = 0x5A0;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9148
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, 1_440 * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9150
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 1_440, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9151
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, 1_440, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = 0x5A0;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9151, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9150
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, 1_440, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, 1_440, offset, False)
 * 
*/
  }

  /* "utils.pxd":9154
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "m")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_s(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_m); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9154, __pyx_L1_error)

  /* "utils.pxd":9102
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "h")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_m(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 minute ticks (m) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_m", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9156
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "m")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_s(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 second ticks (s) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_s(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_s", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9179
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9180
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9181
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9181, __pyx_L1_error)

      /* "utils.pxd":9180
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9182
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9182, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9179
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9185
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9186
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9187
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9186
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9188
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9189
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9188
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9190
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9191
 *         return arr_div_floor(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_SECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9191, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9190
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9192
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9193
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, SS_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9192
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_div_floor(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9194
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9195
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, SS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, SS_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_MINUTE, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9195, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9194
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9196
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9197
 *         return arr_mul(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, SS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, SS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_HOUR, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9196
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, SS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9198
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9199
 *         return arr_mul(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, SS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9199, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9198
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, SS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9200
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9201
 *         return arr_mul(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, SS_DAY * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (__pyx_v_7cytimes_5utils_SS_DAY * 7), &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9201, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9200
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9202
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9203
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, SS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = __pyx_v_7cytimes_5utils_SS_DAY;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9203, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9202
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, SS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9204
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, SS_DAY, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9205
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, SS_DAY, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = __pyx_v_7cytimes_5utils_SS_DAY;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9204
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, SS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, SS_DAY, offset, False)
 * 
*/
  }

  /* "utils.pxd":9208
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "s")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ms(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_s); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9208, __pyx_L1_error)

  /* "utils.pxd":9156
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "m")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_s(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 second ticks (s) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_s", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9210
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "s")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ms(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 millisecond ticks (ms) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_ms(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_ms", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9233
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9234
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9235
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9235, __pyx_L1_error)

      /* "utils.pxd":9234
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9236
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9236, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9233
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9239
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9240
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9241
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9240
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9242
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9243
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9242
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9244
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9245
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, MS_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9245, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9244
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_div_floor(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9246
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9247
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, MS_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, MS_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_SECOND, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9247, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9246
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9248
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9249
 *         return arr_mul(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, MS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, MS_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_MINUTE, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9248
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, MS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9250
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9251
 *         return arr_mul(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, MS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, MS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_HOUR, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9250
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, MS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9252
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9253
 *         return arr_mul(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, MS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9252
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, MS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9254
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9255
 *         return arr_mul(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, MS_DAY * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (__pyx_v_7cytimes_5utils_MS_DAY * 7), &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9254
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9256
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9257
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, MS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = __pyx_v_7cytimes_5utils_MS_DAY;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9256
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, MS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9258
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, MS_DAY, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9259
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, MS_DAY, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = __pyx_v_7cytimes_5utils_MS_DAY;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9258
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, MS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, MS_DAY, offset, False)
 * 
*/
  }

  /* "utils.pxd":9262
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ms")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_ms); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9262, __pyx_L1_error)

  /* "utils.pxd":9210
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "s")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ms(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 millisecond ticks (ms) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_ms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9264
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ms")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9287
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9288
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9289
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9289, __pyx_L1_error)

      /* "utils.pxd":9288
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9290
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9290, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9287
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9293
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9294
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9295
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9295, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9294
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9296
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9297
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9297, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9296
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9298
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9299
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, US_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9298
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9300
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9301
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, US_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9300
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9302
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9303
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9303, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9302
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9304
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9305
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, US_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9304
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9306
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9307
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9307, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9306
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9308
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9309
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (__pyx_v_7cytimes_5utils_US_DAY * 7), &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9309, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9308
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9310
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9311
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = __pyx_v_7cytimes_5utils_US_DAY;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9311, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9310
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9312
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, US_DAY, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9313
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.factor = __pyx_v_7cytimes_5utils_US_DAY;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9312
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, US_DAY, offset, False)
 * 
*/
  }

  /* "utils.pxd":9316
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ns(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_us); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9316, __pyx_L1_error)

  /* "utils.pxd":9264
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ms")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9318
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ns(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 nanosecond ticks (ns) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_int64_ns(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_int64_ns", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9341
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9342
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9343
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9343, __pyx_L1_error)

      /* "utils.pxd":9342
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9344
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9344, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9341
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9347
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_add(arr, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9347, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":9348
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9349
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9349, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9348
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":9350
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":9351
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9351, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9350
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":9352
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":9353
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, NS_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9353, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9352
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
*/
  }

  /* "utils.pxd":9354
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":9355
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, NS_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, NS_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9355, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9354
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, NS_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
*/
  }

  /* "utils.pxd":9356
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":9357
 *         return arr_mul(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, NS_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, NS_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9357, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9356
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:  # second
 *         return arr_mul(arr, NS_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
*/
  }

  /* "utils.pxd":9358
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":9359
 *         return arr_mul(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, NS_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, NS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9358
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:  # minute
 *         return arr_mul(arr, NS_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
*/
  }

  /* "utils.pxd":9360
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":9361
 *         return arr_mul(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, NS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9361, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9360
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:  # hour
 *         return arr_mul(arr, NS_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
*/
  }

  /* "utils.pxd":9362
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":9363
 *         return arr_mul(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, NS_DAY * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (__pyx_v_7cytimes_5utils_NS_DAY * 7), &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9362
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:  # day
 *         return arr_mul(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
*/
  }

  /* "utils.pxd":9364
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":9365
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, NS_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.factor = __pyx_v_7cytimes_5utils_NS_DAY;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9365, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9364
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:  # week
 *         return arr_mul(arr, NS_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month             # <<<<<<<<<<<<<<
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
*/
  }

  /* "utils.pxd":9366
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, NS_DAY, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":9367
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year
 *         return _dt64arr_Y_as_int64_D(arr, NS_DAY, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.factor = __pyx_v_7cytimes_5utils_NS_DAY;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9367, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9366
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:  # month
 *         return _dt64arr_M_as_int64_D(arr, NS_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:  # year             # <<<<<<<<<<<<<<
 *         return _dt64arr_Y_as_int64_D(arr, NS_DAY, offset, False)
 * 
*/
  }

  /* "utils.pxd":9370
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ns")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray _dt64arr_Y_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_ns); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9370, __pyx_L1_error)

  /* "utils.pxd":9318
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray dt64arr_as_int64_ns(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 nanosecond ticks (ns) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_int64_ns", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9372
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ns")
 * 
 * cdef inline np.ndarray _dt64arr_Y_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[Y]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_Y_as_int64_D(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils__dt64arr_Y_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_factor = ((npy_int64)1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  npy_int64 __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64_Y_as_int64_D __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_dt64arr_Y_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_factor = __pyx_optional_args->factor;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":9388
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9388, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":9389
 *     cdef:
 *         np.ndarray out = arr_assure_int64(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":9390
 *         np.ndarray out = arr_assure_int64(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":9395
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":9396
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":9398
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to day resolution
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":9399
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Convert to day resolution
 *         out_ptr[i] = _dt64_Y_as_int64_D(v, factor, offset)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":9398
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to day resolution
*/
    }

    /* "utils.pxd":9401
 *             continue
 *         # Convert to day resolution
 *         out_ptr[i] = _dt64_Y_as_int64_D(v, factor, offset)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.factor = __pyx_v_factor;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_7 = __pyx_f_7cytimes_5utils__dt64_Y_as_int64_D(__pyx_v_v, &__pyx_t_8); 
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_t_7;
    __pyx_L3_continue:;
  }

  /* "utils.pxd":9403
 *         out_ptr[i] = _dt64_Y_as_int64_D(v, factor, offset)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray _dt64arr_M_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":9372
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "ns")
 * 
 * cdef inline np.ndarray _dt64arr_Y_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[Y]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils._dt64arr_Y_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9405
 *     return out
 * 
 * cdef inline np.ndarray _dt64arr_M_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[M]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_M_as_int64_D(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils__dt64arr_M_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_factor = ((npy_int64)1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_2;
  npy_intp __pyx_t_3;
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  int __pyx_t_6;
  npy_int64 __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__dt64_M_as_int64_D __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_dt64arr_M_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_factor = __pyx_optional_args->factor;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":9421
 *     # Setup
 *     cdef:
 *         np.ndarray out = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":9422
 *     cdef:
 *         np.ndarray out = arr_assure_int64(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":9423
 *         np.ndarray out = arr_assure_int64(arr, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, yy_ep, yy, mm, leaps
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":9428
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __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;

    /* "utils.pxd":9429
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":9431
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to day resolution
*/
    __pyx_t_6 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_6) {

      /* "utils.pxd":9432
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Convert to day resolution
 *         out_ptr[i] = _dt64_M_as_int64_D(v, factor, offset)
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":9431
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to day resolution
*/
    }

    /* "utils.pxd":9434
 *             continue
 *         # Convert to day resolution
 *         out_ptr[i] = _dt64_M_as_int64_D(v, factor, offset)             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.factor = __pyx_v_factor;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_7 = __pyx_f_7cytimes_5utils__dt64_M_as_int64_D(__pyx_v_v, &__pyx_t_8); 
    (__pyx_v_out_ptr[__pyx_v_i]) = __pyx_t_7;
    __pyx_L3_continue:;
  }

  /* "utils.pxd":9436
 *         out_ptr[i] = _dt64_M_as_int64_D(v, factor, offset)
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_as_W_iso(np.ndarray arr, int weekday, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":9405
 *     return out
 * 
 * cdef inline np.ndarray _dt64arr_M_as_int64_D(np.ndarray arr, np.npy_int64 factor=1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert an ndarray[datetime64[M]] to int64 day ticks (D), then
 *     scale by `factor` and add `offset` `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils._dt64arr_M_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9438
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_W_iso(np.ndarray arr, int weekday, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) aligned to an ISO weekday `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_W_iso(PyArrayObject *__pyx_v_arr, int __pyx_v_weekday, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_W_iso *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  npy_int64 __pyx_v_adj;
  PyArrayObject *__pyx_v_out = 0;
  npy_int64 *__pyx_v_out_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  long __pyx_t_1;
  long __pyx_t_2;
  int __pyx_t_3;
  long __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_8;
  npy_intp __pyx_t_9;
  npy_intp __pyx_t_10;
  npy_intp __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_W_iso", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":9467
 * 
 *     # Fast-path
 *     cdef np.npy_int64 adj = 4 - min(max(weekday, 1), 7)             # <<<<<<<<<<<<<<
 *     if adj == 0:
 *         return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
*/
  __pyx_t_1 = 7;
  __pyx_t_2 = 1;
  __pyx_t_3 = __pyx_v_weekday;
  __pyx_t_5 = (__pyx_t_2 > __pyx_t_3);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_t_2;
  } else {
    __pyx_t_4 = __pyx_t_3;
  }
  __pyx_t_2 = __pyx_t_4;
  __pyx_t_5 = (__pyx_t_1 < __pyx_t_2);
  if (__pyx_t_5) {
    __pyx_t_4 = __pyx_t_1;
  } else {
    __pyx_t_4 = __pyx_t_2;
  }
  __pyx_v_adj = (4 - __pyx_t_4);

  /* "utils.pxd":9468
 *     # Fast-path
 *     cdef np.npy_int64 adj = 4 - min(max(weekday, 1), 7)
 *     if adj == 0:             # <<<<<<<<<<<<<<
 *         return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 * 
*/
  __pyx_t_5 = (__pyx_v_adj == 0);
  if (__pyx_t_5) {

    /* "utils.pxd":9469
 *     cdef np.npy_int64 adj = 4 - min(max(weekday, 1), 7)
 *     if adj == 0:
 *         return dt64arr_as_int64_W(arr, arr_reso, offset, copy)             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = __pyx_v_arr_reso;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = __pyx_v_copy;
    __pyx_t_6 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_W(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 9469, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_r = ((PyArrayObject *)__pyx_t_6);
    __pyx_t_6 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9468
 *     # Fast-path
 *     cdef np.npy_int64 adj = 4 - min(max(weekday, 1), 7)
 *     if adj == 0:             # <<<<<<<<<<<<<<
 *         return dt64arr_as_int64_W(arr, arr_reso, offset, copy)
 * 
*/
  }

  /* "utils.pxd":9473
 *     # Setup
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]
*/
  __pyx_t_8.__pyx_n = 3;
  __pyx_t_8.arr_reso = __pyx_v_arr_reso;
  __pyx_t_8.offset = 0;
  __pyx_t_8.copy = __pyx_v_copy;
  __pyx_t_6 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 9473, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "utils.pxd":9474
 *     cdef:
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = out.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_out_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":9475
 *         np.ndarray out = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *         np.npy_int64* out_ptr = <np.npy_int64*> np.PyArray_DATA(out)
 *         np.npy_intp size = out.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_out)[0]);

  /* "utils.pxd":9480
 * 
 *     # Compute
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = out_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_9 = __pyx_v_size;
  __pyx_t_10 = __pyx_t_9;
  for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
    __pyx_v_i = __pyx_t_11;

    /* "utils.pxd":9481
 *     # Compute
 *     for i in range(size):
 *         v = out_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_out_ptr[__pyx_v_i]);

    /* "utils.pxd":9483
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Aligned to the specified weekday
*/
    __pyx_t_5 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_5) {

      /* "utils.pxd":9484
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             continue             # <<<<<<<<<<<<<<
 *         # Aligned to the specified weekday
 *         v += adj
*/
      goto __pyx_L4_continue;

      /* "utils.pxd":9483
 *         v = out_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             continue
 *         # Aligned to the specified weekday
*/
    }

    /* "utils.pxd":9486
 *             continue
 *         # Aligned to the specified weekday
 *         v += adj             # <<<<<<<<<<<<<<
 *         # Convert to week resolution
 *         with cython.cdivision(True):
*/
    __pyx_v_v = (__pyx_v_v + __pyx_v_adj);

    /* "utils.pxd":9489
 *         # Convert to week resolution
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7             # <<<<<<<<<<<<<<
 *         if r < 0:
 *             q -= 1
*/
    __pyx_v_q = (__pyx_v_v / 7);
    __pyx_v_r = (__pyx_v_v % 7);

    /* "utils.pxd":9490
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    __pyx_t_5 = (__pyx_v_r < 0);
    if (__pyx_t_5) {

      /* "utils.pxd":9491
 *             q = v / 7; r = v % 7
 *         if r < 0:
 *             q -= 1             # <<<<<<<<<<<<<<
 *         out_ptr[i] = q + offset
 * 
*/
      __pyx_v_q = (__pyx_v_q - 1);

      /* "utils.pxd":9490
 *         with cython.cdivision(True):
 *             q = v / 7; r = v % 7
 *         if r < 0:             # <<<<<<<<<<<<<<
 *             q -= 1
 *         out_ptr[i] = q + offset
*/
    }

    /* "utils.pxd":9492
 *         if r < 0:
 *             q -= 1
 *         out_ptr[i] = q + offset             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = (__pyx_v_q + __pyx_v_offset);
    __pyx_L4_continue:;
  }

  /* "utils.pxd":9494
 *         out_ptr[i] = q + offset
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_to_ord(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":9438
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_as_W_iso(np.ndarray arr, int weekday, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 week ticks (W) aligned to an ISO weekday `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_W_iso", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9496
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_to_ord(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 proleptic
 *     Gregorian ordinals `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_to_ord(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ord *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_to_ord", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }

  /* "utils.pxd":9520
 *     >>> arr.astype("datetime64[D]").astype("int64") + 719163 + offset
 *     """
 *     return dt64arr_as_int64_D(arr, arr_reso, EPOCH_DAY + offset, copy)             # <<<<<<<<<<<<<<
 * 
 * # . conversion: float64
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = (__pyx_v_7cytimes_5utils_EPOCH_DAY + __pyx_v_offset);
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9520, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "utils.pxd":9496
 *     return out
 * 
 * cdef inline np.ndarray dt64arr_to_ord(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to int64 proleptic
 *     Gregorian ordinals `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_to_ord", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9523
 * 
 * # . conversion: float64
 * cdef inline np.ndarray dt64arr_to_ts(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to float64 Unix timestamps `<'ndarray[float64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_to_ts(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_to_ts *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  npy_int64 *__pyx_v_arr_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_v;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_v_out = 0;
  npy_float64 *__pyx_v_out_ptr;
  npy_float64 __pyx_v_inv_us;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us __pyx_t_2;
  npy_intp __pyx_t_3[1];
  npy_intp __pyx_t_4;
  npy_intp __pyx_t_5;
  npy_intp __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_to_ts", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9546
 *     >>> arr.astype("datetime64[us]").astype("int64") / 1_000_000
 *     """
 *     arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)  # int64[us]             # <<<<<<<<<<<<<<
 *     cdef:
 *         # Target array
*/
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.arr_reso = __pyx_v_arr_reso;
  __pyx_t_2.offset = 0;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9546, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":9549
 *     cdef:
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)             # <<<<<<<<<<<<<<
 *         np.npy_intp size = arr.shape[0]
 *         np.npy_intp i
*/
  __pyx_v_arr_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_arr));

  /* "utils.pxd":9550
 *         # Target array
 *         np.npy_int64* arr_ptr = <np.npy_int64*> np.PyArray_DATA(arr)
 *         np.npy_intp size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         np.npy_intp i
 *         np.npy_int64 v, q, r
*/
  __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

  /* "utils.pxd":9554
 *         np.npy_int64 v, q, r
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_FLOAT64, 0)             # <<<<<<<<<<<<<<
 *         np.npy_float64* out_ptr = <np.npy_float64*> np.PyArray_DATA(out)
 *         # Pre-computed
*/
  __pyx_t_3[0] = __pyx_v_size;
  __pyx_t_1 = PyArray_EMPTY(1, __pyx_t_3, NPY_FLOAT64, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 9554, __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_5numpy_ndarray))))) __PYX_ERR(5, 9554, __pyx_L1_error)
  __pyx_v_out = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":9555
 *         # Output array
 *         np.ndarray out = np.PyArray_EMPTY(1, [size], np.NPY_TYPES.NPY_FLOAT64, 0)
 *         np.npy_float64* out_ptr = <np.npy_float64*> np.PyArray_DATA(out)             # <<<<<<<<<<<<<<
 *         # Pre-computed
 *         np.npy_float64 inv_us = 1.0 / <np.npy_float64> US_SECOND
*/
  __pyx_v_out_ptr = ((npy_float64 *)PyArray_DATA(__pyx_v_out));

  /* "utils.pxd":9557
 *         np.npy_float64* out_ptr = <np.npy_float64*> np.PyArray_DATA(out)
 *         # Pre-computed
 *         np.npy_float64 inv_us = 1.0 / <np.npy_float64> US_SECOND             # <<<<<<<<<<<<<<
 * 
 *     for i in range(size):
*/
  if (unlikely(((npy_float64)__pyx_v_7cytimes_5utils_US_SECOND) == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(5, 9557, __pyx_L1_error)
  }
  __pyx_v_inv_us = (((npy_float64)1.0) / ((npy_float64)__pyx_v_7cytimes_5utils_US_SECOND));

  /* "utils.pxd":9559
 *         np.npy_float64 inv_us = 1.0 / <np.npy_float64> US_SECOND
 * 
 *     for i in range(size):             # <<<<<<<<<<<<<<
 *         v = arr_ptr[i]
 *         # Preserve NaT
*/
  __pyx_t_4 = __pyx_v_size;
  __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;

    /* "utils.pxd":9560
 * 
 *     for i in range(size):
 *         v = arr_ptr[i]             # <<<<<<<<<<<<<<
 *         # Preserve NaT
 *         if v == LLONG_MIN:
*/
    __pyx_v_v = (__pyx_v_arr_ptr[__pyx_v_i]);

    /* "utils.pxd":9562
 *         v = arr_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = math.NAN
 *             continue
*/
    __pyx_t_7 = (__pyx_v_v == LLONG_MIN);
    if (__pyx_t_7) {

      /* "utils.pxd":9563
 *         # Preserve NaT
 *         if v == LLONG_MIN:
 *             out_ptr[i] = math.NAN             # <<<<<<<<<<<<<<
 *             continue
 *         # Convert to seconds
*/
      (__pyx_v_out_ptr[__pyx_v_i]) = NAN;

      /* "utils.pxd":9564
 *         if v == LLONG_MIN:
 *             out_ptr[i] = math.NAN
 *             continue             # <<<<<<<<<<<<<<
 *         # Convert to seconds
 *         #: r in C semantics can be negative; normalize to 0 <= r < US_SECOND
*/
      goto __pyx_L3_continue;

      /* "utils.pxd":9562
 *         v = arr_ptr[i]
 *         # Preserve NaT
 *         if v == LLONG_MIN:             # <<<<<<<<<<<<<<
 *             out_ptr[i] = math.NAN
 *             continue
*/
    }

    /* "utils.pxd":9568
 *         #: r in C semantics can be negative; normalize to 0 <= r < US_SECOND
 *         with cython.cdivision(True):
 *             r = v % US_SECOND             # <<<<<<<<<<<<<<
 *             if r < 0:
 *                 r += US_SECOND
*/
    __pyx_v_r = (__pyx_v_v % __pyx_v_7cytimes_5utils_US_SECOND);

    /* "utils.pxd":9569
 *         with cython.cdivision(True):
 *             r = v % US_SECOND
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 r += US_SECOND
 *             #: (v - r) is an exact multiple of US_SECOND
*/
    __pyx_t_7 = (__pyx_v_r < 0);
    if (__pyx_t_7) {

      /* "utils.pxd":9570
 *             r = v % US_SECOND
 *             if r < 0:
 *                 r += US_SECOND             # <<<<<<<<<<<<<<
 *             #: (v - r) is an exact multiple of US_SECOND
 *             q = (v - r) / US_SECOND
*/
      __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_US_SECOND);

      /* "utils.pxd":9569
 *         with cython.cdivision(True):
 *             r = v % US_SECOND
 *             if r < 0:             # <<<<<<<<<<<<<<
 *                 r += US_SECOND
 *             #: (v - r) is an exact multiple of US_SECOND
*/
    }

    /* "utils.pxd":9572
 *                 r += US_SECOND
 *             #: (v - r) is an exact multiple of US_SECOND
 *             q = (v - r) / US_SECOND             # <<<<<<<<<<<<<<
 *         #: Combine whole seconds and sub-second fraction
 *         out_ptr[i] = (<np.npy_float64> r * inv_us) + <np.npy_float64> q
*/
    __pyx_v_q = ((__pyx_v_v - __pyx_v_r) / ((npy_int64)__pyx_v_7cytimes_5utils_US_SECOND));

    /* "utils.pxd":9574
 *             q = (v - r) / US_SECOND
 *         #: Combine whole seconds and sub-second fraction
 *         out_ptr[i] = (<np.npy_float64> r * inv_us) + <np.npy_float64> q             # <<<<<<<<<<<<<<
 * 
 *     return out
*/
    (__pyx_v_out_ptr[__pyx_v_i]) = ((((npy_float64)__pyx_v_r) * __pyx_v_inv_us) + ((npy_float64)__pyx_v_q));
    __pyx_L3_continue:;
  }

  /* "utils.pxd":9576
 *         out_ptr[i] = (<np.npy_float64> r * inv_us) + <np.npy_float64> q
 * 
 *     return out             # <<<<<<<<<<<<<<
 * 
 * # . conversion: unit
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_out);
  __pyx_r = __pyx_v_out;
  goto __pyx_L0;

  /* "utils.pxd":9523
 * 
 * # . conversion: float64
 * cdef inline np.ndarray dt64arr_to_ts(np.ndarray arr, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[datetime64[*]] to float64 Unix timestamps `<'ndarray[float64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_to_ts", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_out);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9579
 * 
 * # . conversion: unit
 * cdef inline np.ndarray dt64arr_as_unit(np.ndarray arr, str as_unit, int arr_reso=-1, bint limit=False, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D datetime64 array to a specifc NumPy datetime64 unit `<'ndarray[datetime64]'>`
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_as_unit(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_as_unit, struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_unit *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_limit = ((int)0);
  int __pyx_v_copy = ((int)1);
  int __pyx_v_is_dt64;
  int __pyx_v_as_reso;
  int __pyx_v_is_ns_safe;
  PyObject *__pyx_v_as_dtype = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  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;
  PyObject *__pyx_t_10[5];
  size_t __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_us __pyx_t_14;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ns __pyx_t_15;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_16;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_17;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_ms __pyx_t_18;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_s __pyx_t_19;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_m __pyx_t_20;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_h __pyx_t_21;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_22;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_W __pyx_t_23;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_24;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_25;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_as_unit", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_limit = __pyx_optional_args->limit;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":9611
 *     """
 *     # Guard
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 * 
*/
  __pyx_t_1 = (__pyx_v_as_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":9612
 *     # Guard
 *     if as_unit is None:
 *         _raise_invalid_nptime_str_unit_error(as_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Get array resolution
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_as_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9612, __pyx_L1_error)

    /* "utils.pxd":9611
 *     """
 *     # Guard
 *     if as_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(as_unit)
 * 
*/
  }

  /* "utils.pxd":9615
 * 
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME             # <<<<<<<<<<<<<<
 *     if arr_reso < 0:
 *         if not is_dt64:
*/
  __pyx_v_is_dt64 = (PyArray_TYPE(__pyx_v_arr) == NPY_DATETIME);

  /* "utils.pxd":9616
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9617
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (!__pyx_v_is_dt64);
    if (__pyx_t_1) {

      /* "utils.pxd":9618
 *     if arr_reso < 0:
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9618, __pyx_L1_error)

      /* "utils.pxd":9617
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9619
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Parse target resolution
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9619, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9616
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9622
 * 
 *     # Parse target resolution
 *     cdef int as_reso = nptime_unit_str2int(as_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Check limit
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_nptime_unit_str2int(__pyx_v_as_unit); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9622, __pyx_L1_error)
  __pyx_v_as_reso = __pyx_t_2;

  /* "utils.pxd":9625
 * 
 *     # Check limit
 *     if limit:             # <<<<<<<<<<<<<<
 *         if as_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
*/
  if (__pyx_v_limit) {

    /* "utils.pxd":9626
 *     # Check limit
 *     if limit:
 *         if as_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
    switch (__pyx_v_as_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9627
 *     if limit:
 *         if as_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
*/
      case NPY_FR_us:

      /* "utils.pxd":9628
 *         if as_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
*/
      case NPY_FR_ms:

      /* "utils.pxd":9629
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ) or arr_reso not in (
*/
      case NPY_FR_s:

      /* "utils.pxd":9626
 *     # Check limit
 *     if limit:
 *         if as_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
      __pyx_t_3 = 0;
      break;
      default:
      __pyx_t_3 = 1;
      break;
    }
    __pyx_t_4 = __pyx_t_3;
    if (!__pyx_t_4) {
    } else {
      __pyx_t_1 = __pyx_t_4;
      goto __pyx_L8_bool_binop_done;
    }

    /* "utils.pxd":9631
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ) or arr_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9632
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ) or arr_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
*/
      case NPY_FR_us:

      /* "utils.pxd":9633
 *         ) or arr_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
*/
      case NPY_FR_ms:

      /* "utils.pxd":9634
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ):
*/
      case NPY_FR_s:

      /* "utils.pxd":9631
 *             np.NPY_DATETIMEUNIT.NPY_FR_ms,
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ) or arr_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
      __pyx_t_4 = 0;
      break;
      default:
      __pyx_t_4 = 1;
      break;
    }
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_1 = __pyx_t_3;
    __pyx_L8_bool_binop_done:;

    /* "utils.pxd":9626
 *     # Check limit
 *     if limit:
 *         if as_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
    if (unlikely(__pyx_t_1)) {

      /* "utils.pxd":9637
 *             np.NPY_DATETIMEUNIT.NPY_FR_s,
 *         ):
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Cannot convert array from datetime64[%s] to datetime64[%s].\n"
 *                 "Conversion limits to units between: 's', 'ms', 'us', 'ns'."
*/
      __pyx_t_6 = NULL;

      /* "utils.pxd":9640
 *                 "Cannot convert array from datetime64[%s] to datetime64[%s].\n"
 *                 "Conversion limits to units between: 's', 'ms', 'us', 'ns'."
 *                 % (nptime_unit_int2str(arr_reso), nptime_unit_int2str(as_reso))             # <<<<<<<<<<<<<<
 *             )
 * 
*/
      __pyx_t_7 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_arr_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 9640, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 9640, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_as_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 9640, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyUnicode_Unicode(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 9640, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_10[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert_array_from_dateti;
      __pyx_t_10[1] = __pyx_t_8;
      __pyx_t_10[2] = __pyx_mstate_global->__pyx_kp_u_to_datetime64;
      __pyx_t_10[3] = __pyx_t_9;
      __pyx_t_10[4] = __pyx_mstate_global->__pyx_kp_u_Conversion_limits_to_units_betw;

      /* "utils.pxd":9638
 *         ):
 *             raise ValueError(
 *                 "Cannot convert array from datetime64[%s] to datetime64[%s].\n"             # <<<<<<<<<<<<<<
 *                 "Conversion limits to units between: 's', 'ms', 'us', 'ns'."
 *                 % (nptime_unit_int2str(arr_reso), nptime_unit_int2str(as_reso))
*/
      __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_10, 5, 37 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 16 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 61, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_9));
      if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 9638, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_11 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
        __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (__pyx_t_11*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(5, 9637, __pyx_L1_error)

      /* "utils.pxd":9626
 *     # Check limit
 *     if limit:
 *         if as_reso not in (             # <<<<<<<<<<<<<<
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
 *             np.NPY_DATETIMEUNIT.NPY_FR_us,
*/
    }

    /* "utils.pxd":9625
 * 
 *     # Check limit
 *     if limit:             # <<<<<<<<<<<<<<
 *         if as_reso not in (
 *             np.NPY_DATETIMEUNIT.NPY_FR_ns,
*/
  }

  /* "utils.pxd":9644
 * 
 *     # Fast-path: same unit
 *     if arr_reso == as_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag
*/
  __pyx_t_1 = (__pyx_v_arr_reso == __pyx_v_as_reso);
  if (__pyx_t_1) {

    /* "utils.pxd":9645
 *     # Fast-path: same unit
 *     if arr_reso == as_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    if (__pyx_v_is_dt64) {

      /* "utils.pxd":9646
 *     if arr_reso == as_reso:
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag             # <<<<<<<<<<<<<<
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_12.__pyx_n = 1;
      __pyx_t_12.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, 0, &__pyx_t_12)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9646, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9645
 *     # Fast-path: same unit
 *     if arr_reso == as_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    }

    /* "utils.pxd":9647
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 * 
 *     # To nanosecond [ns]
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 9647, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9647, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9647, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9644
 * 
 *     # Fast-path: same unit
 *     if arr_reso == as_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor 'copy' flag
*/
  }

  /* "utils.pxd":9651
 *     # To nanosecond [ns]
 *     cdef bint is_ns_safe
 *     cdef object as_dtype = None             # <<<<<<<<<<<<<<
 *     if as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         # check 'ns' overflow
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_as_dtype = Py_None;

  /* "utils.pxd":9652
 *     cdef bint is_ns_safe
 *     cdef object as_dtype = None
 *     if as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         # check 'ns' overflow
 *         is_ns_safe = is_dt64arr_ns_safe(arr, arr_reso)
*/
  switch (__pyx_v_as_reso) {
    case NPY_FR_ns:

    /* "utils.pxd":9654
 *     if as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         # check 'ns' overflow
 *         is_ns_safe = is_dt64arr_ns_safe(arr, arr_reso)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [ns]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.arr_reso = __pyx_v_arr_reso;
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9654, __pyx_L1_error)
    __pyx_v_is_ns_safe = __pyx_t_1;

    /* "utils.pxd":9656
 *         is_ns_safe = is_dt64arr_ns_safe(arr, arr_reso)
 *         # my_unit [us] -> [ns]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             if not is_ns_safe:
 *                 if is_dt64:
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_us:

      /* "utils.pxd":9657
 *         # my_unit [us] -> [ns]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             if not is_ns_safe:             # <<<<<<<<<<<<<<
 *                 if is_dt64:
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag
*/
      __pyx_t_1 = (!__pyx_v_is_ns_safe);
      if (__pyx_t_1) {

        /* "utils.pxd":9658
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             if not is_ns_safe:
 *                 if is_dt64:             # <<<<<<<<<<<<<<
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
        if (__pyx_v_is_dt64) {

          /* "utils.pxd":9659
 *             if not is_ns_safe:
 *                 if is_dt64:
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag             # <<<<<<<<<<<<<<
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))
 *         # my_unit [M, Y] -> [ns]
*/
          __Pyx_XDECREF((PyObject *)__pyx_r);
          __pyx_t_12.__pyx_n = 1;
          __pyx_t_12.copy = __pyx_v_copy;
          __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, 0, &__pyx_t_12)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9659, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_r = ((PyArrayObject *)__pyx_t_5);
          __pyx_t_5 = 0;
          goto __pyx_L0;

          /* "utils.pxd":9658
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             if not is_ns_safe:
 *                 if is_dt64:             # <<<<<<<<<<<<<<
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
        }

        /* "utils.pxd":9660
 *                 if is_dt64:
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [ns]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 9660, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_7};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9660, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9660, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9657
 *         # my_unit [us] -> [ns]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             if not is_ns_safe:             # <<<<<<<<<<<<<<
 *                 if is_dt64:
 *                     return arr_add(arr, 0, copy)  # honor 'copy' flag
*/
      }

      /* "utils.pxd":9656
 *         is_ns_safe = is_dt64arr_ns_safe(arr, arr_reso)
 *         # my_unit [us] -> [ns]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             if not is_ns_safe:
 *                 if is_dt64:
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9662
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))
 *         # my_unit [M, Y] -> [ns]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             if not is_ns_safe:
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9663
 *         # my_unit [M, Y] -> [ns]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             if not is_ns_safe:             # <<<<<<<<<<<<<<
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_1 = (!__pyx_v_is_ns_safe);
      if (__pyx_t_1) {

        /* "utils.pxd":9664
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             if not is_ns_safe:
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             arr = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
*/
        __pyx_t_14.__pyx_n = 3;
        __pyx_t_14.arr_reso = __pyx_v_arr_reso;
        __pyx_t_14.offset = 0;
        __pyx_t_14.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(__pyx_v_arr, &__pyx_t_14)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9664, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9665
 *             if not is_ns_safe:
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_NS)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9665, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9665, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9663
 *         # my_unit [M, Y] -> [ns]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             if not is_ns_safe:             # <<<<<<<<<<<<<<
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":9666
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)
 *             arr = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_NS)
 *         # Fallback [rest] -> [ns]
*/
      __pyx_t_15.__pyx_n = 3;
      __pyx_t_15.arr_reso = __pyx_v_arr_reso;
      __pyx_t_15.offset = 0;
      __pyx_t_15.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ns(__pyx_v_arr, &__pyx_t_15)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9666, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9667
 *                 return arr.astype(DT64_DTYPE_US)
 *             arr = dt64arr_as_int64_ns(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [ns]
 *         as_dtype = DT64_DTYPE_NS if is_ns_safe else DT64_DTYPE_US
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9667, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9667, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9662
 *                 return arr.astype(nptime_unit_int2dt64(arr_reso))
 *         # my_unit [M, Y] -> [ns]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             if not is_ns_safe:
 *                 arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9669
 *             return arr.astype(DT64_DTYPE_NS)
 *         # Fallback [rest] -> [ns]
 *         as_dtype = DT64_DTYPE_NS if is_ns_safe else DT64_DTYPE_US             # <<<<<<<<<<<<<<
 * 
 *     # To microsecond [us]
*/
    if (__pyx_v_is_ns_safe) {
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_NS);
      __pyx_t_5 = __pyx_v_7cytimes_5utils_DT64_DTYPE_NS;
    } else {
      __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_US);
      __pyx_t_5 = __pyx_v_7cytimes_5utils_DT64_DTYPE_US;
    }
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "utils.pxd":9652
 *     cdef bint is_ns_safe
 *     cdef object as_dtype = None
 *     if as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         # check 'ns' overflow
 *         is_ns_safe = is_dt64arr_ns_safe(arr, arr_reso)
*/
    break;
    case NPY_FR_us:

    /* "utils.pxd":9674
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9675
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9675, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_1);
      if (__pyx_t_3) {

        /* "utils.pxd":9676
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9676, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9677
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *         # my_unit [M, Y] -> [us]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9677, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9678
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [us]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9678, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9678, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9675
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
*/
      }

      /* "utils.pxd":9674
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9680
 *                 return arr.astype(DT64_DTYPE_US)
 *         # my_unit [M, Y] -> [us]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_US)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9681
 *         # my_unit [M, Y] -> [us]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # Fallback [rest] -> [us]
*/
      __pyx_t_14.__pyx_n = 3;
      __pyx_t_14.arr_reso = __pyx_v_arr_reso;
      __pyx_t_14.offset = 0;
      __pyx_t_14.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_us(__pyx_v_arr, &__pyx_t_14)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9681, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9682
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [us]
 *         as_dtype = DT64_DTYPE_US
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9682, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9682, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9680
 *                 return arr.astype(DT64_DTYPE_US)
 *         # my_unit [M, Y] -> [us]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_us(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9684
 *             return arr.astype(DT64_DTYPE_US)
 *         # Fallback [rest] -> [us]
 *         as_dtype = DT64_DTYPE_US             # <<<<<<<<<<<<<<
 * 
 *     # To millisecond [ms]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_US);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_US);

    /* "utils.pxd":9672
 * 
 *     # To microsecond [us]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":9689
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9690
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MILLISECOND, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 9690, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_3);
      if (__pyx_t_1) {

        /* "utils.pxd":9691
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_MS)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9691, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9692
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [M, Y] -> [ms]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9692, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9693
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [ms]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9693, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9693, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9690
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MILLISECOND, 0, False)
*/
      }

      /* "utils.pxd":9689
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9695
 *                 return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [M, Y] -> [ms]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9696
 *         # my_unit [M, Y] -> [ms]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # Fallback [rest] -> [ms]
*/
      __pyx_t_18.__pyx_n = 3;
      __pyx_t_18.arr_reso = __pyx_v_arr_reso;
      __pyx_t_18.offset = 0;
      __pyx_t_18.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_ms(__pyx_v_arr, &__pyx_t_18)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9696, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9697
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [ms]
 *         as_dtype = DT64_DTYPE_MS
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9697, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9697, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9695
 *                 return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [M, Y] -> [ms]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_ms(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9699
 *             return arr.astype(DT64_DTYPE_MS)
 *         # Fallback [rest] -> [ms]
 *         as_dtype = DT64_DTYPE_MS             # <<<<<<<<<<<<<<
 * 
 *     # To second [s]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MS);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS);

    /* "utils.pxd":9687
 * 
 *     # To millisecond [ms]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":9704
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9705
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_SECOND, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9705, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_1);
      if (__pyx_t_3) {

        /* "utils.pxd":9706
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_SS)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9706, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9707
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [M, Y] -> [s]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9707, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9708
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [s]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9708, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9708, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9705
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_SECOND, 0, False)
*/
      }

      /* "utils.pxd":9704
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9710
 *                 return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [M, Y] -> [s]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_s(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9711
 *         # my_unit [M, Y] -> [s]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_s(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # Fallback [rest] -> [s]
*/
      __pyx_t_19.__pyx_n = 3;
      __pyx_t_19.arr_reso = __pyx_v_arr_reso;
      __pyx_t_19.offset = 0;
      __pyx_t_19.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_s(__pyx_v_arr, &__pyx_t_19)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9711, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9712
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_s(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [s]
 *         as_dtype = DT64_DTYPE_SS
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9712, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9712, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9710
 *                 return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [M, Y] -> [s]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_s(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9714
 *             return arr.astype(DT64_DTYPE_SS)
 *         # Fallback [rest] -> [s]
 *         as_dtype = DT64_DTYPE_SS             # <<<<<<<<<<<<<<
 * 
 *     # To minute [m]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_SS);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS);

    /* "utils.pxd":9702
 * 
 *     # To second [s]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":9719
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9720
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MINUTE, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 9720, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_3);
      if (__pyx_t_1) {

        /* "utils.pxd":9721
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_MI)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9721, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9722
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [M, Y] -> [m]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9722, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9723
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [m]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9723, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9723, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9720
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_MINUTE, 0, False)
*/
      }

      /* "utils.pxd":9719
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9725
 *                 return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [M, Y] -> [m]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_m(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9726
 *         # my_unit [M, Y] -> [m]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_m(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # Fallback [rest] -> [m]
*/
      __pyx_t_20.__pyx_n = 3;
      __pyx_t_20.arr_reso = __pyx_v_arr_reso;
      __pyx_t_20.offset = 0;
      __pyx_t_20.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_m(__pyx_v_arr, &__pyx_t_20)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9727
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_m(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [m]
 *         as_dtype = DT64_DTYPE_MI
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9727, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9727, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9725
 *                 return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [M, Y] -> [m]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_m(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9729
 *             return arr.astype(DT64_DTYPE_MI)
 *         # Fallback [rest] -> [m]
 *         as_dtype = DT64_DTYPE_MI             # <<<<<<<<<<<<<<
 * 
 *     # To hour [h]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MI);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI);

    /* "utils.pxd":9717
 * 
 *     # To minute [m]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":9734
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9735
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_HOUR, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9735, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_1);
      if (__pyx_t_3) {

        /* "utils.pxd":9736
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_HH)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9736, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9737
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_HH)
 *         # my_unit [M, Y] -> [h]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9737, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9738
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [h]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9738, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9738, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9735
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_HOUR, 0, False)
*/
      }

      /* "utils.pxd":9734
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9740
 *                 return arr.astype(DT64_DTYPE_HH)
 *         # my_unit [M, Y] -> [h]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_h(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_HH)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9741
 *         # my_unit [M, Y] -> [h]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_h(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_HH)
 *         # Fallback [rest] -> [h]
*/
      __pyx_t_21.__pyx_n = 3;
      __pyx_t_21.arr_reso = __pyx_v_arr_reso;
      __pyx_t_21.offset = 0;
      __pyx_t_21.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_h(__pyx_v_arr, &__pyx_t_21)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9742
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_h(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [h]
 *         as_dtype = DT64_DTYPE_HH
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9742, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9742, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9740
 *                 return arr.astype(DT64_DTYPE_HH)
 *         # my_unit [M, Y] -> [h]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_h(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_HH)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9744
 *             return arr.astype(DT64_DTYPE_HH)
 *         # Fallback [rest] -> [h]
 *         as_dtype = DT64_DTYPE_HH             # <<<<<<<<<<<<<<
 * 
 *     # To day [D]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_HH);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH);

    /* "utils.pxd":9732
 * 
 *     # To hour [h]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":9749
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9750
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 9750, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_3);
      if (__pyx_t_1) {

        /* "utils.pxd":9751
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_DD)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9751, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9752
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_DD)
 *         # my_unit [M, Y] -> [D]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9752, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9753
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_DD)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [D]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_DD};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9753, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9753, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9750
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY, 0, False)
*/
      }

      /* "utils.pxd":9749
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9755
 *                 return arr.astype(DT64_DTYPE_DD)
 *         # my_unit [M, Y] -> [D]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_DD)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9756
 *         # my_unit [M, Y] -> [D]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_D(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_DD)
 *         # Fallback [rest] -> [D]
*/
      __pyx_t_22.__pyx_n = 3;
      __pyx_t_22.arr_reso = __pyx_v_arr_reso;
      __pyx_t_22.offset = 0;
      __pyx_t_22.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_22)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9756, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9757
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_DD)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [D]
 *         as_dtype = DT64_DTYPE_DD
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_DD};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9757, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9757, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9755
 *                 return arr.astype(DT64_DTYPE_DD)
 *         # my_unit [M, Y] -> [D]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_D(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_DD)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9759
 *             return arr.astype(DT64_DTYPE_DD)
 *         # Fallback [rest] -> [D]
 *         as_dtype = DT64_DTYPE_DD             # <<<<<<<<<<<<<<
 * 
 *     # To week [W]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_DD);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_DD);

    /* "utils.pxd":9747
 * 
 *     # To day [D]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_W:

    /* "utils.pxd":9764
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         # my_unit [ns] -> [W]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":9765
 *         # my_unit [ns] -> [W]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY * 7, 0, False)
*/
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_13); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9765, __pyx_L1_error)
      __pyx_t_3 = (!__pyx_t_1);
      if (__pyx_t_3) {

        /* "utils.pxd":9766
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_DAY * 7, 0, False)
 *                 return arr.astype(DT64_DTYPE_WW)
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.copy = __pyx_v_copy;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9766, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9767
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY * 7, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_WW)
 *         # my_unit [M, Y] -> [W]
*/
        __pyx_t_17.__pyx_n = 2;
        __pyx_t_17.offset = 0;
        __pyx_t_17.copy = 0;
        __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, (__pyx_v_7cytimes_5utils_NS_DAY * 7), &__pyx_t_17)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9767, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
        __pyx_t_5 = 0;

        /* "utils.pxd":9768
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY * 7, 0, False)
 *                 return arr.astype(DT64_DTYPE_WW)             # <<<<<<<<<<<<<<
 *         # my_unit [M, Y] -> [W]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_7 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_7);
        __pyx_t_11 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_WW};
          __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9768, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
        }
        if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9768, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_5);
        __pyx_t_5 = 0;
        goto __pyx_L0;

        /* "utils.pxd":9765
 *         # my_unit [ns] -> [W]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_assure_int64(arr, copy)
 *                 arr = arr_div_floor(arr, NS_DAY * 7, 0, False)
*/
      }

      /* "utils.pxd":9764
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:
 *         # my_unit [ns] -> [W]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_assure_int64(arr, copy)
*/
      break;
      case NPY_FR_M:

      /* "utils.pxd":9770
 *                 return arr.astype(DT64_DTYPE_WW)
 *         # my_unit [M, Y] -> [W]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_W(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_WW)
*/
      case NPY_FR_Y:

      /* "utils.pxd":9771
 *         # my_unit [M, Y] -> [W]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_W(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_WW)
 *         # Fallback [rest] -> [W]
*/
      __pyx_t_23.__pyx_n = 3;
      __pyx_t_23.arr_reso = __pyx_v_arr_reso;
      __pyx_t_23.offset = 0;
      __pyx_t_23.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_W(__pyx_v_arr, &__pyx_t_23)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9771, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9772
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_W(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_WW)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [W]
 *         as_dtype = DT64_DTYPE_WW
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_WW};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9772, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9772, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9770
 *                 return arr.astype(DT64_DTYPE_WW)
 *         # my_unit [M, Y] -> [W]
 *         elif arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_M, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_W(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_WW)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9774
 *             return arr.astype(DT64_DTYPE_WW)
 *         # Fallback [rest] -> [W]
 *         as_dtype = DT64_DTYPE_WW             # <<<<<<<<<<<<<<
 * 
 *     # To month [M]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_WW);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_WW);

    /* "utils.pxd":9762
 * 
 *     # To week [W]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [W]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_M:

    /* "utils.pxd":9779
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         # my_unit [ns, Y] -> [M]
 *         if arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_ns, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MM)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:
      case NPY_FR_Y:

      /* "utils.pxd":9780
 *         # my_unit [ns, Y] -> [M]
 *         if arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_ns, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_M(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MM)
 *         # Fallback [rest] -> [ms]
*/
      __pyx_t_24.__pyx_n = 3;
      __pyx_t_24.arr_reso = __pyx_v_arr_reso;
      __pyx_t_24.offset = 0;
      __pyx_t_24.copy = __pyx_v_copy;
      __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_24)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9780, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
      __pyx_t_5 = 0;

      /* "utils.pxd":9781
 *         if arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_ns, np.NPY_DATETIMEUNIT.NPY_FR_Y):
 *             arr = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MM)             # <<<<<<<<<<<<<<
 *         # Fallback [rest] -> [ms]
 *         as_dtype = DT64_DTYPE_MM
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_7 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_t_11 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_MM};
        __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9781, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
      }
      if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9781, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_5);
      __pyx_t_5 = 0;
      goto __pyx_L0;

      /* "utils.pxd":9779
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:
 *         # my_unit [ns, Y] -> [M]
 *         if arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_ns, np.NPY_DATETIMEUNIT.NPY_FR_Y):             # <<<<<<<<<<<<<<
 *             arr = dt64arr_as_int64_M(arr, arr_reso, 0, copy)
 *             return arr.astype(DT64_DTYPE_MM)
*/
      break;
      default: break;
    }

    /* "utils.pxd":9783
 *             return arr.astype(DT64_DTYPE_MM)
 *         # Fallback [rest] -> [ms]
 *         as_dtype = DT64_DTYPE_MM             # <<<<<<<<<<<<<<
 * 
 *     # To year [Y]
*/
    __Pyx_INCREF(__pyx_v_7cytimes_5utils_DT64_DTYPE_MM);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_v_7cytimes_5utils_DT64_DTYPE_MM);

    /* "utils.pxd":9777
 * 
 *     # To month [M]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:             # <<<<<<<<<<<<<<
 *         # my_unit [ns, Y] -> [M]
 *         if arr_reso in (np.NPY_DATETIMEUNIT.NPY_FR_ns, np.NPY_DATETIMEUNIT.NPY_FR_Y):
*/
    break;
    case NPY_FR_Y:

    /* "utils.pxd":9787
 *     # To year [Y]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)             # <<<<<<<<<<<<<<
 *         return arr.astype(DT64_DTYPE_YY)
 * 
*/
    __pyx_t_25.__pyx_n = 3;
    __pyx_t_25.arr_reso = __pyx_v_arr_reso;
    __pyx_t_25.offset = 0;
    __pyx_t_25.copy = __pyx_v_copy;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_25)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9787, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "utils.pxd":9788
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:
 *         arr = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         return arr.astype(DT64_DTYPE_YY)             # <<<<<<<<<<<<<<
 * 
 *     # Fallback
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_v_7cytimes_5utils_DT64_DTYPE_YY};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9788, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9788, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9786
 * 
 *     # To year [Y]
 *     elif as_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:             # <<<<<<<<<<<<<<
 *         arr = dt64arr_as_int64_Y(arr, arr_reso, 0, copy)
 *         return arr.astype(DT64_DTYPE_YY)
*/
    break;
    default: break;
  }

  /* "utils.pxd":9791
 * 
 *     # Fallback
 *     if not is_dt64:             # <<<<<<<<<<<<<<
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))
 *     if as_dtype is None:
*/
  __pyx_t_3 = (!__pyx_v_is_dt64);
  if (__pyx_t_3) {

    /* "utils.pxd":9792
 *     # Fallback
 *     if not is_dt64:
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 *     if as_dtype is None:
 *         as_dtype = nptime_unit_int2dt64(as_reso)
*/
    __pyx_t_7 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_7);
    __pyx_t_6 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 9792, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_6};
      __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9792, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
    }
    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9792, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_5));
    __pyx_t_5 = 0;

    /* "utils.pxd":9791
 * 
 *     # Fallback
 *     if not is_dt64:             # <<<<<<<<<<<<<<
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))
 *     if as_dtype is None:
*/
  }

  /* "utils.pxd":9793
 *     if not is_dt64:
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))
 *     if as_dtype is None:             # <<<<<<<<<<<<<<
 *         as_dtype = nptime_unit_int2dt64(as_reso)
 *     return arr.astype(as_dtype)
*/
  __pyx_t_3 = (__pyx_v_as_dtype == Py_None);
  if (__pyx_t_3) {

    /* "utils.pxd":9794
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))
 *     if as_dtype is None:
 *         as_dtype = nptime_unit_int2dt64(as_reso)             # <<<<<<<<<<<<<<
 *     return arr.astype(as_dtype)
 * 
*/
    __pyx_t_5 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_as_reso); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF_SET(__pyx_v_as_dtype, __pyx_t_5);
    __pyx_t_5 = 0;

    /* "utils.pxd":9793
 *     if not is_dt64:
 *         arr = arr.astype(nptime_unit_int2dt64(arr_reso))
 *     if as_dtype is None:             # <<<<<<<<<<<<<<
 *         as_dtype = nptime_unit_int2dt64(as_reso)
 *     return arr.astype(as_dtype)
*/
  }

  /* "utils.pxd":9795
 *     if as_dtype is None:
 *         as_dtype = nptime_unit_int2dt64(as_reso)
 *     return arr.astype(as_dtype)             # <<<<<<<<<<<<<<
 * 
 * # . manipulation
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_6 = ((PyObject *)__pyx_v_arr);
  __Pyx_INCREF(__pyx_t_6);
  __pyx_t_11 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_as_dtype};
    __pyx_t_5 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_11, (2-__pyx_t_11) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 9795, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9795, __pyx_L1_error)
  __pyx_r = ((PyArrayObject *)__pyx_t_5);
  __pyx_t_5 = 0;
  goto __pyx_L0;

  /* "utils.pxd":9579
 * 
 * # . conversion: unit
 * cdef inline np.ndarray dt64arr_as_unit(np.ndarray arr, str as_unit, int arr_reso=-1, bint limit=False, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D datetime64 array to a specifc NumPy datetime64 unit `<'ndarray[datetime64]'>`
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_as_unit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_as_dtype);
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9798
 * 
 * # . manipulation
 * cdef inline np.ndarray dt64arr_add_delta(np.ndarray arr,             # <<<<<<<<<<<<<<
 *     np.npy_int64 years=0, np.npy_int64 quarters=0, np.npy_int64 months=0, np.npy_int64 weeks=0, np.npy_int64 days=0,
 *     np.npy_int64 hours=0, np.npy_int64 minutes=0, np.npy_int64 seconds=0, np.npy_int64 milliseconds=0,
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_add_delta(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_dt64arr_add_delta *__pyx_optional_args) {
  npy_int64 __pyx_v_years = ((npy_int64)0);
  npy_int64 __pyx_v_quarters = ((npy_int64)0);
  npy_int64 __pyx_v_months = ((npy_int64)0);
  npy_int64 __pyx_v_weeks = ((npy_int64)0);
  npy_int64 __pyx_v_days = ((npy_int64)0);
  npy_int64 __pyx_v_hours = ((npy_int64)0);
  npy_int64 __pyx_v_minutes = ((npy_int64)0);
  npy_int64 __pyx_v_seconds = ((npy_int64)0);
  npy_int64 __pyx_v_milliseconds = ((npy_int64)0);
  npy_int64 __pyx_v_microseconds = ((npy_int64)0);
  npy_int64 __pyx_v_nanoseconds = ((npy_int64)0);
  int __pyx_v_arr_reso = ((int)-1);
  PyArrayObject *__pyx_v_dates = 0;
  npy_int64 __pyx_v_delta;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_v_times = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date __pyx_t_4;
  npy_int64 __pyx_t_5;
  int __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_times __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add_arr __pyx_t_11;
  size_t __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_13;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_add_delta", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_years = __pyx_optional_args->years;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_quarters = __pyx_optional_args->quarters;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_months = __pyx_optional_args->months;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_weeks = __pyx_optional_args->weeks;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_days = __pyx_optional_args->days;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_hours = __pyx_optional_args->hours;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_minutes = __pyx_optional_args->minutes;
                  if (__pyx_optional_args->__pyx_n > 7) {
                    __pyx_v_seconds = __pyx_optional_args->seconds;
                    if (__pyx_optional_args->__pyx_n > 8) {
                      __pyx_v_milliseconds = __pyx_optional_args->milliseconds;
                      if (__pyx_optional_args->__pyx_n > 9) {
                        __pyx_v_microseconds = __pyx_optional_args->microseconds;
                        if (__pyx_optional_args->__pyx_n > 10) {
                          __pyx_v_nanoseconds = __pyx_optional_args->nanoseconds;
                          if (__pyx_optional_args->__pyx_n > 11) {
                            __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  /* "utils.pxd":9833
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9834
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9835
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9835, __pyx_L1_error)

      /* "utils.pxd":9834
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9836
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'ns'
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9836, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9833
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9839
 * 
 *     # Resolution: 'ns'
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return _dt64arr_ns_add_delta(
 *             arr, years, quarters, months, weeks, days,
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":9840
 *     # Resolution: 'ns'
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         return _dt64arr_ns_add_delta(             # <<<<<<<<<<<<<<
 *             arr, years, quarters, months, weeks, days,
 *             hours, minutes, seconds, milliseconds,
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);

    /* "utils.pxd":9843
 *             arr, years, quarters, months, weeks, days,
 *             hours, minutes, seconds, milliseconds,
 *             microseconds, nanoseconds             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_ns_add_delta(__pyx_v_arr, __pyx_v_years, __pyx_v_quarters, __pyx_v_months, __pyx_v_weeks, __pyx_v_days, __pyx_v_hours, __pyx_v_minutes, __pyx_v_seconds, __pyx_v_milliseconds, __pyx_v_microseconds, __pyx_v_nanoseconds)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9840, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9839
 * 
 *     # Resolution: 'ns'
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         return _dt64arr_ns_add_delta(
 *             arr, years, quarters, months, weeks, days,
*/
  }

  /* "utils.pxd":9847
 * 
 *     # Adjust dates -> int64[D]
 *     cdef np.ndarray dates = _dt64arr_add_delta_date(arr, years, quarters, months, weeks, days, arr_reso)             # <<<<<<<<<<<<<<
 * 
 *     # Total time delta in 'us'
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.arr_reso = __pyx_v_arr_reso;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_add_delta_date(__pyx_v_arr, __pyx_v_years, __pyx_v_quarters, __pyx_v_months, __pyx_v_weeks, __pyx_v_days, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9847, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dates = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "utils.pxd":9851
 *     # Total time delta in 'us'
 *     cdef np.npy_int64 delta, q, r
 *     if nanoseconds != 0:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND
*/
  __pyx_t_1 = (__pyx_v_nanoseconds != 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9853
 *     if nanoseconds != 0:
 *         with cython.cdivision(True):
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND             # <<<<<<<<<<<<<<
 *             microseconds += (q - 1 if r < 0 else q)
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0:
*/
    __pyx_v_q = (__pyx_v_nanoseconds / ((npy_int64)__pyx_v_7cytimes_5utils_NS_MICROSECOND));
    __pyx_v_r = (__pyx_v_nanoseconds % __pyx_v_7cytimes_5utils_NS_MICROSECOND);

    /* "utils.pxd":9854
 *         with cython.cdivision(True):
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND
 *             microseconds += (q - 1 if r < 0 else q)             # <<<<<<<<<<<<<<
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0:
 *         delta = (
*/
    __pyx_t_1 = (__pyx_v_r < 0);
    if (__pyx_t_1) {
      __pyx_t_5 = (__pyx_v_q - 1);
    } else {
      __pyx_t_5 = __pyx_v_q;
    }
    __pyx_v_microseconds = (__pyx_v_microseconds + __pyx_t_5);

    /* "utils.pxd":9851
 *     # Total time delta in 'us'
 *     cdef np.npy_int64 delta, q, r
 *     if nanoseconds != 0:             # <<<<<<<<<<<<<<
 *         with cython.cdivision(True):
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND
*/
  }

  /* "utils.pxd":9855
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND
 *             microseconds += (q - 1 if r < 0 else q)
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0:             # <<<<<<<<<<<<<<
 *         delta = (
 *             (hours * 3600 + minutes * 60 + seconds) * US_SECOND
*/
  __pyx_t_6 = (__pyx_v_hours != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_minutes != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_seconds != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_milliseconds != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_microseconds != 0);
  __pyx_t_1 = __pyx_t_6;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":9859
 *             (hours * 3600 + minutes * 60 + seconds) * US_SECOND
 *             + milliseconds * US_MILLISECOND
 *             + microseconds             # <<<<<<<<<<<<<<
 *         )
 *     else:
*/
    __pyx_v_delta = ((((((__pyx_v_hours * 0xE10) + (__pyx_v_minutes * 60)) + __pyx_v_seconds) * __pyx_v_7cytimes_5utils_US_SECOND) + (__pyx_v_milliseconds * __pyx_v_7cytimes_5utils_US_MILLISECOND)) + __pyx_v_microseconds);

    /* "utils.pxd":9855
 *             q = nanoseconds / NS_MICROSECOND; r = nanoseconds % NS_MICROSECOND
 *             microseconds += (q - 1 if r < 0 else q)
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0:             # <<<<<<<<<<<<<<
 *         delta = (
 *             (hours * 3600 + minutes * 60 + seconds) * US_SECOND
*/
    goto __pyx_L7;
  }

  /* "utils.pxd":9862
 *         )
 *     else:
 *         delta = 0             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'us'
*/
  /*else*/ {
    __pyx_v_delta = 0;
  }
  __pyx_L7:;

  /* "utils.pxd":9866
 *     # Resolution: 'us'
 *     cdef np.ndarray times
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, delta, True)
 *         dates = arr_mul(dates, US_DAY, 0, False)
*/
  switch (__pyx_v_arr_reso) {
    case NPY_FR_us:

    /* "utils.pxd":9867
 *     cdef np.ndarray times
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, delta, True)             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)
*/
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = NPY_FR_us;
    __pyx_t_7.offset = __pyx_v_delta;
    __pyx_t_7.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":9868
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, delta, True)
 *         dates = arr_mul(dates, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)
 * 
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":9869
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, delta, True)
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'ms'
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_11)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9869, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __pyx_t_10;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9869, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9869, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9866
 *     # Resolution: 'us'
 *     cdef np.ndarray times
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, delta, True)
 *         dates = arr_mul(dates, US_DAY, 0, False)
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":9873
 *     # Resolution: 'ms'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_MILLISECOND; r = delta % US_MILLISECOND
*/
    __pyx_t_1 = (__pyx_v_delta != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":9875
 *         if delta != 0:
 *             with cython.cdivision(True):
 *                 q = delta / US_MILLISECOND; r = delta % US_MILLISECOND             # <<<<<<<<<<<<<<
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ms, delta, True)
*/
      __pyx_v_q = (__pyx_v_delta / ((npy_int64)__pyx_v_7cytimes_5utils_US_MILLISECOND));
      __pyx_v_r = (__pyx_v_delta % __pyx_v_7cytimes_5utils_US_MILLISECOND);

      /* "utils.pxd":9876
 *             with cython.cdivision(True):
 *                 q = delta / US_MILLISECOND; r = delta % US_MILLISECOND
 *                 delta = q - 1 if r < 0 else q             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ms, delta, True)
 *         dates = arr_mul(dates, MS_DAY, 0, False)
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_q - 1);
      } else {
        __pyx_t_5 = __pyx_v_q;
      }
      __pyx_v_delta = __pyx_t_5;

      /* "utils.pxd":9873
 *     # Resolution: 'ms'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_MILLISECOND; r = delta % US_MILLISECOND
*/
    }

    /* "utils.pxd":9877
 *                 q = delta / US_MILLISECOND; r = delta % US_MILLISECOND
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ms, delta, True)             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, MS_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MS)
*/
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = NPY_FR_ms;
    __pyx_t_7.offset = __pyx_v_delta;
    __pyx_t_7.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9877, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":9878
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ms, delta, True)
 *         dates = arr_mul(dates, MS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MS)
 * 
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9878, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":9879
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ms, delta, True)
 *         dates = arr_mul(dates, MS_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 's'
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_11)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 9879, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __pyx_t_9;
    __Pyx_INCREF(__pyx_t_10);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9879, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9879, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9872
 * 
 *     # Resolution: 'ms'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         if delta != 0:
 *             with cython.cdivision(True):
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":9883
 *     # Resolution: 's'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_SECOND; r = delta % US_SECOND
*/
    __pyx_t_1 = (__pyx_v_delta != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":9885
 *         if delta != 0:
 *             with cython.cdivision(True):
 *                 q = delta / US_SECOND; r = delta % US_SECOND             # <<<<<<<<<<<<<<
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_s, delta, True)
*/
      __pyx_v_q = (__pyx_v_delta / ((npy_int64)__pyx_v_7cytimes_5utils_US_SECOND));
      __pyx_v_r = (__pyx_v_delta % __pyx_v_7cytimes_5utils_US_SECOND);

      /* "utils.pxd":9886
 *             with cython.cdivision(True):
 *                 q = delta / US_SECOND; r = delta % US_SECOND
 *                 delta = q - 1 if r < 0 else q             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_s, delta, True)
 *         dates = arr_mul(dates, SS_DAY, 0, False)
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_q - 1);
      } else {
        __pyx_t_5 = __pyx_v_q;
      }
      __pyx_v_delta = __pyx_t_5;

      /* "utils.pxd":9883
 *     # Resolution: 's'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_SECOND; r = delta % US_SECOND
*/
    }

    /* "utils.pxd":9887
 *                 q = delta / US_SECOND; r = delta % US_SECOND
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_s, delta, True)             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, SS_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_SS)
*/
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = NPY_FR_s;
    __pyx_t_7.offset = __pyx_v_delta;
    __pyx_t_7.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9887, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":9888
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_s, delta, True)
 *         dates = arr_mul(dates, SS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_SS)
 * 
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":9889
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_s, delta, True)
 *         dates = arr_mul(dates, SS_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'm'
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_11)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9889, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __pyx_t_10;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9889, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9889, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9882
 * 
 *     # Resolution: 's'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         if delta != 0:
 *             with cython.cdivision(True):
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":9893
 *     # Resolution: 'm'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_MINUTE; r = delta % US_MINUTE
*/
    __pyx_t_1 = (__pyx_v_delta != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":9895
 *         if delta != 0:
 *             with cython.cdivision(True):
 *                 q = delta / US_MINUTE; r = delta % US_MINUTE             # <<<<<<<<<<<<<<
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_m, delta, True)
*/
      __pyx_v_q = (__pyx_v_delta / ((npy_int64)__pyx_v_7cytimes_5utils_US_MINUTE));
      __pyx_v_r = (__pyx_v_delta % __pyx_v_7cytimes_5utils_US_MINUTE);

      /* "utils.pxd":9896
 *             with cython.cdivision(True):
 *                 q = delta / US_MINUTE; r = delta % US_MINUTE
 *                 delta = q - 1 if r < 0 else q             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_m, delta, True)
 *         dates = arr_mul(dates, 1_440, 0, False)
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_q - 1);
      } else {
        __pyx_t_5 = __pyx_v_q;
      }
      __pyx_v_delta = __pyx_t_5;

      /* "utils.pxd":9893
 *     # Resolution: 'm'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_MINUTE; r = delta % US_MINUTE
*/
    }

    /* "utils.pxd":9897
 *                 q = delta / US_MINUTE; r = delta % US_MINUTE
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_m, delta, True)             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, 1_440, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MI)
*/
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = NPY_FR_m;
    __pyx_t_7.offset = __pyx_v_delta;
    __pyx_t_7.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9897, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":9898
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_m, delta, True)
 *         dates = arr_mul(dates, 1_440, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MI)
 * 
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, 0x5A0, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9898, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":9899
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_m, delta, True)
 *         dates = arr_mul(dates, 1_440, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'h'
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_11)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 9899, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __pyx_t_9;
    __Pyx_INCREF(__pyx_t_10);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9899, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9899, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9892
 * 
 *     # Resolution: 'm'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         if delta != 0:
 *             with cython.cdivision(True):
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":9903
 *     # Resolution: 'h'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_HOUR; r = delta % US_HOUR
*/
    __pyx_t_1 = (__pyx_v_delta != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":9905
 *         if delta != 0:
 *             with cython.cdivision(True):
 *                 q = delta / US_HOUR; r = delta % US_HOUR             # <<<<<<<<<<<<<<
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_h, delta, True)
*/
      __pyx_v_q = (__pyx_v_delta / ((npy_int64)__pyx_v_7cytimes_5utils_US_HOUR));
      __pyx_v_r = (__pyx_v_delta % __pyx_v_7cytimes_5utils_US_HOUR);

      /* "utils.pxd":9906
 *             with cython.cdivision(True):
 *                 q = delta / US_HOUR; r = delta % US_HOUR
 *                 delta = q - 1 if r < 0 else q             # <<<<<<<<<<<<<<
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_h, delta, True)
 *         dates = arr_mul(dates, 24, 0, False)
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_q - 1);
      } else {
        __pyx_t_5 = __pyx_v_q;
      }
      __pyx_v_delta = __pyx_t_5;

      /* "utils.pxd":9903
 *     # Resolution: 'h'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_HOUR; r = delta % US_HOUR
*/
    }

    /* "utils.pxd":9907
 *                 q = delta / US_HOUR; r = delta % US_HOUR
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_h, delta, True)             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, 24, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_HH)
*/
    __pyx_t_7.__pyx_n = 3;
    __pyx_t_7.arr_reso = NPY_FR_h;
    __pyx_t_7.offset = __pyx_v_delta;
    __pyx_t_7.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9907, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":9908
 *                 delta = q - 1 if r < 0 else q
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_h, delta, True)
 *         dates = arr_mul(dates, 24, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_HH)
 * 
*/
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, 24, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9908, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":9909
 *         times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_h, delta, True)
 *         dates = arr_mul(dates, 24, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 * 
 *     # Resolution: 'D'
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_11)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9909, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_9 = __pyx_t_10;
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9909, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9909, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9902
 * 
 *     # Resolution: 'h'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         if delta != 0:
 *             with cython.cdivision(True):
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":9913
 *     # Resolution: 'D'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_DAY; r = delta % US_DAY
*/
    __pyx_t_1 = (__pyx_v_delta != 0);
    if (__pyx_t_1) {

      /* "utils.pxd":9915
 *         if delta != 0:
 *             with cython.cdivision(True):
 *                 q = delta / US_DAY; r = delta % US_DAY             # <<<<<<<<<<<<<<
 *                 delta = q - 1 if r < 0 else q
 *         return arr_add(dates, delta, False).astype(DT64_DTYPE_DD)
*/
      __pyx_v_q = (__pyx_v_delta / ((npy_int64)__pyx_v_7cytimes_5utils_US_DAY));
      __pyx_v_r = (__pyx_v_delta % __pyx_v_7cytimes_5utils_US_DAY);

      /* "utils.pxd":9916
 *             with cython.cdivision(True):
 *                 q = delta / US_DAY; r = delta % US_DAY
 *                 delta = q - 1 if r < 0 else q             # <<<<<<<<<<<<<<
 *         return arr_add(dates, delta, False).astype(DT64_DTYPE_DD)
 * 
*/
      __pyx_t_1 = (__pyx_v_r < 0);
      if (__pyx_t_1) {
        __pyx_t_5 = (__pyx_v_q - 1);
      } else {
        __pyx_t_5 = __pyx_v_q;
      }
      __pyx_v_delta = __pyx_t_5;

      /* "utils.pxd":9913
 *     # Resolution: 'D'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         if delta != 0:             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = delta / US_DAY; r = delta % US_DAY
*/
    }

    /* "utils.pxd":9917
 *                 q = delta / US_DAY; r = delta % US_DAY
 *                 delta = q - 1 if r < 0 else q
 *         return arr_add(dates, delta, False).astype(DT64_DTYPE_DD)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.copy = 0;
    __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_dates, __pyx_v_delta, &__pyx_t_13)); if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 9917, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_10 = __pyx_t_9;
    __Pyx_INCREF(__pyx_t_10);
    __pyx_t_12 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_v_7cytimes_5utils_DT64_DTYPE_DD};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9917, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 9917, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9912
 * 
 *     # Resolution: 'D'
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         if delta != 0:
 *             with cython.cdivision(True):
*/
    break;
    default: break;
  }

  /* "utils.pxd":9920
 * 
 *     # Unsupported array resolution
 *     raise ValueError(             # <<<<<<<<<<<<<<
 *         "Cannot add delta to ndarray[%s].\n"
 *         "Supported resolutions: 'ns', 'us', 'ms', 's', 'm', 'h', 'D'." % (arr.dtype)
*/
  __pyx_t_9 = NULL;

  /* "utils.pxd":9922
 *     raise ValueError(
 *         "Cannot add delta to ndarray[%s].\n"
 *         "Supported resolutions: 'ns', 'us', 'ms', 's', 'm', 'h', 'D'." % (arr.dtype)             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_14 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Cannot_add_delta_to_ndarray_s_Su, __pyx_t_10); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 9922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_12 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_9, __pyx_t_14};
    __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_12, (2-__pyx_t_12) | (__pyx_t_12*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 9920, __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(5, 9920, __pyx_L1_error)

  /* "utils.pxd":9798
 * 
 * # . manipulation
 * cdef inline np.ndarray dt64arr_add_delta(np.ndarray arr,             # <<<<<<<<<<<<<<
 *     np.npy_int64 years=0, np.npy_int64 quarters=0, np.npy_int64 months=0, np.npy_int64 weeks=0, np.npy_int64 days=0,
 *     np.npy_int64 hours=0, np.npy_int64 minutes=0, np.npy_int64 seconds=0, np.npy_int64 milliseconds=0,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_add_delta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dates);
  __Pyx_XDECREF((PyObject *)__pyx_v_times);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9925
 *     )
 * 
 * cdef inline np.ndarray _dt64arr_add_delta_date(np.ndarray arr, np.npy_int64 years, np.npy_int64 quarters, np.npy_int64 months, np.npy_int64 weeks, np.npy_int64 days, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """(internal) Apply only the calendar delta (Y/Q/M/W/D) to an ndarray[datetime64]
 *     and return `int64` day ticks `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_add_delta_date(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_years, npy_int64 __pyx_v_quarters, npy_int64 __pyx_v_months, npy_int64 __pyx_v_weeks, npy_int64 __pyx_v_days, struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  PyArrayObject *__pyx_v_dateM = 0;
  PyArrayObject *__pyx_v_dateD = 0;
  PyArrayObject *__pyx_v_delta = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_M __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_day __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_min_arr __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_add_arr __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_dt64arr_add_delta_date", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
    }
  }

  /* "utils.pxd":9963
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":9964
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":9965
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 9965, __pyx_L1_error)

      /* "utils.pxd":9964
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":9966
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     cdef np.ndarray dateM, dateD, delta
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 9966, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":9963
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":9970
 *     cdef np.ndarray dateM, dateD, delta
 *     # Year/Quarter/Month -> int64[M] -> int64[D]
 *     if years != 0 or quarters != 0 or months != 0:             # <<<<<<<<<<<<<<
 *         #: convert to int64[M]
 *         dateM = dt64arr_as_int64_M(arr, arr_reso, 0, True)
*/
  __pyx_t_3 = (__pyx_v_years != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_quarters != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_months != 0);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "utils.pxd":9972
 *     if years != 0 or quarters != 0 or months != 0:
 *         #: convert to int64[M]
 *         dateM = dt64arr_as_int64_M(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         #: add 'months' delta
 *         dateM = arr_add(dateM, years * 12 + quarters * 3 + months, False)
*/
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.arr_reso = __pyx_v_arr_reso;
    __pyx_t_5.offset = 0;
    __pyx_t_5.copy = 1;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_M(__pyx_v_arr, &__pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 9972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_dateM = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "utils.pxd":9974
 *         dateM = dt64arr_as_int64_M(arr, arr_reso, 0, True)
 *         #: add 'months' delta
 *         dateM = arr_add(dateM, years * 12 + quarters * 3 + months, False)             # <<<<<<<<<<<<<<
 *         #: compute the maximum days in the target month
 *         delta = dt64arr_days_in_month(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, True)
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_dateM, (((__pyx_v_years * 12) + (__pyx_v_quarters * 3)) + __pyx_v_months), &__pyx_t_6)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 9974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_dateM, ((PyArrayObject *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "utils.pxd":9976
 *         dateM = arr_add(dateM, years * 12 + quarters * 3 + months, False)
 *         #: compute the maximum days in the target month
 *         delta = dt64arr_days_in_month(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, True)             # <<<<<<<<<<<<<<
 *         #: convert to int64[D]
 *         dateD = dt64arr_as_int64_D(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, 0, False)
*/
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.arr_reso = NPY_FR_M;
    __pyx_t_7.copy = 1;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_days_in_month(__pyx_v_dateM, &__pyx_t_7)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 9976, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_delta = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "utils.pxd":9978
 *         delta = dt64arr_days_in_month(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, True)
 *         #: convert to int64[D]
 *         dateD = dt64arr_as_int64_D(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, 0, False)             # <<<<<<<<<<<<<<
 *         #: compute original day and clamp to max days in month
 *         delta = arr_min_arr(delta, dt64arr_day(arr, arr_reso, 0, True), 0, False)
*/
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.arr_reso = NPY_FR_M;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 0;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_dateM, &__pyx_t_8)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 9978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_dateD = ((PyArrayObject *)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "utils.pxd":9980
 *         dateD = dt64arr_as_int64_D(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, 0, False)
 *         #: compute original day and clamp to max days in month
 *         delta = arr_min_arr(delta, dt64arr_day(arr, arr_reso, 0, True), 0, False)             # <<<<<<<<<<<<<<
 *         #: add back original day-1 (0-based) and 'days' delta
 *         return arr_add_arr(dateD, delta, weeks * 7 + days - 1, False)
*/
    __pyx_t_9.__pyx_n = 3;
    __pyx_t_9.arr_reso = __pyx_v_arr_reso;
    __pyx_t_9.offset = 0;
    __pyx_t_9.copy = 1;
    __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_day(__pyx_v_arr, &__pyx_t_9)); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 9980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_min_arr(__pyx_v_delta, ((PyArrayObject *)__pyx_t_4), &__pyx_t_11)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_10));
    __pyx_t_10 = 0;

    /* "utils.pxd":9982
 *         delta = arr_min_arr(delta, dt64arr_day(arr, arr_reso, 0, True), 0, False)
 *         #: add back original day-1 (0-based) and 'days' delta
 *         return arr_add_arr(dateD, delta, weeks * 7 + days - 1, False)             # <<<<<<<<<<<<<<
 *     # Weeks/Days -> int64[D]
 *     else:
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_12.__pyx_n = 2;
    __pyx_t_12.offset = (((__pyx_v_weeks * 7) + __pyx_v_days) - 1);
    __pyx_t_12.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dateD, __pyx_v_delta, &__pyx_t_12)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_r = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
    goto __pyx_L0;

    /* "utils.pxd":9970
 *     cdef np.ndarray dateM, dateD, delta
 *     # Year/Quarter/Month -> int64[M] -> int64[D]
 *     if years != 0 or quarters != 0 or months != 0:             # <<<<<<<<<<<<<<
 *         #: convert to int64[M]
 *         dateM = dt64arr_as_int64_M(arr, arr_reso, 0, True)
*/
  }

  /* "utils.pxd":9986
 *     else:
 *         #: convert to int64[D]
 *         dateD = dt64arr_as_int64_D(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         #: add weeks/days delta
 *         return arr_add(dateD, weeks * 7 + days, False)
*/
  /*else*/ {
    __pyx_t_8.__pyx_n = 3;
    __pyx_t_8.arr_reso = __pyx_v_arr_reso;
    __pyx_t_8.offset = 0;
    __pyx_t_8.copy = 1;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9986, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_v_dateD = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;

    /* "utils.pxd":9988
 *         dateD = dt64arr_as_int64_D(arr, arr_reso, 0, True)
 *         #: add weeks/days delta
 *         return arr_add(dateD, weeks * 7 + days, False)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray _dt64arr_ns_add_delta(np.ndarray arr,
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_10 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_dateD, ((__pyx_v_weeks * 7) + __pyx_v_days), &__pyx_t_6)); if (unlikely(!__pyx_t_10)) __PYX_ERR(5, 9988, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_r = ((PyArrayObject *)__pyx_t_10);
    __pyx_t_10 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":9925
 *     )
 * 
 * cdef inline np.ndarray _dt64arr_add_delta_date(np.ndarray arr, np.npy_int64 years, np.npy_int64 quarters, np.npy_int64 months, np.npy_int64 weeks, np.npy_int64 days, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """(internal) Apply only the calendar delta (Y/Q/M/W/D) to an ndarray[datetime64]
 *     and return `int64` day ticks `<'ndarray[int64]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cytimes.utils._dt64arr_add_delta_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dateM);
  __Pyx_XDECREF((PyObject *)__pyx_v_dateD);
  __Pyx_XDECREF((PyObject *)__pyx_v_delta);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":9990
 *         return arr_add(dateD, weeks * 7 + days, False)
 * 
 * cdef inline np.ndarray _dt64arr_ns_add_delta(np.ndarray arr,             # <<<<<<<<<<<<<<
 *     np.npy_int64 years, np.npy_int64 quarters, np.npy_int64 months, np.npy_int64 weeks, np.npy_int64 days,
 *     np.npy_int64 hours, np.npy_int64 minutes, np.npy_int64 seconds, np.npy_int64 milliseconds,
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__dt64arr_ns_add_delta(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_years, npy_int64 __pyx_v_quarters, npy_int64 __pyx_v_months, npy_int64 __pyx_v_weeks, npy_int64 __pyx_v_days, npy_int64 __pyx_v_hours, npy_int64 __pyx_v_minutes, npy_int64 __pyx_v_seconds, npy_int64 __pyx_v_milliseconds, npy_int64 __pyx_v_microseconds, npy_int64 __pyx_v_nanoseconds) {
  PyArrayObject *__pyx_v_dates = 0;
  PyArrayObject *__pyx_v_times = 0;
  npy_int64 *__pyx_v_dates_ptr;
  npy_int64 *__pyx_v_times_ptr;
  npy_intp __pyx_v_size;
  npy_intp __pyx_v_i;
  npy_int64 __pyx_v_delta;
  npy_int64 __pyx_v_d;
  npy_int64 __pyx_v_t;
  npy_int64 __pyx_v_q;
  npy_int64 __pyx_v_r;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils__dt64arr_add_delta_date __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_times __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  npy_intp __pyx_t_6;
  npy_intp __pyx_t_7;
  npy_intp __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe __pyx_t_9;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_11;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add_arr __pyx_t_14;
  size_t __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_dt64arr_ns_add_delta", 0);

  /* "utils.pxd":10025
 *     """
 *     # Adjust dates -> int64[D]
 *     cdef np.ndarray dates = _dt64arr_add_delta_date(arr, years, quarters, months, weeks, days, np.NPY_DATETIMEUNIT.NPY_FR_ns)             # <<<<<<<<<<<<<<
 * 
 *     # Adjust times -> int64[ns]
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.arr_reso = NPY_FR_ns;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils__dt64arr_add_delta_date(__pyx_v_arr, __pyx_v_years, __pyx_v_quarters, __pyx_v_months, __pyx_v_weeks, __pyx_v_days, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10025, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_dates = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":10029
 *     # Adjust times -> int64[ns]
 *     cdef:
 *         np.ndarray times = dt64arr_times(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns, 0, True)             # <<<<<<<<<<<<<<
 *         np.npy_int64* dates_ptr
 *         np.npy_int64* times_ptr
*/
  __pyx_t_3.__pyx_n = 3;
  __pyx_t_3.arr_reso = NPY_FR_ns;
  __pyx_t_3.offset = 0;
  __pyx_t_3.copy = 1;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_times(__pyx_v_arr, &__pyx_t_3)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10029, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_times = ((PyArrayObject *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "utils.pxd":10034
 *         np.npy_intp size, i
 *         np.npy_int64 delta, d, t, q, r
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0 or nanoseconds != 0:             # <<<<<<<<<<<<<<
 *         delta = (
 *             (hours * 3600 + minutes * 60 + seconds) * NS_SECOND
*/
  __pyx_t_5 = (__pyx_v_hours != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_minutes != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_seconds != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_milliseconds != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_microseconds != 0);
  if (!__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = (__pyx_v_nanoseconds != 0);
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "utils.pxd":10039
 *             + milliseconds * NS_MILLISECOND
 *             + microseconds * NS_MICROSECOND
 *             + nanoseconds             # <<<<<<<<<<<<<<
 *         )
 *         dates_ptr = <np.npy_int64*> np.PyArray_DATA(dates)
*/
    __pyx_v_delta = (((((((__pyx_v_hours * 0xE10) + (__pyx_v_minutes * 60)) + __pyx_v_seconds) * __pyx_v_7cytimes_5utils_NS_SECOND) + (__pyx_v_milliseconds * __pyx_v_7cytimes_5utils_NS_MILLISECOND)) + (__pyx_v_microseconds * __pyx_v_7cytimes_5utils_NS_MICROSECOND)) + __pyx_v_nanoseconds);

    /* "utils.pxd":10041
 *             + nanoseconds
 *         )
 *         dates_ptr = <np.npy_int64*> np.PyArray_DATA(dates)             # <<<<<<<<<<<<<<
 *         times_ptr = <np.npy_int64*> np.PyArray_DATA(times)
 *         size = arr.shape[0]
*/
    __pyx_v_dates_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_dates));

    /* "utils.pxd":10042
 *         )
 *         dates_ptr = <np.npy_int64*> np.PyArray_DATA(dates)
 *         times_ptr = <np.npy_int64*> np.PyArray_DATA(times)             # <<<<<<<<<<<<<<
 *         size = arr.shape[0]
 *         for i in range(size):
*/
    __pyx_v_times_ptr = ((npy_int64 *)PyArray_DATA(__pyx_v_times));

    /* "utils.pxd":10043
 *         dates_ptr = <np.npy_int64*> np.PyArray_DATA(dates)
 *         times_ptr = <np.npy_int64*> np.PyArray_DATA(times)
 *         size = arr.shape[0]             # <<<<<<<<<<<<<<
 *         for i in range(size):
 *             # Preserve NaT
*/
    __pyx_v_size = (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]);

    /* "utils.pxd":10044
 *         times_ptr = <np.npy_int64*> np.PyArray_DATA(times)
 *         size = arr.shape[0]
 *         for i in range(size):             # <<<<<<<<<<<<<<
 *             # Preserve NaT
 *             d = dates_ptr[i]
*/
    __pyx_t_6 = __pyx_v_size;
    __pyx_t_7 = __pyx_t_6;
    for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
      __pyx_v_i = __pyx_t_8;

      /* "utils.pxd":10046
 *         for i in range(size):
 *             # Preserve NaT
 *             d = dates_ptr[i]             # <<<<<<<<<<<<<<
 *             if d == LLONG_MIN:
 *                 continue
*/
      __pyx_v_d = (__pyx_v_dates_ptr[__pyx_v_i]);

      /* "utils.pxd":10047
 *             # Preserve NaT
 *             d = dates_ptr[i]
 *             if d == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             t = times_ptr[i]
*/
      __pyx_t_4 = (__pyx_v_d == LLONG_MIN);
      if (__pyx_t_4) {

        /* "utils.pxd":10048
 *             d = dates_ptr[i]
 *             if d == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             t = times_ptr[i]
 *             if t == LLONG_MIN:
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":10047
 *             # Preserve NaT
 *             d = dates_ptr[i]
 *             if d == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             t = times_ptr[i]
*/
      }

      /* "utils.pxd":10049
 *             if d == LLONG_MIN:
 *                 continue
 *             t = times_ptr[i]             # <<<<<<<<<<<<<<
 *             if t == LLONG_MIN:
 *                 continue
*/
      __pyx_v_t = (__pyx_v_times_ptr[__pyx_v_i]);

      /* "utils.pxd":10050
 *                 continue
 *             t = times_ptr[i]
 *             if t == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Add delta & Normalize time
*/
      __pyx_t_4 = (__pyx_v_t == LLONG_MIN);
      if (__pyx_t_4) {

        /* "utils.pxd":10051
 *             t = times_ptr[i]
 *             if t == LLONG_MIN:
 *                 continue             # <<<<<<<<<<<<<<
 *             # Add delta & Normalize time
 *             t += delta
*/
        goto __pyx_L10_continue;

        /* "utils.pxd":10050
 *                 continue
 *             t = times_ptr[i]
 *             if t == LLONG_MIN:             # <<<<<<<<<<<<<<
 *                 continue
 *             # Add delta & Normalize time
*/
      }

      /* "utils.pxd":10053
 *                 continue
 *             # Add delta & Normalize time
 *             t += delta             # <<<<<<<<<<<<<<
 *             with cython.cdivision(True):
 *                 q = t / NS_DAY; r = t % NS_DAY
*/
      __pyx_v_t = (__pyx_v_t + __pyx_v_delta);

      /* "utils.pxd":10055
 *             t += delta
 *             with cython.cdivision(True):
 *                 q = t / NS_DAY; r = t % NS_DAY             # <<<<<<<<<<<<<<
 *                 if r < 0:
 *                     q -= 1; r += NS_DAY
*/
      __pyx_v_q = (__pyx_v_t / ((npy_int64)__pyx_v_7cytimes_5utils_NS_DAY));
      __pyx_v_r = (__pyx_v_t % __pyx_v_7cytimes_5utils_NS_DAY);

      /* "utils.pxd":10056
 *             with cython.cdivision(True):
 *                 q = t / NS_DAY; r = t % NS_DAY
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     q -= 1; r += NS_DAY
 *             dates_ptr[i] = d + q
*/
      __pyx_t_4 = (__pyx_v_r < 0);
      if (__pyx_t_4) {

        /* "utils.pxd":10057
 *                 q = t / NS_DAY; r = t % NS_DAY
 *                 if r < 0:
 *                     q -= 1; r += NS_DAY             # <<<<<<<<<<<<<<
 *             dates_ptr[i] = d + q
 *             times_ptr[i] = r
*/
        __pyx_v_q = (__pyx_v_q - 1);
        __pyx_v_r = (__pyx_v_r + __pyx_v_7cytimes_5utils_NS_DAY);

        /* "utils.pxd":10056
 *             with cython.cdivision(True):
 *                 q = t / NS_DAY; r = t % NS_DAY
 *                 if r < 0:             # <<<<<<<<<<<<<<
 *                     q -= 1; r += NS_DAY
 *             dates_ptr[i] = d + q
*/
      }

      /* "utils.pxd":10058
 *                 if r < 0:
 *                     q -= 1; r += NS_DAY
 *             dates_ptr[i] = d + q             # <<<<<<<<<<<<<<
 *             times_ptr[i] = r
 * 
*/
      (__pyx_v_dates_ptr[__pyx_v_i]) = (__pyx_v_d + __pyx_v_q);

      /* "utils.pxd":10059
 *                     q -= 1; r += NS_DAY
 *             dates_ptr[i] = d + q
 *             times_ptr[i] = r             # <<<<<<<<<<<<<<
 * 
 *     # If out of 'ns' range, down-convert to 'us'
*/
      (__pyx_v_times_ptr[__pyx_v_i]) = __pyx_v_r;
      __pyx_L10_continue:;
    }

    /* "utils.pxd":10034
 *         np.npy_intp size, i
 *         np.npy_int64 delta, d, t, q, r
 *     if hours != 0 or minutes != 0 or seconds != 0 or milliseconds != 0 or microseconds != 0 or nanoseconds != 0:             # <<<<<<<<<<<<<<
 *         delta = (
 *             (hours * 3600 + minutes * 60 + seconds) * NS_SECOND
*/
  }

  /* "utils.pxd":10062
 * 
 *     # If out of 'ns' range, down-convert to 'us'
 *     if not is_dt64arr_ns_safe(dates, np.NPY_DATETIMEUNIT.NPY_FR_D):             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         times = arr_div_floor(times, NS_MICROSECOND, 0, False)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.arr_reso = NPY_FR_D;
  __pyx_t_4 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_dates, &__pyx_t_9); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 10062, __pyx_L1_error)
  __pyx_t_5 = (!__pyx_t_4);
  if (__pyx_t_5) {

    /* "utils.pxd":10063
 *     # If out of 'ns' range, down-convert to 'us'
 *     if not is_dt64arr_ns_safe(dates, np.NPY_DATETIMEUNIT.NPY_FR_D):
 *         dates = arr_mul(dates, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *         times = arr_div_floor(times, NS_MICROSECOND, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)
*/
    __pyx_t_10.__pyx_n = 2;
    __pyx_t_10.offset = 0;
    __pyx_t_10.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10063, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "utils.pxd":10064
 *     if not is_dt64arr_ns_safe(dates, np.NPY_DATETIMEUNIT.NPY_FR_D):
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         times = arr_div_floor(times, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)
 *     else:
*/
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_times, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_11)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10064, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "utils.pxd":10065
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         times = arr_div_floor(times, NS_MICROSECOND, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *     else:
 *         dates = arr_mul(dates, NS_DAY, 0, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_14.__pyx_n = 2;
    __pyx_t_14.offset = 0;
    __pyx_t_14.copy = 0;
    __pyx_t_13 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_14)); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 10065, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_12 = __pyx_t_13;
    __Pyx_INCREF(__pyx_t_12);
    __pyx_t_15 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_12, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10065, __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_5numpy_ndarray))))) __PYX_ERR(5, 10065, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10062
 * 
 *     # If out of 'ns' range, down-convert to 'us'
 *     if not is_dt64arr_ns_safe(dates, np.NPY_DATETIMEUNIT.NPY_FR_D):             # <<<<<<<<<<<<<<
 *         dates = arr_mul(dates, US_DAY, 0, False)
 *         times = arr_div_floor(times, NS_MICROSECOND, 0, False)
*/
  }

  /* "utils.pxd":10067
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_US)
 *     else:
 *         dates = arr_mul(dates, NS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_NS)
 * 
*/
  /*else*/ {
    __pyx_t_10.__pyx_n = 2;
    __pyx_t_10.offset = 0;
    __pyx_t_10.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dates, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_10)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10067, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_dates, ((PyArrayObject *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "utils.pxd":10068
 *     else:
 *         dates = arr_mul(dates, NS_DAY, 0, False)
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_replace_dates(np.ndarray arr, np.npy_int64 year, np.npy_int64 month, np.npy_int64 day, int arr_reso=-1):
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_14.__pyx_n = 2;
    __pyx_t_14.offset = 0;
    __pyx_t_14.copy = 0;
    __pyx_t_12 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dates, __pyx_v_times, &__pyx_t_14)); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 10068, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_13 = __pyx_t_12;
    __Pyx_INCREF(__pyx_t_13);
    __pyx_t_15 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_13, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
      __pyx_t_1 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_15, (2-__pyx_t_15) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10068, __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_5numpy_ndarray))))) __PYX_ERR(5, 10068, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;
  }

  /* "utils.pxd":9990
 *         return arr_add(dateD, weeks * 7 + days, False)
 * 
 * cdef inline np.ndarray _dt64arr_ns_add_delta(np.ndarray arr,             # <<<<<<<<<<<<<<
 *     np.npy_int64 years, np.npy_int64 quarters, np.npy_int64 months, np.npy_int64 weeks, np.npy_int64 days,
 *     np.npy_int64 hours, np.npy_int64 minutes, np.npy_int64 seconds, np.npy_int64 milliseconds,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cytimes.utils._dt64arr_ns_add_delta", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dates);
  __Pyx_XDECREF((PyObject *)__pyx_v_times);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10070
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_NS)
 * 
 * cdef inline np.ndarray dt64arr_replace_dates(np.ndarray arr, np.npy_int64 year, np.npy_int64 month, np.npy_int64 day, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the Y/M/D components of an ndarray[datetime64] and return `int64` day ticks `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_replace_dates(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_year, npy_int64 __pyx_v_month, npy_int64 __pyx_v_day, struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_dates *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  PyArrayObject *__pyx_v_dateY = 0;
  PyArrayObject *__pyx_v_dateM = 0;
  PyArrayObject *__pyx_v_dateD = 0;
  PyArrayObject *__pyx_v_delta = 0;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_Y __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_5;
  long __pyx_t_6;
  npy_int64 __pyx_t_7;
  npy_int64 __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_9;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_month __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_arr_add_arr __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_as_int64_D __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_days_in_month __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_arr_min __pyx_t_14;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_day __pyx_t_15;
  PyObject *__pyx_t_16 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_min_arr __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_replace_dates", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
    }
  }

  /* "utils.pxd":10099
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10100
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":10101
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10101, __pyx_L1_error)

      /* "utils.pxd":10100
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10102
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Year replacement -> int64[M] YYYY-01
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10102, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10099
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10107
 *     cdef np.ndarray dateY, dateM, dateD, delta
 *     # . set to specific year
 *     if year > 0:             # <<<<<<<<<<<<<<
 *         assure_1dim_arr(arr)
 *         dateM = arr_fill_int64((year - EPOCH_YEAR) * 12, arr.shape[0])
*/
  __pyx_t_1 = (__pyx_v_year > 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10108
 *     # . set to specific year
 *     if year > 0:
 *         assure_1dim_arr(arr)             # <<<<<<<<<<<<<<
 *         dateM = arr_fill_int64((year - EPOCH_YEAR) * 12, arr.shape[0])
 *     # . retain original year
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_1dim_arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10108, __pyx_L1_error)

    /* "utils.pxd":10109
 *     if year > 0:
 *         assure_1dim_arr(arr)
 *         dateM = arr_fill_int64((year - EPOCH_YEAR) * 12, arr.shape[0])             # <<<<<<<<<<<<<<
 *     # . retain original year
 *     else:
*/
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_fill_int64(((__pyx_v_year - __pyx_v_7cytimes_5utils_EPOCH_YEAR) * 12), (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_dateM = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":10107
 *     cdef np.ndarray dateY, dateM, dateD, delta
 *     # . set to specific year
 *     if year > 0:             # <<<<<<<<<<<<<<
 *         assure_1dim_arr(arr)
 *         dateM = arr_fill_int64((year - EPOCH_YEAR) * 12, arr.shape[0])
*/
    goto __pyx_L5;
  }

  /* "utils.pxd":10112
 *     # . retain original year
 *     else:
 *         dateY = dt64arr_as_int64_Y(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         dateM = arr_mul(dateY, 12, 0, False)
 * 
*/
  /*else*/ {
    __pyx_t_4.__pyx_n = 3;
    __pyx_t_4.arr_reso = __pyx_v_arr_reso;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_Y(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10112, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_dateY = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":10113
 *     else:
 *         dateY = dt64arr_as_int64_Y(arr, arr_reso, 0, True)
 *         dateM = arr_mul(dateY, 12, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Month replacement -> int64[M] YYYY-MM
*/
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = 0;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_dateY, 12, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10113, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_dateM = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L5:;

  /* "utils.pxd":10117
 *     # Month replacement -> int64[M] YYYY-MM
 *     # . set to specific month
 *     if month > 0:             # <<<<<<<<<<<<<<
 *         dateM = arr_add(dateM, min(month, 12) - 1, False)
 *     # . retain original month
*/
  __pyx_t_1 = (__pyx_v_month > 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10118
 *     # . set to specific month
 *     if month > 0:
 *         dateM = arr_add(dateM, min(month, 12) - 1, False)             # <<<<<<<<<<<<<<
 *     # . retain original month
 *     else:
*/
    __pyx_t_6 = 12;
    __pyx_t_7 = __pyx_v_month;
    __pyx_t_1 = (__pyx_t_6 < __pyx_t_7);
    if (__pyx_t_1) {
      __pyx_t_8 = __pyx_t_6;
    } else {
      __pyx_t_8 = __pyx_t_7;
    }
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_dateM, (__pyx_t_8 - 1), &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10118, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dateM, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10117
 *     # Month replacement -> int64[M] YYYY-MM
 *     # . set to specific month
 *     if month > 0:             # <<<<<<<<<<<<<<
 *         dateM = arr_add(dateM, min(month, 12) - 1, False)
 *     # . retain original month
*/
    goto __pyx_L6;
  }

  /* "utils.pxd":10121
 *     # . retain original month
 *     else:
 *         delta = dt64arr_month(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         dateM = arr_add_arr(dateM, delta, -1, False)
 * 
*/
  /*else*/ {
    __pyx_t_10.__pyx_n = 3;
    __pyx_t_10.arr_reso = __pyx_v_arr_reso;
    __pyx_t_10.offset = 0;
    __pyx_t_10.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_month(__pyx_v_arr, &__pyx_t_10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_delta = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":10122
 *     else:
 *         delta = dt64arr_month(arr, arr_reso, 0, True)
 *         dateM = arr_add_arr(dateM, delta, -1, False)             # <<<<<<<<<<<<<<
 * 
 *     # Day replacement -> int64[D] YYYY-MM-DD
*/
    __pyx_t_11.__pyx_n = 2;
    __pyx_t_11.offset = -1LL;
    __pyx_t_11.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dateM, __pyx_v_delta, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10122, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_dateM, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
  }
  __pyx_L6:;

  /* "utils.pxd":10125
 * 
 *     # Day replacement -> int64[D] YYYY-MM-DD
 *     dateD = dt64arr_as_int64_D(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, 0, True)             # <<<<<<<<<<<<<<
 *     delta = dt64arr_days_in_month(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, False)
 * 
*/
  __pyx_t_12.__pyx_n = 3;
  __pyx_t_12.arr_reso = NPY_FR_M;
  __pyx_t_12.offset = 0;
  __pyx_t_12.copy = 1;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_as_int64_D(__pyx_v_dateM, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10125, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_dateD = ((PyArrayObject *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "utils.pxd":10126
 *     # Day replacement -> int64[D] YYYY-MM-DD
 *     dateD = dt64arr_as_int64_D(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, 0, True)
 *     delta = dt64arr_days_in_month(dateM, np.NPY_DATETIMEUNIT.NPY_FR_M, False)             # <<<<<<<<<<<<<<
 * 
 *     # . set to specific day (clamp to maximum days in month)
*/
  __pyx_t_13.__pyx_n = 2;
  __pyx_t_13.arr_reso = NPY_FR_M;
  __pyx_t_13.copy = 0;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_days_in_month(__pyx_v_dateM, &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":10129
 * 
 *     # . set to specific day (clamp to maximum days in month)
 *     if day > 0:             # <<<<<<<<<<<<<<
 *         delta = arr_min(delta, day, 0, False)
 *     # . retain original day (clamp to maximum days in month)
*/
  __pyx_t_1 = (__pyx_v_day > 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10130
 *     # . set to specific day (clamp to maximum days in month)
 *     if day > 0:
 *         delta = arr_min(delta, day, 0, False)             # <<<<<<<<<<<<<<
 *     # . retain original day (clamp to maximum days in month)
 *     else:
*/
    __pyx_t_14.__pyx_n = 2;
    __pyx_t_14.offset = 0;
    __pyx_t_14.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_min(__pyx_v_delta, __pyx_v_day, &__pyx_t_14)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10130, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10129
 * 
 *     # . set to specific day (clamp to maximum days in month)
 *     if day > 0:             # <<<<<<<<<<<<<<
 *         delta = arr_min(delta, day, 0, False)
 *     # . retain original day (clamp to maximum days in month)
*/
    goto __pyx_L7;
  }

  /* "utils.pxd":10133
 *     # . retain original day (clamp to maximum days in month)
 *     else:
 *         delta = arr_min_arr(delta, dt64arr_day(arr, arr_reso, 0, True), 0, False)             # <<<<<<<<<<<<<<
 *     dateD = arr_add_arr(dateD, delta, -1, False)
 * 
*/
  /*else*/ {
    __pyx_t_15.__pyx_n = 3;
    __pyx_t_15.arr_reso = __pyx_v_arr_reso;
    __pyx_t_15.offset = 0;
    __pyx_t_15.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_day(__pyx_v_arr, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_17.__pyx_n = 2;
    __pyx_t_17.offset = 0;
    __pyx_t_17.copy = 0;
    __pyx_t_16 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_min_arr(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3), &__pyx_t_17)); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 10133, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_16);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_16));
    __pyx_t_16 = 0;
  }
  __pyx_L7:;

  /* "utils.pxd":10134
 *     else:
 *         delta = arr_min_arr(delta, dt64arr_day(arr, arr_reso, 0, True), 0, False)
 *     dateD = arr_add_arr(dateD, delta, -1, False)             # <<<<<<<<<<<<<<
 * 
 *     # Return the date part: int64[D]
*/
  __pyx_t_11.__pyx_n = 2;
  __pyx_t_11.offset = -1LL;
  __pyx_t_11.copy = 0;
  __pyx_t_16 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_dateD, __pyx_v_delta, &__pyx_t_11)); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 10134, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_16);
  __Pyx_DECREF_SET(__pyx_v_dateD, ((PyArrayObject *)__pyx_t_16));
  __pyx_t_16 = 0;

  /* "utils.pxd":10137
 * 
 *     # Return the date part: int64[D]
 *     return dateD             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_replace_times(np.ndarray arr, np.npy_int64 hour, np.npy_int64 minute, np.npy_int64 second, np.npy_int64 microsecond, np.npy_int64 nanosecond, int arr_reso=-1):
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_dateD);
  __pyx_r = __pyx_v_dateD;
  goto __pyx_L0;

  /* "utils.pxd":10070
 *         return arr_add_arr(dates, times, 0, False).astype(DT64_DTYPE_NS)
 * 
 * cdef inline np.ndarray dt64arr_replace_dates(np.ndarray arr, np.npy_int64 year, np.npy_int64 month, np.npy_int64 day, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the Y/M/D components of an ndarray[datetime64] and return `int64` day ticks `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_replace_dates", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_dateY);
  __Pyx_XDECREF((PyObject *)__pyx_v_dateM);
  __Pyx_XDECREF((PyObject *)__pyx_v_dateD);
  __Pyx_XDECREF((PyObject *)__pyx_v_delta);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10139
 *     return dateD
 * 
 * cdef inline np.ndarray dt64arr_replace_times(np.ndarray arr, np.npy_int64 hour, np.npy_int64 minute, np.npy_int64 second, np.npy_int64 microsecond, np.npy_int64 nanosecond, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the h/m/s/us/ns components of an ndarray[datetime64] and return the
 *     time components `int64` ticks in the original resolution `<'ndarray[int64]'>`.
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_replace_times(PyArrayObject *__pyx_v_arr, npy_int64 __pyx_v_hour, npy_int64 __pyx_v_minute, npy_int64 __pyx_v_second, npy_int64 __pyx_v_microsecond, npy_int64 __pyx_v_nanosecond, struct __pyx_opt_args_7cytimes_5utils_dt64arr_replace_times *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_hh_f;
  npy_int64 __pyx_v_mi_f;
  npy_int64 __pyx_v_ss_f;
  npy_int64 __pyx_v_us_f;
  PyArrayObject *__pyx_v_times = 0;
  PyArrayObject *__pyx_v_delta = 0;
  npy_int64 __pyx_v_millisecond;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __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;
  size_t __pyx_t_7;
  long __pyx_t_8;
  npy_int64 __pyx_t_9;
  npy_int64 __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_hour __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_13;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_minute __pyx_t_14;
  struct __pyx_opt_args_7cytimes_5utils_arr_add_arr __pyx_t_15;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_second __pyx_t_16;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_millisecond __pyx_t_17;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_microsecond __pyx_t_18;
  struct __pyx_opt_args_7cytimes_5utils_dt64arr_nanosecond __pyx_t_19;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_replace_times", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
    }
  }

  /* "utils.pxd":10175
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10176
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_DATETIME);
    if (__pyx_t_1) {

      /* "utils.pxd":10177
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10177, __pyx_L1_error)

      /* "utils.pxd":10176
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10178
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Get conversion factors
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10178, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10175
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_DATETIME:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10182
 *     # Get conversion factors
 *     cdef np.npy_int64 hh_f, mi_f, ss_f, us_f
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         hh_f = NS_HOUR; mi_f = NS_MINUTE; ss_f = NS_SECOND; us_f = NS_MICROSECOND
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
  switch (__pyx_v_arr_reso) {
    case NPY_FR_ns:

    /* "utils.pxd":10183
 *     cdef np.npy_int64 hh_f, mi_f, ss_f, us_f
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         hh_f = NS_HOUR; mi_f = NS_MINUTE; ss_f = NS_SECOND; us_f = NS_MICROSECOND             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         hh_f = US_HOUR; mi_f = US_MINUTE; ss_f = US_SECOND; us_f = 1
*/
    __pyx_v_hh_f = __pyx_v_7cytimes_5utils_NS_HOUR;
    __pyx_v_mi_f = __pyx_v_7cytimes_5utils_NS_MINUTE;
    __pyx_v_ss_f = __pyx_v_7cytimes_5utils_NS_SECOND;
    __pyx_v_us_f = __pyx_v_7cytimes_5utils_NS_MICROSECOND;

    /* "utils.pxd":10182
 *     # Get conversion factors
 *     cdef np.npy_int64 hh_f, mi_f, ss_f, us_f
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         hh_f = NS_HOUR; mi_f = NS_MINUTE; ss_f = NS_SECOND; us_f = NS_MICROSECOND
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
    break;
    case NPY_FR_us:

    /* "utils.pxd":10185
 *         hh_f = NS_HOUR; mi_f = NS_MINUTE; ss_f = NS_SECOND; us_f = NS_MICROSECOND
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         hh_f = US_HOUR; mi_f = US_MINUTE; ss_f = US_SECOND; us_f = 1             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         hh_f = MS_HOUR; mi_f = MS_MINUTE; ss_f = MS_SECOND; us_f = 1
*/
    __pyx_v_hh_f = __pyx_v_7cytimes_5utils_US_HOUR;
    __pyx_v_mi_f = __pyx_v_7cytimes_5utils_US_MINUTE;
    __pyx_v_ss_f = __pyx_v_7cytimes_5utils_US_SECOND;
    __pyx_v_us_f = 1;

    /* "utils.pxd":10184
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         hh_f = NS_HOUR; mi_f = NS_MINUTE; ss_f = NS_SECOND; us_f = NS_MICROSECOND
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         hh_f = US_HOUR; mi_f = US_MINUTE; ss_f = US_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":10187
 *         hh_f = US_HOUR; mi_f = US_MINUTE; ss_f = US_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         hh_f = MS_HOUR; mi_f = MS_MINUTE; ss_f = MS_SECOND; us_f = 1             # <<<<<<<<<<<<<<
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         hh_f = SS_HOUR; mi_f = SS_MINUTE; ss_f = 1;         us_f = 0
*/
    __pyx_v_hh_f = __pyx_v_7cytimes_5utils_MS_HOUR;
    __pyx_v_mi_f = __pyx_v_7cytimes_5utils_MS_MINUTE;
    __pyx_v_ss_f = __pyx_v_7cytimes_5utils_MS_SECOND;
    __pyx_v_us_f = 1;

    /* "utils.pxd":10186
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         hh_f = US_HOUR; mi_f = US_MINUTE; ss_f = US_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         hh_f = MS_HOUR; mi_f = MS_MINUTE; ss_f = MS_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":10189
 *         hh_f = MS_HOUR; mi_f = MS_MINUTE; ss_f = MS_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         hh_f = SS_HOUR; mi_f = SS_MINUTE; ss_f = 1;         us_f = 0             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError(
*/
    __pyx_v_hh_f = __pyx_v_7cytimes_5utils_SS_HOUR;
    __pyx_v_mi_f = __pyx_v_7cytimes_5utils_SS_MINUTE;
    __pyx_v_ss_f = 1;
    __pyx_v_us_f = 0;

    /* "utils.pxd":10188
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         hh_f = MS_HOUR; mi_f = MS_MINUTE; ss_f = MS_SECOND; us_f = 1
 *     elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         hh_f = SS_HOUR; mi_f = SS_MINUTE; ss_f = 1;         us_f = 0
 *     else:
*/
    break;
    default:

    /* "utils.pxd":10191
 *         hh_f = SS_HOUR; mi_f = SS_MINUTE; ss_f = 1;         us_f = 0
 *     else:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Only supports arrays with units in ['ns', 'us', 'ms', 's'], "
 *             "instead got '%s'." % nptime_unit_int2str(arr_reso)
*/
    __pyx_t_4 = NULL;

    /* "utils.pxd":10193
 *         raise ValueError(
 *             "Only supports arrays with units in ['ns', 'us', 'ms', 's'], "
 *             "instead got '%s'." % nptime_unit_int2str(arr_reso)             # <<<<<<<<<<<<<<
 *         )
 * 
*/
    __pyx_t_5 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_arr_reso); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Only_supports_arrays_with_units, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10193, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10191, __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(5, 10191, __pyx_L1_error)
    break;
  }

  /* "utils.pxd":10200
 *     cdef np.npy_int64 millisecond
 *     # . set to specific hour
 *     if hour >= 0:             # <<<<<<<<<<<<<<
 *         assure_1dim_arr(arr)
 *         times = arr_fill_int64(min(hour, 23) * hh_f, arr.shape[0])
*/
  __pyx_t_1 = (__pyx_v_hour >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10201
 *     # . set to specific hour
 *     if hour >= 0:
 *         assure_1dim_arr(arr)             # <<<<<<<<<<<<<<
 *         times = arr_fill_int64(min(hour, 23) * hh_f, arr.shape[0])
 *     # . retain original hour
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils_assure_1dim_arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10201, __pyx_L1_error)

    /* "utils.pxd":10202
 *     if hour >= 0:
 *         assure_1dim_arr(arr)
 *         times = arr_fill_int64(min(hour, 23) * hh_f, arr.shape[0])             # <<<<<<<<<<<<<<
 *     # . retain original hour
 *     else:
*/
    __pyx_t_8 = 23;
    __pyx_t_9 = __pyx_v_hour;
    __pyx_t_1 = (__pyx_t_8 < __pyx_t_9);
    if (__pyx_t_1) {
      __pyx_t_10 = __pyx_t_8;
    } else {
      __pyx_t_10 = __pyx_t_9;
    }
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_fill_int64((__pyx_t_10 * __pyx_v_hh_f), (__pyx_f_5numpy_7ndarray_5shape_shape(__pyx_v_arr)[0]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10202, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":10200
 *     cdef np.npy_int64 millisecond
 *     # . set to specific hour
 *     if hour >= 0:             # <<<<<<<<<<<<<<
 *         assure_1dim_arr(arr)
 *         times = arr_fill_int64(min(hour, 23) * hh_f, arr.shape[0])
*/
    goto __pyx_L5;
  }

  /* "utils.pxd":10205
 *     # . retain original hour
 *     else:
 *         delta = dt64arr_hour(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         times = arr_mul(delta, hh_f, 0, False)
 * 
*/
  /*else*/ {
    __pyx_t_11.__pyx_n = 3;
    __pyx_t_11.arr_reso = __pyx_v_arr_reso;
    __pyx_t_11.offset = 0;
    __pyx_t_11.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_hour(__pyx_v_arr, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_delta = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;

    /* "utils.pxd":10206
 *     else:
 *         delta = dt64arr_hour(arr, arr_reso, 0, True)
 *         times = arr_mul(delta, hh_f, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Minute replacement -> int64[ns] hh:mm:00.000000000
*/
    __pyx_t_12.__pyx_n = 2;
    __pyx_t_12.offset = 0;
    __pyx_t_12.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_delta, __pyx_v_hh_f, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_times = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
  }
  __pyx_L5:;

  /* "utils.pxd":10210
 *     # Minute replacement -> int64[ns] hh:mm:00.000000000
 *     # . set to specific minute
 *     if minute >= 0:             # <<<<<<<<<<<<<<
 *         times = arr_add(times, min(minute, 59) * mi_f, False)
 *     # . retain original minute
*/
  __pyx_t_1 = (__pyx_v_minute >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10211
 *     # . set to specific minute
 *     if minute >= 0:
 *         times = arr_add(times, min(minute, 59) * mi_f, False)             # <<<<<<<<<<<<<<
 *     # . retain original minute
 *     else:
*/
    __pyx_t_8 = 59;
    __pyx_t_10 = __pyx_v_minute;
    __pyx_t_1 = (__pyx_t_8 < __pyx_t_10);
    if (__pyx_t_1) {
      __pyx_t_9 = __pyx_t_8;
    } else {
      __pyx_t_9 = __pyx_t_10;
    }
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_times, (__pyx_t_9 * __pyx_v_mi_f), &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10211, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10210
 *     # Minute replacement -> int64[ns] hh:mm:00.000000000
 *     # . set to specific minute
 *     if minute >= 0:             # <<<<<<<<<<<<<<
 *         times = arr_add(times, min(minute, 59) * mi_f, False)
 *     # . retain original minute
*/
    goto __pyx_L6;
  }

  /* "utils.pxd":10214
 *     # . retain original minute
 *     else:
 *         delta = dt64arr_minute(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         delta = arr_mul(delta, mi_f, 0, False)
 *         times = arr_add_arr(times, delta, 0, False)
*/
  /*else*/ {
    __pyx_t_14.__pyx_n = 3;
    __pyx_t_14.arr_reso = __pyx_v_arr_reso;
    __pyx_t_14.offset = 0;
    __pyx_t_14.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_minute(__pyx_v_arr, &__pyx_t_14)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10215
 *     else:
 *         delta = dt64arr_minute(arr, arr_reso, 0, True)
 *         delta = arr_mul(delta, mi_f, 0, False)             # <<<<<<<<<<<<<<
 *         times = arr_add_arr(times, delta, 0, False)
 * 
*/
    __pyx_t_12.__pyx_n = 2;
    __pyx_t_12.offset = 0;
    __pyx_t_12.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_delta, __pyx_v_mi_f, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10215, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10216
 *         delta = dt64arr_minute(arr, arr_reso, 0, True)
 *         delta = arr_mul(delta, mi_f, 0, False)
 *         times = arr_add_arr(times, delta, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Second replacement -> int64[ns] hh:mm:ss.000000000
*/
    __pyx_t_15.__pyx_n = 2;
    __pyx_t_15.offset = 0;
    __pyx_t_15.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_times, __pyx_v_delta, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10216, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
  }
  __pyx_L6:;

  /* "utils.pxd":10220
 *     # Second replacement -> int64[ns] hh:mm:ss.000000000
 *     # . set to specific second
 *     if second >= 0:             # <<<<<<<<<<<<<<
 *         times = arr_add(times, min(second, 59) * ss_f, False)
 *     # . retain original second
*/
  __pyx_t_1 = (__pyx_v_second >= 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10221
 *     # . set to specific second
 *     if second >= 0:
 *         times = arr_add(times, min(second, 59) * ss_f, False)             # <<<<<<<<<<<<<<
 *     # . retain original second
 *     else:
*/
    __pyx_t_8 = 59;
    __pyx_t_9 = __pyx_v_second;
    __pyx_t_1 = (__pyx_t_8 < __pyx_t_9);
    if (__pyx_t_1) {
      __pyx_t_10 = __pyx_t_8;
    } else {
      __pyx_t_10 = __pyx_t_9;
    }
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_times, (__pyx_t_10 * __pyx_v_ss_f), &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10221, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10220
 *     # Second replacement -> int64[ns] hh:mm:ss.000000000
 *     # . set to specific second
 *     if second >= 0:             # <<<<<<<<<<<<<<
 *         times = arr_add(times, min(second, 59) * ss_f, False)
 *     # . retain original second
*/
    goto __pyx_L7;
  }

  /* "utils.pxd":10224
 *     # . retain original second
 *     else:
 *         delta = dt64arr_second(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *         delta = arr_mul(delta, ss_f, 0, False)
 *         times = arr_add_arr(times, delta, 0, False)
*/
  /*else*/ {
    __pyx_t_16.__pyx_n = 3;
    __pyx_t_16.arr_reso = __pyx_v_arr_reso;
    __pyx_t_16.offset = 0;
    __pyx_t_16.copy = 1;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_second(__pyx_v_arr, &__pyx_t_16)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10224, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10225
 *     else:
 *         delta = dt64arr_second(arr, arr_reso, 0, True)
 *         delta = arr_mul(delta, ss_f, 0, False)             # <<<<<<<<<<<<<<
 *         times = arr_add_arr(times, delta, 0, False)
 * 
*/
    __pyx_t_12.__pyx_n = 2;
    __pyx_t_12.offset = 0;
    __pyx_t_12.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_delta, __pyx_v_ss_f, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10225, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "utils.pxd":10226
 *         delta = dt64arr_second(arr, arr_reso, 0, True)
 *         delta = arr_mul(delta, ss_f, 0, False)
 *         times = arr_add_arr(times, delta, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # . Millisecond replacement -> int64[ns] hh:mm:ss.sss000000
*/
    __pyx_t_15.__pyx_n = 2;
    __pyx_t_15.offset = 0;
    __pyx_t_15.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_times, __pyx_v_delta, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
    __pyx_t_3 = 0;
  }
  __pyx_L7:;

  /* "utils.pxd":10229
 * 
 *     # . Millisecond replacement -> int64[ns] hh:mm:ss.sss000000
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         millisecond = 0 if microsecond < 0 else microsecond // 1000
 *         # . set to specific millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":10230
 *     # . Millisecond replacement -> int64[ns] hh:mm:ss.sss000000
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         millisecond = 0 if microsecond < 0 else microsecond // 1000             # <<<<<<<<<<<<<<
 *         # . set to specific millisecond
 *         if microsecond >= 0:
*/
    __pyx_t_1 = (__pyx_v_microsecond < 0);
    if (__pyx_t_1) {
      __pyx_t_10 = 0;
    } else {
      __pyx_t_10 = __Pyx_div_npy_int64(__pyx_v_microsecond, 0x3E8, 1);
    }
    __pyx_v_millisecond = __pyx_t_10;

    /* "utils.pxd":10232
 *         millisecond = 0 if microsecond < 0 else microsecond // 1000
 *         # . set to specific millisecond
 *         if microsecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(millisecond, 999), False)
 *         # . retain original millisecond
*/
    __pyx_t_1 = (__pyx_v_microsecond >= 0);
    if (__pyx_t_1) {

      /* "utils.pxd":10233
 *         # . set to specific millisecond
 *         if microsecond >= 0:
 *             times = arr_add(times, min(millisecond, 999), False)             # <<<<<<<<<<<<<<
 *         # . retain original millisecond
 *         else:
*/
      __pyx_t_8 = 0x3E7;
      __pyx_t_10 = __pyx_v_millisecond;
      __pyx_t_1 = (__pyx_t_8 < __pyx_t_10);
      if (__pyx_t_1) {
        __pyx_t_9 = __pyx_t_8;
      } else {
        __pyx_t_9 = __pyx_t_10;
      }
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_times, __pyx_t_9, &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10233, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10232
 *         millisecond = 0 if microsecond < 0 else microsecond // 1000
 *         # . set to specific millisecond
 *         if microsecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(millisecond, 999), False)
 *         # . retain original millisecond
*/
      goto __pyx_L9;
    }

    /* "utils.pxd":10236
 *         # . retain original millisecond
 *         else:
 *             delta = dt64arr_millisecond(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *             times = arr_add_arr(times, delta, 0, False)
 * 
*/
    /*else*/ {
      __pyx_t_17.__pyx_n = 3;
      __pyx_t_17.arr_reso = __pyx_v_arr_reso;
      __pyx_t_17.offset = 0;
      __pyx_t_17.copy = 1;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_millisecond(__pyx_v_arr, &__pyx_t_17)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10237
 *         else:
 *             delta = dt64arr_millisecond(arr, arr_reso, 0, True)
 *             times = arr_add_arr(times, delta, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Microsecond replacement -> int64[ns] hh:mm:ss.uuuuuu000
*/
      __pyx_t_15.__pyx_n = 2;
      __pyx_t_15.offset = 0;
      __pyx_t_15.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_times, __pyx_v_delta, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10237, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L9:;

    /* "utils.pxd":10229
 * 
 *     # . Millisecond replacement -> int64[ns] hh:mm:ss.sss000000
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         millisecond = 0 if microsecond < 0 else microsecond // 1000
 *         # . set to specific millisecond
*/
    goto __pyx_L8;
  }

  /* "utils.pxd":10240
 * 
 *     # Microsecond replacement -> int64[ns] hh:mm:ss.uuuuuu000
 *     elif arr_reso != np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # . set to specific microsecond
 *         if microsecond >= 0:
*/
  __pyx_t_1 = (__pyx_v_arr_reso != NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":10242
 *     elif arr_reso != np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # . set to specific microsecond
 *         if microsecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(microsecond, 999_999) * us_f, False)
 *         # . retain original microsecond
*/
    __pyx_t_1 = (__pyx_v_microsecond >= 0);
    if (__pyx_t_1) {

      /* "utils.pxd":10243
 *         # . set to specific microsecond
 *         if microsecond >= 0:
 *             times = arr_add(times, min(microsecond, 999_999) * us_f, False)             # <<<<<<<<<<<<<<
 *         # . retain original microsecond
 *         else:
*/
      __pyx_t_8 = 0xF423F;
      __pyx_t_9 = __pyx_v_microsecond;
      __pyx_t_1 = (__pyx_t_8 < __pyx_t_9);
      if (__pyx_t_1) {
        __pyx_t_10 = __pyx_t_8;
      } else {
        __pyx_t_10 = __pyx_t_9;
      }
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_times, (__pyx_t_10 * __pyx_v_us_f), &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10242
 *     elif arr_reso != np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # . set to specific microsecond
 *         if microsecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(microsecond, 999_999) * us_f, False)
 *         # . retain original microsecond
*/
      goto __pyx_L10;
    }

    /* "utils.pxd":10246
 *         # . retain original microsecond
 *         else:
 *             delta = dt64arr_microsecond(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *             delta = arr_mul(delta, us_f, 0, False)
 *             times = arr_add_arr(times, delta, 0, False)
*/
    /*else*/ {
      __pyx_t_18.__pyx_n = 3;
      __pyx_t_18.arr_reso = __pyx_v_arr_reso;
      __pyx_t_18.offset = 0;
      __pyx_t_18.copy = 1;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_microsecond(__pyx_v_arr, &__pyx_t_18)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10246, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10247
 *         else:
 *             delta = dt64arr_microsecond(arr, arr_reso, 0, True)
 *             delta = arr_mul(delta, us_f, 0, False)             # <<<<<<<<<<<<<<
 *             times = arr_add_arr(times, delta, 0, False)
 * 
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_delta, __pyx_v_us_f, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10248
 *             delta = dt64arr_microsecond(arr, arr_reso, 0, True)
 *             delta = arr_mul(delta, us_f, 0, False)
 *             times = arr_add_arr(times, delta, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Nanosecond replacement -> int64[ns] hh:mm:ss.uuuuuunnn
*/
      __pyx_t_15.__pyx_n = 2;
      __pyx_t_15.offset = 0;
      __pyx_t_15.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_times, __pyx_v_delta, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10248, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L10:;

    /* "utils.pxd":10240
 * 
 *     # Microsecond replacement -> int64[ns] hh:mm:ss.uuuuuu000
 *     elif arr_reso != np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # . set to specific microsecond
 *         if microsecond >= 0:
*/
  }
  __pyx_L8:;

  /* "utils.pxd":10251
 * 
 *     # Nanosecond replacement -> int64[ns] hh:mm:ss.uuuuuunnn
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         # . set to specific nanosecond
 *         if nanosecond >= 0:
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":10253
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         # . set to specific nanosecond
 *         if nanosecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(nanosecond, 999), False)
 *         # . retain original nanosecond
*/
    __pyx_t_1 = (__pyx_v_nanosecond >= 0);
    if (__pyx_t_1) {

      /* "utils.pxd":10254
 *         # . set to specific nanosecond
 *         if nanosecond >= 0:
 *             times = arr_add(times, min(nanosecond, 999), False)             # <<<<<<<<<<<<<<
 *         # . retain original nanosecond
 *         else:
*/
      __pyx_t_8 = 0x3E7;
      __pyx_t_10 = __pyx_v_nanosecond;
      __pyx_t_1 = (__pyx_t_8 < __pyx_t_10);
      if (__pyx_t_1) {
        __pyx_t_9 = __pyx_t_8;
      } else {
        __pyx_t_9 = __pyx_t_10;
      }
      __pyx_t_13.__pyx_n = 1;
      __pyx_t_13.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_times, __pyx_t_9, &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10254, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10253
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *         # . set to specific nanosecond
 *         if nanosecond >= 0:             # <<<<<<<<<<<<<<
 *             times = arr_add(times, min(nanosecond, 999), False)
 *         # . retain original nanosecond
*/
      goto __pyx_L12;
    }

    /* "utils.pxd":10257
 *         # . retain original nanosecond
 *         else:
 *             delta = dt64arr_nanosecond(arr, arr_reso, 0, True)             # <<<<<<<<<<<<<<
 *             times = arr_add_arr(times, delta, 0, False)
 * 
*/
    /*else*/ {
      __pyx_t_19.__pyx_n = 3;
      __pyx_t_19.arr_reso = __pyx_v_arr_reso;
      __pyx_t_19.offset = 0;
      __pyx_t_19.copy = 1;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64arr_nanosecond(__pyx_v_arr, &__pyx_t_19)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_XDECREF_SET(__pyx_v_delta, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10258
 *         else:
 *             delta = dt64arr_nanosecond(arr, arr_reso, 0, True)
 *             times = arr_add_arr(times, delta, 0, False)             # <<<<<<<<<<<<<<
 * 
 *     # Return the time part: int64[arr_reso]
*/
      __pyx_t_15.__pyx_n = 2;
      __pyx_t_15.offset = 0;
      __pyx_t_15.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add_arr(__pyx_v_times, __pyx_v_delta, &__pyx_t_15)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10258, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_times, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;
    }
    __pyx_L12:;

    /* "utils.pxd":10251
 * 
 *     # Nanosecond replacement -> int64[ns] hh:mm:ss.uuuuuunnn
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *         # . set to specific nanosecond
 *         if nanosecond >= 0:
*/
  }

  /* "utils.pxd":10261
 * 
 *     # Return the time part: int64[arr_reso]
 *     return times             # <<<<<<<<<<<<<<
 * 
 * # . arithmetic
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_times);
  __pyx_r = __pyx_v_times;
  goto __pyx_L0;

  /* "utils.pxd":10139
 *     return dateD
 * 
 * cdef inline np.ndarray dt64arr_replace_times(np.ndarray arr, np.npy_int64 hour, np.npy_int64 minute, np.npy_int64 second, np.npy_int64 microsecond, np.npy_int64 nanosecond, int arr_reso=-1):             # <<<<<<<<<<<<<<
 *     """Replace the h/m/s/us/ns components of an ndarray[datetime64] and return the
 *     time components `int64` ticks in the original resolution `<'ndarray[int64]'>`.
*/

  /* 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_AddTraceback("cytimes.utils.dt64arr_replace_times", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_times);
  __Pyx_XDECREF((PyObject *)__pyx_v_delta);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10264
 * 
 * # . arithmetic
 * cdef inline np.ndarray dt64arr_round(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Round a 1-D datetime64 array to the nearest multiple of `to_unit` (ties-to-even) `<'ndarray[datetime64]'>`
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_round(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_to_unit, struct __pyx_opt_args_7cytimes_5utils_dt64arr_round *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  int __pyx_v_is_dt64;
  int __pyx_v_to_reso;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe __pyx_t_9;
  int __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_even __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_even_mul __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_round", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":10290
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  __pyx_t_1 = (__pyx_v_to_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":10291
 *     # Guard
 *     if to_unit is None:
 *         _raise_invalid_nptime_str_unit_error(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Get array resolution
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10291, __pyx_L1_error)

    /* "utils.pxd":10290
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  }

  /* "utils.pxd":10294
 * 
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME             # <<<<<<<<<<<<<<
 *     if arr_reso < 0:
 *         if not is_dt64:
*/
  __pyx_v_is_dt64 = (PyArray_TYPE(__pyx_v_arr) == NPY_DATETIME);

  /* "utils.pxd":10295
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10296
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (!__pyx_v_is_dt64);
    if (__pyx_t_1) {

      /* "utils.pxd":10297
 *     if arr_reso < 0:
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10297, __pyx_L1_error)

      /* "utils.pxd":10296
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10298
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Parse target resolution
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10298, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10295
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10301
 * 
 *     # Parse target resolution
 *     cdef int to_reso = nptime_unit_str2int(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_nptime_unit_str2int(__pyx_v_to_unit); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10301, __pyx_L1_error)
  __pyx_v_to_reso = __pyx_t_2;

  /* "utils.pxd":10305
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  __pyx_t_1 = (__pyx_v_arr_reso <= __pyx_v_to_reso);
  if (__pyx_t_1) {

    /* "utils.pxd":10306
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    if (__pyx_v_is_dt64) {

      /* "utils.pxd":10307
 *     if arr_reso <= to_reso:
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag             # <<<<<<<<<<<<<<
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, 0, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10307, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10306
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    }

    /* "utils.pxd":10308
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 * 
 *     #: Convert to int64
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10308, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __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_3)) __PYX_ERR(5, 10308, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10308, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10305
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  }

  /* "utils.pxd":10311
 * 
 *     #: Convert to int64
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 * 
 *     # To microsecond [us]
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10311, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":10314
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
  switch (__pyx_v_to_reso) {
    case NPY_FR_us:

    /* "utils.pxd":10316
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)
*/
    __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
    if (__pyx_t_1) {

      /* "utils.pxd":10317
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10317, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10318
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_11.__pyx_n = 2;
        __pyx_t_11.offset = 0;
        __pyx_t_11.copy = __pyx_v_copy;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10318, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10319
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, copy)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10319, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10319, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10317
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10321
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, copy)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # Coarser/equal units are handled by fast-path.
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = __pyx_v_copy;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10321, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10322
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, copy)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10322, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10322, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10316
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even(arr, NS_MICROSECOND, 0, copy)
*/
    }

    /* "utils.pxd":10314
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":10328
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10329
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10329, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10330
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10330, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10331
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10331, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10331, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10329
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10333
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10333, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10334
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10334, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10334, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10328
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10337
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10337, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10338
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10338, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10338, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10336
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10326
 * 
 *     # To millisecond [ms]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":10344
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10345
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10345, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10346
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10346, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10347
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_SECOND, NS_SECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10347, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10347, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10345
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10349
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_SECOND, NS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10349, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10350
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_SECOND, NS_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10350, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10350, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10344
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10353
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10353, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10354
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10354, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10354, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10352
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10357
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_SECOND, MS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_SECOND, __pyx_v_7cytimes_5utils_MS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10357, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10358
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10358, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10358, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10356
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10342
 * 
 *     # To second [s]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":10364
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10365
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10365, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10366
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10366, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10367
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10367, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10367, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10365
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10369
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10369, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10370
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10370, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10370, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10364
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10373
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10373, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10374
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10374, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10374, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10372
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10377
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_MINUTE, __pyx_v_7cytimes_5utils_MS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10377, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10378
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10378, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10378, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10376
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10381
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_MINUTE, __pyx_v_7cytimes_5utils_SS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10381, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10382
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10382, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10382, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10380
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10362
 * 
 *     # To minute [m]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":10388
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10389
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10389, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10390
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10390, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10391
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_HOUR, NS_HOUR, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10391, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10391, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10389
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10393
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_HOUR, NS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10393, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10394
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_HOUR, NS_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10394, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10394, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10388
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10397
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10398
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10398, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10398, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10396
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10401
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_HOUR, MS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_HOUR, __pyx_v_7cytimes_5utils_MS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10401, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10402
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10402, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10402, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10400
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10405
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_HOUR, SS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_HOUR, __pyx_v_7cytimes_5utils_SS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10406
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10406, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10406, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10404
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10409
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_even_mul(arr, 60, 60, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, 60, 60, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10409, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10410
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_even_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10410, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10410, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10408
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10386
 * 
 *     # To hour [h]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":10416
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10417
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10417, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10418
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10418, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10419
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_DAY, NS_DAY, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10419, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10419, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10417
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10421
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_DAY, NS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10421, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10422
 *             else:
 *                 arr = arr_div_even_mul(arr, NS_DAY, NS_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10422, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10422, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10416
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_even_mul(arr, NS_DAY, US_DAY, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10425
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10425, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10426
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_even_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10426, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10426, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10424
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10429
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_DAY, MS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10429, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10430
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_even_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10430, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10430, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10428
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10433
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_DAY, SS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10433, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10434
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_even_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10434, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10434, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10432
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10437
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_even_mul(arr, 1440, 1440, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, 0x5A0, 0x5A0, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10437, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10438
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_even_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10438, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10438, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10436
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      case NPY_FR_h:

      /* "utils.pxd":10441
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_even_mul(arr, 24, 24, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_HH)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_even_mul(__pyx_v_arr, 24, 24, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10441, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10442
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_even_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10442, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10442, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10440
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *             arr = arr_div_even_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10414
 * 
 *     # To day [D]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    default: break;
  }

  /* "utils.pxd":10446
 * 
 *     # Invalid unit
 *     _raise_arr_dt64_rcl_error("round", arr_reso, to_unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_ceil(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_arr_dt64_rcl_error(__pyx_mstate_global->__pyx_n_u_round, __pyx_v_arr_reso, __pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10446, __pyx_L1_error)

  /* "utils.pxd":10264
 * 
 * # . arithmetic
 * cdef inline np.ndarray dt64arr_round(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Round a 1-D datetime64 array to the nearest multiple of `to_unit` (ties-to-even) `<'ndarray[datetime64]'>`
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_round", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10448
 *     _raise_arr_dt64_rcl_error("round", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_ceil(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ceil a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_ceil(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_to_unit, struct __pyx_opt_args_7cytimes_5utils_dt64arr_ceil *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  int __pyx_v_is_dt64;
  int __pyx_v_to_reso;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe __pyx_t_9;
  int __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_ceil_mul __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_ceil", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":10474
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  __pyx_t_1 = (__pyx_v_to_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":10475
 *     # Guard
 *     if to_unit is None:
 *         _raise_invalid_nptime_str_unit_error(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Get array resolution
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10475, __pyx_L1_error)

    /* "utils.pxd":10474
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  }

  /* "utils.pxd":10478
 * 
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME             # <<<<<<<<<<<<<<
 *     if arr_reso < 0:
 *         if not is_dt64:
*/
  __pyx_v_is_dt64 = (PyArray_TYPE(__pyx_v_arr) == NPY_DATETIME);

  /* "utils.pxd":10479
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10480
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (!__pyx_v_is_dt64);
    if (__pyx_t_1) {

      /* "utils.pxd":10481
 *     if arr_reso < 0:
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10481, __pyx_L1_error)

      /* "utils.pxd":10480
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10482
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Parse target resolution
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10482, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10479
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10485
 * 
 *     # Parse target resolution
 *     cdef int to_reso = nptime_unit_str2int(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_nptime_unit_str2int(__pyx_v_to_unit); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10485, __pyx_L1_error)
  __pyx_v_to_reso = __pyx_t_2;

  /* "utils.pxd":10489
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  __pyx_t_1 = (__pyx_v_arr_reso <= __pyx_v_to_reso);
  if (__pyx_t_1) {

    /* "utils.pxd":10490
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    if (__pyx_v_is_dt64) {

      /* "utils.pxd":10491
 *     if arr_reso <= to_reso:
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag             # <<<<<<<<<<<<<<
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, 0, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10491, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10490
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    }

    /* "utils.pxd":10492
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 * 
 *     #: Convert to int64
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10492, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __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_3)) __PYX_ERR(5, 10492, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10492, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10489
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  }

  /* "utils.pxd":10495
 * 
 *     #: Convert to int64
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 * 
 *     # To microsecond [us]
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":10498
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
  switch (__pyx_v_to_reso) {
    case NPY_FR_us:

    /* "utils.pxd":10500
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)
*/
    __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
    if (__pyx_t_1) {

      /* "utils.pxd":10501
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10501, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10502
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_11.__pyx_n = 2;
        __pyx_t_11.offset = 0;
        __pyx_t_11.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10502, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10503
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10503, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10503, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10501
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10505
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # Coarser/equal units are handled by fast-path.
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10505, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10506
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10506, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10506, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10500
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil(arr, NS_MICROSECOND, 0, False)
*/
    }

    /* "utils.pxd":10498
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":10512
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10513
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10513, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10514
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10514, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10515
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10515, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10515, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10513
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10517
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10517, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10518
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10518, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10518, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10512
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10521
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10521, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10522
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10522, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10520
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10510
 * 
 *     # To millisecond [ms]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":10528
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10529
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10529, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10530
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10530, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10531
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, NS_SECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10531, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10531, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10529
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10533
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, NS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10533, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10534
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, NS_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10534, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10534, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10528
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10537
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10537, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10538
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10538, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10538, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10536
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10541
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_SECOND, MS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_SECOND, __pyx_v_7cytimes_5utils_MS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10541, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10542
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10542, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10542, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10540
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10526
 * 
 *     # To second [s]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":10548
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10549
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10549, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10550
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10550, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10551
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10551, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10551, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10549
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10553
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10553, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10554
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10554, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10554, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10548
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10557
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10557, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10558
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10558, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10558, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10556
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10561
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_MINUTE, __pyx_v_7cytimes_5utils_MS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10561, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10562
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10562, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10562, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10560
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10565
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_MINUTE, __pyx_v_7cytimes_5utils_SS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10565, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10566
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10566, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10566, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10564
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10546
 * 
 *     # To minute [m]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":10572
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10573
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10573, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10574
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10574, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10575
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, NS_HOUR, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10575, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10575, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10573
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10577
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, NS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10577, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10578
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, NS_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10578, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10578, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10572
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10581
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10581, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10582
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10582, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10582, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10580
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10585
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_HOUR, MS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_HOUR, __pyx_v_7cytimes_5utils_MS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10585, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10586
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10586, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10586, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10584
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10589
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_HOUR, SS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_HOUR, __pyx_v_7cytimes_5utils_SS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10590
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10590, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10590, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10588
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10593
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_ceil_mul(arr, 60, 60, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, 60, 60, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10593, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10594
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_ceil_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10594, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10594, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10592
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10570
 * 
 *     # To hour [h]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":10600
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10601
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10601, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10602
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10602, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10603
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, NS_DAY, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10603, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10603, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10601
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10605
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, NS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10605, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10606
 *             else:
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, NS_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10606, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10606, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10600
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_ceil_mul(arr, NS_DAY, US_DAY, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10609
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10609, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10610
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_ceil_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10610, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10610, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10608
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10613
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_DAY, MS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10614
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_ceil_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10614, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10614, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10612
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10617
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_DAY, SS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10617, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10618
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_ceil_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10618, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10618, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10616
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10621
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_ceil_mul(arr, 1440, 1440, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, 0x5A0, 0x5A0, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10621, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10622
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_ceil_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10622, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10622, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10620
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      case NPY_FR_h:

      /* "utils.pxd":10625
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_ceil_mul(arr, 24, 24, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_HH)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_ceil_mul(__pyx_v_arr, 24, 24, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10625, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10626
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_ceil_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10626, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10626, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10624
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *             arr = arr_div_ceil_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10598
 * 
 *     # To day [D]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    default: break;
  }

  /* "utils.pxd":10630
 * 
 *     # Invalid unit
 *     _raise_arr_dt64_rcl_error("ceil", arr_reso, to_unit)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray dt64arr_floor(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_arr_dt64_rcl_error(__pyx_mstate_global->__pyx_n_u_ceil, __pyx_v_arr_reso, __pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10630, __pyx_L1_error)

  /* "utils.pxd":10448
 *     _raise_arr_dt64_rcl_error("round", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_ceil(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Ceil a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_ceil", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10632
 *     _raise_arr_dt64_rcl_error("ceil", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_floor(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Floor a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_dt64arr_floor(PyArrayObject *__pyx_v_arr, PyObject *__pyx_v_to_unit, struct __pyx_opt_args_7cytimes_5utils_dt64arr_floor *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  int __pyx_v_copy = ((int)1);
  int __pyx_v_is_dt64;
  int __pyx_v_to_reso;
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_is_dt64arr_ns_safe __pyx_t_9;
  int __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor_mul __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("dt64arr_floor", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":10658
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  __pyx_t_1 = (__pyx_v_to_unit == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "utils.pxd":10659
 *     # Guard
 *     if to_unit is None:
 *         _raise_invalid_nptime_str_unit_error(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Get array resolution
*/
    __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_invalid_nptime_str_unit_error(__pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10659, __pyx_L1_error)

    /* "utils.pxd":10658
 *     """
 *     # Guard
 *     if to_unit is None:             # <<<<<<<<<<<<<<
 *         _raise_invalid_nptime_str_unit_error(to_unit)
 * 
*/
  }

  /* "utils.pxd":10662
 * 
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME             # <<<<<<<<<<<<<<
 *     if arr_reso < 0:
 *         if not is_dt64:
*/
  __pyx_v_is_dt64 = (PyArray_TYPE(__pyx_v_arr) == NPY_DATETIME);

  /* "utils.pxd":10663
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10664
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (!__pyx_v_is_dt64);
    if (__pyx_t_1) {

      /* "utils.pxd":10665
 *     if arr_reso < 0:
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10665, __pyx_L1_error)

      /* "utils.pxd":10664
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:
 *         if not is_dt64:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10666
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Parse target resolution
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10666, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10663
 *     # Get array resolution
 *     cdef bint is_dt64 = np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_DATETIME
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if not is_dt64:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10669
 * 
 *     # Parse target resolution
 *     cdef int to_reso = nptime_unit_str2int(to_unit)             # <<<<<<<<<<<<<<
 * 
 *     # Fast-path
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_nptime_unit_str2int(__pyx_v_to_unit); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10669, __pyx_L1_error)
  __pyx_v_to_reso = __pyx_t_2;

  /* "utils.pxd":10673
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  __pyx_t_1 = (__pyx_v_arr_reso <= __pyx_v_to_reso);
  if (__pyx_t_1) {

    /* "utils.pxd":10674
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    if (__pyx_v_is_dt64) {

      /* "utils.pxd":10675
 *     if arr_reso <= to_reso:
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag             # <<<<<<<<<<<<<<
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.copy = __pyx_v_copy;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, 0, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10675, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10674
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:
 *         if is_dt64:             # <<<<<<<<<<<<<<
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))
*/
    }

    /* "utils.pxd":10676
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
 *         return arr.astype(nptime_unit_int2dt64(arr_reso))             # <<<<<<<<<<<<<<
 * 
 *     #: Convert to int64
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5 = ((PyObject *)__pyx_v_arr);
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_6 = __pyx_f_7cytimes_5utils_nptime_unit_int2dt64(__pyx_v_arr_reso); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10676, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 0;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __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_3)) __PYX_ERR(5, 10676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
    }
    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10676, __pyx_L1_error)
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10673
 *     # Fast-path
 *     #: source is coarser or equal to target (no rounding needed)
 *     if arr_reso <= to_reso:             # <<<<<<<<<<<<<<
 *         if is_dt64:
 *             return arr_add(arr, 0, copy)  # honor `copy` flag
*/
  }

  /* "utils.pxd":10679
 * 
 *     #: Convert to int64
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 * 
 *     # To microsecond [us]
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10679, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":10682
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
  switch (__pyx_v_to_reso) {
    case NPY_FR_us:

    /* "utils.pxd":10684
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
*/
    __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
    if (__pyx_t_1) {

      /* "utils.pxd":10685
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10685, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10686
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_11.__pyx_n = 2;
        __pyx_t_11.offset = 0;
        __pyx_t_11.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_11)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10686, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10687
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10687, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10687, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10685
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10689
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # Coarser/equal units are handled by fast-path.
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10689, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10690
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MICROSECOND, NS_MICROSECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10690, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10690, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10684
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor(arr, NS_MICROSECOND, 0, False)
*/
    }

    /* "utils.pxd":10682
 * 
 *     # To microsecond [us]
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [us]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_ms:

    /* "utils.pxd":10696
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10697
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10697, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10698
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10698, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10699
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10699, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10699, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10697
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10701
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MILLISECOND, __pyx_v_7cytimes_5utils_NS_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10701, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10702
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, NS_MILLISECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10702, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10702, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10696
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MILLISECOND, US_MILLISECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10705
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10705, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10706
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10706, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10706, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10704
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [ms]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, US_MILLISECOND, US_MILLISECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10694
 * 
 *     # To millisecond [ms]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [ms]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_s:

    /* "utils.pxd":10712
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10713
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10713, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10714
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10714, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10715
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, NS_SECOND, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10715, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10715, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10713
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10717
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, NS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_SECOND, __pyx_v_7cytimes_5utils_NS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10717, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10718
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, NS_SECOND, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10718, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10718, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10712
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_SECOND, US_SECOND, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10721
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_SECOND, US_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10721, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10722
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10722, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10722, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10720
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, US_SECOND, US_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10725
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_SECOND, MS_SECOND, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_SECOND, __pyx_v_7cytimes_5utils_MS_SECOND, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10725, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10726
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10726, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10726, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10724
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [s]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, MS_SECOND, MS_SECOND, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10710
 * 
 *     # To second [s]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [s]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_m:

    /* "utils.pxd":10732
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10733
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10733, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10734
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10734, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10735
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10735, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10735, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10733
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10737
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MINUTE, __pyx_v_7cytimes_5utils_NS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10737, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10738
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, NS_MINUTE, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10738, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10738, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10732
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_MINUTE, US_MINUTE, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10741
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_MINUTE, US_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10741, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10742
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10742, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10742, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10740
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, US_MINUTE, US_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10745
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_MINUTE, __pyx_v_7cytimes_5utils_MS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10745, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10746
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10746, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10746, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10744
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, MS_MINUTE, MS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10749
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_MINUTE, __pyx_v_7cytimes_5utils_SS_MINUTE, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10749, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10750
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10750, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10750, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10748
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [m]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, SS_MINUTE, SS_MINUTE, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10730
 * 
 *     # To minute [m]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [m]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_h:

    /* "utils.pxd":10756
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10757
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10757, __pyx_L1_error)
      __pyx_t_10 = (!__pyx_t_1);
      if (__pyx_t_10) {

        /* "utils.pxd":10758
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10758, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10759
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, NS_HOUR, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10759, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10759, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10757
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10761
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, NS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_HOUR, __pyx_v_7cytimes_5utils_NS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10761, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10762
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, NS_HOUR, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10762, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10762, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10756
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_HOUR, US_HOUR, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10765
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_HOUR, US_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10765, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10766
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10766, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10766, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10764
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, US_HOUR, US_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10769
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_HOUR, MS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_HOUR, __pyx_v_7cytimes_5utils_MS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10769, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10770
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10770, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10770, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10768
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, MS_HOUR, MS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10773
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_HOUR, SS_HOUR, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_HOUR, __pyx_v_7cytimes_5utils_SS_HOUR, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10773, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10774
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10774, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10774, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10772
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, SS_HOUR, SS_HOUR, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10777
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_floor_mul(arr, 60, 60, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, 60, 60, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10777, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10778
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_floor_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10778, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10778, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10776
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [h]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, 60, 60, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10754
 * 
 *     # To hour [h]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [h]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    case NPY_FR_D:

    /* "utils.pxd":10784
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)
*/
    switch (__pyx_v_arr_reso) {
      case NPY_FR_ns:

      /* "utils.pxd":10785
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      __pyx_t_9.__pyx_n = 1;
      __pyx_t_9.arr_reso = NPY_FR_ns;
      __pyx_t_10 = __pyx_f_7cytimes_5utils_is_dt64arr_ns_safe(__pyx_v_arr, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(5, 10785, __pyx_L1_error)
      __pyx_t_1 = (!__pyx_t_10);
      if (__pyx_t_1) {

        /* "utils.pxd":10786
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
*/
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10786, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10787
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_DAY, NS_DAY, 0, False)
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10787, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10787, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;

        /* "utils.pxd":10785
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):             # <<<<<<<<<<<<<<
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_US)
*/
      }

      /* "utils.pxd":10789
 *                 return arr.astype(DT64_DTYPE_US)
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_DAY, NS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
*/
      /*else*/ {
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.offset = 0;
        __pyx_t_12.copy = 0;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_DAY, __pyx_v_7cytimes_5utils_NS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10789, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
        __pyx_t_3 = 0;

        /* "utils.pxd":10790
 *             else:
 *                 arr = arr_div_floor_mul(arr, NS_DAY, NS_DAY, 0, False)
 *                 return arr.astype(DT64_DTYPE_NS)             # <<<<<<<<<<<<<<
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_6 = ((PyObject *)__pyx_v_arr);
        __Pyx_INCREF(__pyx_t_6);
        __pyx_t_7 = 0;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_NS};
          __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10790, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
        }
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10790, __pyx_L1_error)
        __pyx_r = ((PyArrayObject *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }

      /* "utils.pxd":10784
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:             # <<<<<<<<<<<<<<
 *             if not is_dt64arr_ns_safe(arr, np.NPY_DATETIMEUNIT.NPY_FR_ns):
 *                 arr = arr_div_floor_mul(arr, NS_DAY, US_DAY, 0, False)
*/
      break;
      case NPY_FR_us:

      /* "utils.pxd":10793
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_DAY, US_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10793, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10794
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:
 *             arr = arr_div_floor_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)             # <<<<<<<<<<<<<<
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_US};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10794, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10794, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10792
 *                 return arr.astype(DT64_DTYPE_NS)
 *         # my_unit [us] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, US_DAY, US_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_US)
*/
      break;
      case NPY_FR_ms:

      /* "utils.pxd":10797
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_DAY, MS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_MS_DAY, __pyx_v_7cytimes_5utils_MS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10797, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10798
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:
 *             arr = arr_div_floor_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)             # <<<<<<<<<<<<<<
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10798, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10798, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10796
 *             return arr.astype(DT64_DTYPE_US)
 *         # my_unit [ms] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, MS_DAY, MS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_MS)
*/
      break;
      case NPY_FR_s:

      /* "utils.pxd":10801
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_DAY, SS_DAY, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_SS_DAY, __pyx_v_7cytimes_5utils_SS_DAY, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10801, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10802
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:
 *             arr = arr_div_floor_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)             # <<<<<<<<<<<<<<
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_SS};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10802, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10802, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10800
 *             return arr.astype(DT64_DTYPE_MS)
 *         # my_unit [s] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, SS_DAY, SS_DAY, 0, False)
 *             return arr.astype(DT64_DTYPE_SS)
*/
      break;
      case NPY_FR_m:

      /* "utils.pxd":10805
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_floor_mul(arr, 1440, 1440, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, 0x5A0, 0x5A0, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10805, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10806
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:
 *             arr = arr_div_floor_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)             # <<<<<<<<<<<<<<
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_MI};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10806, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10806, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10804
 *             return arr.astype(DT64_DTYPE_SS)
 *         # my_unit [m] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, 1440, 1440, 0, False)
 *             return arr.astype(DT64_DTYPE_MI)
*/
      break;
      case NPY_FR_h:

      /* "utils.pxd":10809
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_floor_mul(arr, 24, 24, 0, False)             # <<<<<<<<<<<<<<
 *             return arr.astype(DT64_DTYPE_HH)
 *         # Coarser/equal units are handled by fast-path.
*/
      __pyx_t_12.__pyx_n = 2;
      __pyx_t_12.offset = 0;
      __pyx_t_12.copy = 0;
      __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor_mul(__pyx_v_arr, 24, 24, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10809, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
      __pyx_t_3 = 0;

      /* "utils.pxd":10810
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:
 *             arr = arr_div_floor_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)             # <<<<<<<<<<<<<<
 *         # Coarser/equal units are handled by fast-path.
 * 
*/
      __Pyx_XDECREF((PyObject *)__pyx_r);
      __pyx_t_6 = ((PyObject *)__pyx_v_arr);
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_7 = 0;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_v_7cytimes_5utils_DT64_DTYPE_HH};
        __pyx_t_3 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_astype, __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (1*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10810, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
      }
      if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_mstate_global->__pyx_ptype_5numpy_ndarray))))) __PYX_ERR(5, 10810, __pyx_L1_error)
      __pyx_r = ((PyArrayObject *)__pyx_t_3);
      __pyx_t_3 = 0;
      goto __pyx_L0;

      /* "utils.pxd":10808
 *             return arr.astype(DT64_DTYPE_MI)
 *         # my_unit [h] -> [D]
 *         elif arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:             # <<<<<<<<<<<<<<
 *             arr = arr_div_floor_mul(arr, 24, 24, 0, False)
 *             return arr.astype(DT64_DTYPE_HH)
*/
      break;
      default: break;
    }

    /* "utils.pxd":10782
 * 
 *     # To day [D]
 *     elif to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:             # <<<<<<<<<<<<<<
 *         # my_unit [ns] -> [D]
 *         if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:
*/
    break;
    default: break;
  }

  /* "utils.pxd":10814
 * 
 *     # Invalid unit
 *     _raise_arr_dt64_rcl_error("floor", arr_reso, to_unit)             # <<<<<<<<<<<<<<
 * 
 * # . errors
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_arr_dt64_rcl_error(__pyx_mstate_global->__pyx_n_u_floor, __pyx_v_arr_reso, __pyx_v_to_unit); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10814, __pyx_L1_error)

  /* "utils.pxd":10632
 *     _raise_arr_dt64_rcl_error("ceil", arr_reso, to_unit)
 * 
 * cdef inline np.ndarray dt64arr_floor(np.ndarray arr, str to_unit, int arr_reso=-1, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Floor a 1-D datetime64 array to the nearest multiple of `to_unit` `<'ndarray[datetime64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.utils.dt64arr_floor", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10817
 * 
 * # . errors
 * cdef inline bint _raise_missing_arr_reso_error(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for array missing resolution information.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(PyArrayObject *__pyx_v_arr) {
  int __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_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_missing_arr_reso_error", 0);

  /* "utils.pxd":10822
 *     :param arr `<'np.ndarray'>`: The array missing resolution information.
 *     """
 *     raise ValueError(             # <<<<<<<<<<<<<<
 *         "missing time resolution for <ndarray[%s]>. "
 *         "Pleae provide the `arr_reso` (NPY_DATETIMEUNIT enum) of the array." % arr.dtype
*/
  __pyx_t_2 = NULL;

  /* "utils.pxd":10824
 *     raise ValueError(
 *         "missing time resolution for <ndarray[%s]>. "
 *         "Pleae provide the `arr_reso` (NPY_DATETIMEUNIT enum) of the array." % arr.dtype             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_missing_time_resolution_for_ndar, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 10824, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_4};
    __pyx_t_1 = __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_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10822, __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(5, 10822, __pyx_L1_error)

  /* "utils.pxd":10817
 * 
 * # . errors
 * cdef inline bint _raise_missing_arr_reso_error(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for array missing resolution information.
 * 
*/

  /* 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("cytimes.utils._raise_missing_arr_reso_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10827
 *     )
 * 
 * cdef inline bint _raise_dt64arr_to_reso_error(np.ndarray arr, int arr_reso, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported conversion unit for datetime-like array.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(PyArrayObject *__pyx_v_arr, int __pyx_v_arr_reso, PyObject *__pyx_v_to_unit) {
  PyObject *__pyx_v_dtype_str = 0;
  PyObject *__pyx_v_arr_reso_str = 0;
  PyObject *__pyx_v_err = NULL;
  int __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;
  PyObject *__pyx_t_8[7];
  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;
  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;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  PyObject *__pyx_t_23 = NULL;
  PyObject *__pyx_t_24[27];
  PyObject *__pyx_t_25 = NULL;
  int __pyx_t_26;
  char const *__pyx_t_27;
  PyObject *__pyx_t_28 = NULL;
  PyObject *__pyx_t_29 = NULL;
  PyObject *__pyx_t_30 = NULL;
  PyObject *__pyx_t_31 = NULL;
  PyObject *__pyx_t_32 = NULL;
  PyObject *__pyx_t_33 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_raise_dt64arr_to_reso_error", 0);

  /* "utils.pxd":10834
 *     :param to_unit `<'str'>`: The target conversion numpy unit.
 *     """
 *     cdef str dtype_str = str(arr.dtype)             # <<<<<<<<<<<<<<
 *     cdef str arr_reso_str
 *     try:
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 10834, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_dtype_str = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "utils.pxd":10836
 *     cdef str dtype_str = str(arr.dtype)
 *     cdef str arr_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    /*try:*/ {

      /* "utils.pxd":10837
 *     cdef str arr_reso_str
 *     try:
 *         arr_reso_str = nptime_unit_int2str(arr_reso)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         raise ValueError(
*/
      __pyx_t_2 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_arr_reso); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 10837, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_v_arr_reso_str = ((PyObject*)__pyx_t_2);
      __pyx_t_2 = 0;

      /* "utils.pxd":10836
 *     cdef str dtype_str = str(arr.dtype)
 *     cdef str arr_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:
*/
    }

    /* "utils.pxd":10859
 *         ) from err
 *     else:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot convert ndarray[%s[%s]] to int64 '%s' ticks.\n"
 *             "Supported resolution: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
*/
    /*else:*/ {
      __pyx_t_1 = NULL;

      /* "utils.pxd":10862
 *             "Cannot convert ndarray[%s[%s]] to int64 '%s' ticks.\n"
 *             "Supported resolution: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
 *             % (dtype_str, arr_reso_str, to_unit)             # <<<<<<<<<<<<<<
 *         )
 * 
*/
      __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_arr_reso_str); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10862, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_7 = __Pyx_PyUnicode_Unicode(__pyx_v_to_unit); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 10862, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert_ndarray;
      __pyx_t_8[1] = __pyx_v_dtype_str;
      __pyx_t_8[2] = __pyx_mstate_global->__pyx_kp_u__10;
      __pyx_t_8[3] = __pyx_t_6;
      __pyx_t_8[4] = __pyx_mstate_global->__pyx_kp_u_to_int64_2;
      __pyx_t_8[5] = __pyx_t_7;
      __pyx_t_8[6] = __pyx_mstate_global->__pyx_kp_u_ticks_Supported_resolution_Y_M;

      /* "utils.pxd":10860
 *     else:
 *         raise ValueError(
 *             "Cannot convert ndarray[%s[%s]] to int64 '%s' ticks.\n"             # <<<<<<<<<<<<<<
 *             "Supported resolution: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'"
 *             % (dtype_str, arr_reso_str, to_unit)
*/
      __pyx_t_9 = __Pyx_PyUnicode_Join(__pyx_t_8, 7, 23 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_dtype_str) + 1 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 13 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 82, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_dtype_str) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7));
      if (unlikely(!__pyx_t_9)) __PYX_ERR(5, 10860, __pyx_L5_except_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_1, __pyx_t_9};
        __pyx_t_2 = __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_1); __pyx_t_1 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 10859, __pyx_L5_except_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(5, 10859, __pyx_L5_except_error)
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "utils.pxd":10838
 *     try:
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert ndarray[%s] from '%d' unit to int64 '%s' ticks.\n"
*/
    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_11) {
      __Pyx_AddTraceback("cytimes.utils._raise_dt64arr_to_reso_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_9, &__pyx_t_1) < 0) __PYX_ERR(5, 10838, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_9);
      __pyx_v_err = __pyx_t_9;
      /*try:*/ {

        /* "utils.pxd":10839
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:
 *         raise ValueError(             # <<<<<<<<<<<<<<
 *             "Cannot convert ndarray[%s] from '%d' unit to int64 '%s' ticks.\n"
 *             "Supported units: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
*/
        __pyx_t_6 = NULL;

        /* "utils.pxd":10844
 *             "%d's', %d'ms', %d'us', %d'ns'" % (
 *                 dtype_str,
 *                 arr_reso,             # <<<<<<<<<<<<<<
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,
*/
        __pyx_t_12 = __Pyx_PyUnicode_From_int(__pyx_v_arr_reso, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(5, 10844, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_12);

        /* "utils.pxd":10845
 *                 dtype_str,
 *                 arr_reso,
 *                 to_unit,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,
*/
        __pyx_t_13 = __Pyx_PyUnicode_Unicode(__pyx_v_to_unit); if (unlikely(!__pyx_t_13)) __PYX_ERR(5, 10845, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_13);

        /* "utils.pxd":10846
 *                 arr_reso,
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,
*/
        __pyx_t_14 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_YY, 0, ' ', 'd'); if (unlikely(!__pyx_t_14)) __PYX_ERR(5, 10846, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_14);

        /* "utils.pxd":10847
 *                 to_unit,
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,
*/
        __pyx_t_15 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MM, 0, ' ', 'd'); if (unlikely(!__pyx_t_15)) __PYX_ERR(5, 10847, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_15);

        /* "utils.pxd":10848
 *                 DT_NPY_UNIT_YY,
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,
*/
        __pyx_t_16 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_WW, 0, ' ', 'd'); if (unlikely(!__pyx_t_16)) __PYX_ERR(5, 10848, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_16);

        /* "utils.pxd":10849
 *                 DT_NPY_UNIT_MM,
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,
*/
        __pyx_t_17 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_DD, 0, ' ', 'd'); if (unlikely(!__pyx_t_17)) __PYX_ERR(5, 10849, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_17);

        /* "utils.pxd":10850
 *                 DT_NPY_UNIT_WW,
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,
*/
        __pyx_t_18 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_HH, 0, ' ', 'd'); if (unlikely(!__pyx_t_18)) __PYX_ERR(5, 10850, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_18);

        /* "utils.pxd":10851
 *                 DT_NPY_UNIT_DD,
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,
*/
        __pyx_t_19 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MI, 0, ' ', 'd'); if (unlikely(!__pyx_t_19)) __PYX_ERR(5, 10851, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_19);

        /* "utils.pxd":10852
 *                 DT_NPY_UNIT_HH,
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,
*/
        __pyx_t_20 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_SS, 0, ' ', 'd'); if (unlikely(!__pyx_t_20)) __PYX_ERR(5, 10852, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_20);

        /* "utils.pxd":10853
 *                 DT_NPY_UNIT_MI,
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_US,
 *                 DT_NPY_UNIT_NS,
*/
        __pyx_t_21 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_MS, 0, ' ', 'd'); if (unlikely(!__pyx_t_21)) __PYX_ERR(5, 10853, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_21);

        /* "utils.pxd":10854
 *                 DT_NPY_UNIT_SS,
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,             # <<<<<<<<<<<<<<
 *                 DT_NPY_UNIT_NS,
 *             )
*/
        __pyx_t_22 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_US, 0, ' ', 'd'); if (unlikely(!__pyx_t_22)) __PYX_ERR(5, 10854, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_22);

        /* "utils.pxd":10855
 *                 DT_NPY_UNIT_MS,
 *                 DT_NPY_UNIT_US,
 *                 DT_NPY_UNIT_NS,             # <<<<<<<<<<<<<<
 *             )
 *         ) from err
*/
        __pyx_t_23 = __Pyx_PyUnicode_From_int(__pyx_v_7cytimes_5utils_DT_NPY_UNIT_NS, 0, ' ', 'd'); if (unlikely(!__pyx_t_23)) __PYX_ERR(5, 10855, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_23);
        __pyx_t_24[0] = __pyx_mstate_global->__pyx_kp_u_Cannot_convert_ndarray;
        __pyx_t_24[1] = __pyx_v_dtype_str;
        __pyx_t_24[2] = __pyx_mstate_global->__pyx_kp_u_from_2;
        __pyx_t_24[3] = __pyx_t_12;
        __pyx_t_24[4] = __pyx_mstate_global->__pyx_kp_u_unit_to_int64;
        __pyx_t_24[5] = __pyx_t_13;
        __pyx_t_24[6] = __pyx_mstate_global->__pyx_kp_u_ticks_Supported_units;
        __pyx_t_24[7] = __pyx_t_14;
        __pyx_t_24[8] = __pyx_mstate_global->__pyx_kp_u_Y_2;
        __pyx_t_24[9] = __pyx_t_15;
        __pyx_t_24[10] = __pyx_mstate_global->__pyx_kp_u_M_2;
        __pyx_t_24[11] = __pyx_t_16;
        __pyx_t_24[12] = __pyx_mstate_global->__pyx_kp_u_W_2;
        __pyx_t_24[13] = __pyx_t_17;
        __pyx_t_24[14] = __pyx_mstate_global->__pyx_kp_u_D_2;
        __pyx_t_24[15] = __pyx_t_18;
        __pyx_t_24[16] = __pyx_mstate_global->__pyx_kp_u_h_2;
        __pyx_t_24[17] = __pyx_t_19;
        __pyx_t_24[18] = __pyx_mstate_global->__pyx_kp_u_m_2;
        __pyx_t_24[19] = __pyx_t_20;
        __pyx_t_24[20] = __pyx_mstate_global->__pyx_kp_u_s_2;
        __pyx_t_24[21] = __pyx_t_21;
        __pyx_t_24[22] = __pyx_mstate_global->__pyx_kp_u_ms_2;
        __pyx_t_24[23] = __pyx_t_22;
        __pyx_t_24[24] = __pyx_mstate_global->__pyx_kp_u_us_2;
        __pyx_t_24[25] = __pyx_t_23;
        __pyx_t_24[26] = __pyx_mstate_global->__pyx_kp_u_ns_2;

        /* "utils.pxd":10840
 *     except Exception as err:
 *         raise ValueError(
 *             "Cannot convert ndarray[%s] from '%d' unit to int64 '%s' ticks.\n"             # <<<<<<<<<<<<<<
 *             "Supported units: %d'Y', %d'M', %d'W', %d'D', %d'h', %d'm', "
 *             "%d's', %d'ms', %d'us', %d'ns'" % (
*/
        __pyx_t_25 = __Pyx_PyUnicode_Join(__pyx_t_24, 27, 23 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_dtype_str) + 8 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13) + 26 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_14) + 6 * 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_15) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_16) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_19) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_20) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_21) + 7 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_22) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_23) + 5, 65535 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_dtype_str) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_13));
        if (unlikely(!__pyx_t_25)) __PYX_ERR(5, 10840, __pyx_L14_error)
        __Pyx_GOTREF(__pyx_t_25);
        __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_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;
        __Pyx_DECREF(__pyx_t_19); __pyx_t_19 = 0;
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
        __Pyx_DECREF(__pyx_t_21); __pyx_t_21 = 0;
        __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
        __Pyx_DECREF(__pyx_t_23); __pyx_t_23 = 0;
        __pyx_t_10 = 1;
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_25};
          __pyx_t_7 = __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_6); __pyx_t_6 = 0;
          __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
          if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 10839, __pyx_L14_error)
          __Pyx_GOTREF(__pyx_t_7);
        }

        /* "utils.pxd":10857
 *                 DT_NPY_UNIT_NS,
 *             )
 *         ) from err             # <<<<<<<<<<<<<<
 *     else:
 *         raise ValueError(
*/
        __Pyx_Raise(__pyx_t_7, 0, 0, __pyx_v_err);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(5, 10839, __pyx_L14_error)
      }

      /* "utils.pxd":10838
 *     try:
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         raise ValueError(
 *             "Cannot convert ndarray[%s] from '%d' unit to int64 '%s' ticks.\n"
*/
      /*finally:*/ {
        __pyx_L14_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
          __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
          __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
          __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
          __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
          __Pyx_XDECREF(__pyx_t_25); __pyx_t_25 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_31, &__pyx_t_32, &__pyx_t_33);
          if ( unlikely(__Pyx_GetException(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30) < 0)) __Pyx_ErrFetch(&__pyx_t_28, &__pyx_t_29, &__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_28);
          __Pyx_XGOTREF(__pyx_t_29);
          __Pyx_XGOTREF(__pyx_t_30);
          __Pyx_XGOTREF(__pyx_t_31);
          __Pyx_XGOTREF(__pyx_t_32);
          __Pyx_XGOTREF(__pyx_t_33);
          __pyx_t_11 = __pyx_lineno; __pyx_t_26 = __pyx_clineno; __pyx_t_27 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_31);
          __Pyx_XGIVEREF(__pyx_t_32);
          __Pyx_XGIVEREF(__pyx_t_33);
          __Pyx_ExceptionReset(__pyx_t_31, __pyx_t_32, __pyx_t_33);
          __Pyx_XGIVEREF(__pyx_t_28);
          __Pyx_XGIVEREF(__pyx_t_29);
          __Pyx_XGIVEREF(__pyx_t_30);
          __Pyx_ErrRestore(__pyx_t_28, __pyx_t_29, __pyx_t_30);
          __pyx_t_28 = 0; __pyx_t_29 = 0; __pyx_t_30 = 0; __pyx_t_31 = 0; __pyx_t_32 = 0; __pyx_t_33 = 0;
          __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_26; __pyx_filename = __pyx_t_27;
          goto __pyx_L5_except_error;
        }
      }
    }
    goto __pyx_L5_except_error;

    /* "utils.pxd":10836
 *     cdef str dtype_str = str(arr.dtype)
 *     cdef str arr_reso_str
 *     try:             # <<<<<<<<<<<<<<
 *         arr_reso_str = nptime_unit_int2str(arr_reso)
 *     except Exception as err:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
  }

  /* "utils.pxd":10827
 *     )
 * 
 * cdef inline bint _raise_dt64arr_to_reso_error(np.ndarray arr, int arr_reso, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported conversion unit for datetime-like array.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __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_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_19);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_XDECREF(__pyx_t_21);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_25);
  __Pyx_AddTraceback("cytimes.utils._raise_dt64arr_to_reso_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_XDECREF(__pyx_v_dtype_str);
  __Pyx_XDECREF(__pyx_v_arr_reso_str);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10865
 *         )
 * 
 * cdef inline bint _raise_arr_dt64_rcl_error(str ops, int arr_reso, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported unit for 'dt64arr_round/ceil/floor()' functions.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils__raise_arr_dt64_rcl_error(PyObject *__pyx_v_ops, int __pyx_v_arr_reso, PyObject *__pyx_v_to_unit) {
  int __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[7];
  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("_raise_arr_dt64_rcl_error", 0);

  /* "utils.pxd":10872
 *     :param to_unit `<'str'>`: The target round/ceil/floor numpy unit.
 *     """
 *     raise ValueError(             # <<<<<<<<<<<<<<
 *         "Failed: <'ndarray[datetime64[%s]]'> %s to '%s' resolution is not supported."
 *         % (nptime_unit_int2str(arr_reso), ops, to_unit)
*/
  __pyx_t_2 = NULL;

  /* "utils.pxd":10874
 *     raise ValueError(
 *         "Failed: <'ndarray[datetime64[%s]]'> %s to '%s' resolution is not supported."
 *         % (nptime_unit_int2str(arr_reso), ops, to_unit)             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_3 = __pyx_f_7cytimes_5utils_nptime_unit_int2str(__pyx_v_arr_reso); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyUnicode_Unicode(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 10874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_v_ops); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyUnicode_Unicode(__pyx_v_to_unit); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10874, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u_Failed_ndarray_datetime64;
  __pyx_t_6[1] = __pyx_t_4;
  __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u__11;
  __pyx_t_6[3] = __pyx_t_3;
  __pyx_t_6[4] = __pyx_mstate_global->__pyx_kp_u_to;
  __pyx_t_6[5] = __pyx_t_5;
  __pyx_t_6[6] = __pyx_mstate_global->__pyx_kp_u_resolution_is_not_supported;

  /* "utils.pxd":10873
 *     """
 *     raise ValueError(
 *         "Failed: <'ndarray[datetime64[%s]]'> %s to '%s' resolution is not supported."             # <<<<<<<<<<<<<<
 *         % (nptime_unit_int2str(arr_reso), ops, to_unit)
 *     )
*/
  __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 7, 29 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 5 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 30, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
  if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 10873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, __pyx_t_7};
    __pyx_t_1 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10872, __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(5, 10872, __pyx_L1_error)

  /* "utils.pxd":10865
 *         )
 * 
 * cdef inline bint _raise_arr_dt64_rcl_error(str ops, int arr_reso, str to_unit) except -1:             # <<<<<<<<<<<<<<
 *     """(internal) Raise error for unsupported unit for 'dt64arr_round/ceil/floor()' functions.
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("cytimes.utils._raise_arr_dt64_rcl_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10879
 * # NumPy: ndarray[timedelta64] --------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_td64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if the array is dtype of 'timedelta64[*]' `<'bool'>`.
 * 
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_is_td64arr(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;

  /* "utils.pxd":10885
 *     >>> isinstance(arr.dtype, np.dtypes.TimeDelta64DType)
 *     """
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_TIMEDELTA             # <<<<<<<<<<<<<<
 * 
 * cdef inline bint assure_td64arr(np.ndarray arr) except -1:
*/
  __pyx_r = (PyArray_TYPE(__pyx_v_arr) == NPY_TIMEDELTA);
  goto __pyx_L0;

  /* "utils.pxd":10879
 * # NumPy: ndarray[timedelta64] --------------------------------------------------------------------------
 * # . type check
 * cdef inline bint is_td64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Check if the array is dtype of 'timedelta64[*]' `<'bool'>`.
 * 
*/

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

/* "utils.pxd":10887
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_TIMEDELTA
 * 
 * cdef inline bint assure_td64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is dtype of 'timedelta64[*]'."""
 *     if not is_td64arr(arr):
*/

static CYTHON_INLINE int __pyx_f_7cytimes_5utils_assure_td64arr(PyArrayObject *__pyx_v_arr) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __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;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("assure_td64arr", 0);

  /* "utils.pxd":10889
 * cdef inline bint assure_td64arr(np.ndarray arr) except -1:
 *     """Assure the array is dtype of 'timedelta64[*]'."""
 *     if not is_td64arr(arr):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects instance of 'np.ndarray[timedelta64[*]]', "
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_td64arr(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10889, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {

    /* "utils.pxd":10890
 *     """Assure the array is dtype of 'timedelta64[*]'."""
 *     if not is_td64arr(arr):
 *         raise TypeError(             # <<<<<<<<<<<<<<
 *             "Expects instance of 'np.ndarray[timedelta64[*]]', "
 *             "instead got 'np.ndarray[%s]'." % arr.dtype
*/
    __pyx_t_4 = NULL;

    /* "utils.pxd":10892
 *         raise TypeError(
 *             "Expects instance of 'np.ndarray[timedelta64[*]]', "
 *             "instead got 'np.ndarray[%s]'." % arr.dtype             # <<<<<<<<<<<<<<
 *         )
 *     return True
*/
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_arr), __pyx_mstate_global->__pyx_n_u_dtype); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Expects_instance_of_np_ndarray_t, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 10892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_TypeError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10890, __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(5, 10890, __pyx_L1_error)

    /* "utils.pxd":10889
 * cdef inline bint assure_td64arr(np.ndarray arr) except -1:
 *     """Assure the array is dtype of 'timedelta64[*]'."""
 *     if not is_td64arr(arr):             # <<<<<<<<<<<<<<
 *         raise TypeError(
 *             "Expects instance of 'np.ndarray[timedelta64[*]]', "
*/
  }

  /* "utils.pxd":10894
 *             "instead got 'np.ndarray[%s]'." % arr.dtype
 *         )
 *     return True             # <<<<<<<<<<<<<<
 * 
 * # . conversion
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "utils.pxd":10887
 *     return np.PyArray_TYPE(arr) == np.NPY_TYPES.NPY_TIMEDELTA
 * 
 * cdef inline bint assure_td64arr(np.ndarray arr) except -1:             # <<<<<<<<<<<<<<
 *     """Assure the array is dtype of 'timedelta64[*]'."""
 *     if not is_td64arr(arr):
*/

  /* 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_AddTraceback("cytimes.utils.assure_td64arr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10897
 * 
 * # . conversion
 * cdef inline np.ndarray td64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[timedelta64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils_td64arr_as_int64_us(PyArrayObject *__pyx_v_arr, struct __pyx_opt_args_7cytimes_5utils_td64arr_as_int64_us *__pyx_optional_args) {
  int __pyx_v_arr_reso = ((int)-1);
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_arr_add __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils__td64arr_M_as_int64_D __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils__td64arr_Y_as_int64_D __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("td64arr_as_int64_us", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_arr_reso = __pyx_optional_args->arr_reso;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_offset = __pyx_optional_args->offset;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_copy = __pyx_optional_args->copy;
        }
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":10920
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:
 *             _raise_missing_arr_reso_error(arr)
*/
  __pyx_t_1 = (__pyx_v_arr_reso < 0);
  if (__pyx_t_1) {

    /* "utils.pxd":10921
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    __pyx_t_1 = (PyArray_TYPE(__pyx_v_arr) != NPY_TIMEDELTA);
    if (__pyx_t_1) {

      /* "utils.pxd":10922
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:
 *             _raise_missing_arr_reso_error(arr)             # <<<<<<<<<<<<<<
 *         arr_reso = get_arr_nptime_unit(arr)
 * 
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_missing_arr_reso_error(__pyx_v_arr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10922, __pyx_L1_error)

      /* "utils.pxd":10921
 *     # Get array resolution
 *     if arr_reso < 0:
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:             # <<<<<<<<<<<<<<
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)
*/
    }

    /* "utils.pxd":10923
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:
 *             _raise_missing_arr_reso_error(arr)
 *         arr_reso = get_arr_nptime_unit(arr)             # <<<<<<<<<<<<<<
 * 
 *     # Conversion
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_get_arr_nptime_unit(__pyx_v_arr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 10923, __pyx_L1_error)
    __pyx_v_arr_reso = __pyx_t_2;

    /* "utils.pxd":10920
 *     """
 *     # Get array resolution
 *     if arr_reso < 0:             # <<<<<<<<<<<<<<
 *         if np.PyArray_TYPE(arr) != np.NPY_TYPES.NPY_TIMEDELTA:
 *             _raise_missing_arr_reso_error(arr)
*/
  }

  /* "utils.pxd":10926
 * 
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.copy = __pyx_v_copy;
  __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "utils.pxd":10927
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ns);
  if (__pyx_t_1) {

    /* "utils.pxd":10928
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return arr_add(arr, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_5.__pyx_n = 2;
    __pyx_t_5.offset = __pyx_v_offset;
    __pyx_t_5.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(__pyx_v_arr, __pyx_v_7cytimes_5utils_NS_MICROSECOND, &__pyx_t_5)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10928, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10927
 *     # Conversion
 *     arr = arr_assure_int64(arr, copy)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
*/
  }

  /* "utils.pxd":10929
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_us);
  if (__pyx_t_1) {

    /* "utils.pxd":10930
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return arr_add(arr, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_add(__pyx_v_arr, __pyx_v_offset, &__pyx_t_6)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10930, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10929
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:   # nanosecond
 *         return arr_div_floor(arr, NS_MICROSECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond             # <<<<<<<<<<<<<<
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
*/
  }

  /* "utils.pxd":10931
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_ms);
  if (__pyx_t_1) {

    /* "utils.pxd":10932
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return arr_mul(arr, US_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MILLISECOND, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10931
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:   # microsecond
 *         return arr_add(arr, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
*/
  }

  /* "utils.pxd":10933
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_s);
  if (__pyx_t_1) {

    /* "utils.pxd":10934
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return arr_mul(arr, US_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_SECOND, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10934, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10933
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:   # millisecond
 *         return arr_mul(arr, US_MILLISECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
*/
  }

  /* "utils.pxd":10935
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_m);
  if (__pyx_t_1) {

    /* "utils.pxd":10936
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_MINUTE, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10936, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10935
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:    # second
 *         return arr_mul(arr, US_SECOND, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
*/
  }

  /* "utils.pxd":10937
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_h);
  if (__pyx_t_1) {

    /* "utils.pxd":10938
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return arr_mul(arr, US_HOUR, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return arr_mul(arr, US_DAY, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_HOUR, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10938, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10937
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:    # minute
 *         return arr_mul(arr, US_MINUTE, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
*/
  }

  /* "utils.pxd":10939
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_D);
  if (__pyx_t_1) {

    /* "utils.pxd":10940
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return arr_mul(arr, US_DAY, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_US_DAY, &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10940, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10939
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:    # hour
 *         return arr_mul(arr, US_HOUR, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
*/
  }

  /* "utils.pxd":10941
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_W);
  if (__pyx_t_1) {

    /* "utils.pxd":10942
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.offset = __pyx_v_offset;
    __pyx_t_7.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, (__pyx_v_7cytimes_5utils_US_DAY * 7), &__pyx_t_7)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10942, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10941
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:    # day
 *         return arr_mul(arr, US_DAY, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
*/
  }

  /* "utils.pxd":10943
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month             # <<<<<<<<<<<<<<
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_M);
  if (__pyx_t_1) {

    /* "utils.pxd":10944
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)             # <<<<<<<<<<<<<<
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
 *         return _td64arr_Y_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_8.__pyx_n = 2;
    __pyx_t_8.offset = __pyx_v_offset;
    __pyx_t_8.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__td64arr_M_as_int64_D(__pyx_v_arr, NPY_FR_us, &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10944, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10943
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_W:    # week
 *         return arr_mul(arr, US_DAY * 7, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month             # <<<<<<<<<<<<<<
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
*/
  }

  /* "utils.pxd":10945
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year             # <<<<<<<<<<<<<<
 *         return _td64arr_Y_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 * 
*/
  __pyx_t_1 = (__pyx_v_arr_reso == NPY_FR_Y);
  if (__pyx_t_1) {

    /* "utils.pxd":10946
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year
 *         return _td64arr_Y_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported array resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_9.__pyx_n = 2;
    __pyx_t_9.offset = __pyx_v_offset;
    __pyx_t_9.copy = 0;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils__td64arr_Y_as_int64_D(__pyx_v_arr, NPY_FR_us, &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 10946, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = ((PyArrayObject *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10945
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_M:    # month
 *         return _td64arr_M_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 *     if arr_reso == np.NPY_DATETIMEUNIT.NPY_FR_Y:    # year             # <<<<<<<<<<<<<<
 *         return _td64arr_Y_as_int64_D(arr, np.NPY_DATETIMEUNIT.NPY_FR_us, offset, False)
 * 
*/
  }

  /* "utils.pxd":10949
 * 
 *     # Unsupported array resolution
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray _td64arr_Y_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils__raise_dt64arr_to_reso_error(__pyx_v_arr, __pyx_v_arr_reso, __pyx_mstate_global->__pyx_n_u_us); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 10949, __pyx_L1_error)

  /* "utils.pxd":10897
 * 
 * # . conversion
 * cdef inline np.ndarray td64arr_as_int64_us(np.ndarray arr, int arr_reso=-1, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """Convert a 1-D ndarray[timedelta64[*]] to int64 microsecond ticks (us) `<'ndarray[int64]'>`.
 * 
*/

  /* function exit code */
  __pyx_r = ((PyArrayObject *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.utils.td64arr_as_int64_us", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10951
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray _td64arr_Y_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[Y]] to int64 day ticks using an
 *     average year (365.2425 D), then further adjust the resolution by `to_reso` and
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__td64arr_Y_as_int64_D(PyArrayObject *__pyx_v_arr, int __pyx_v_to_reso, struct __pyx_opt_args_7cytimes_5utils__td64arr_Y_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_2;
  int __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_6;
  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("_td64arr_Y_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":10968
 *     #   8,765.82 h  = 24 * 365.2425     = 438,291 / 50
 *     #   525,949.2 m = 1440 * 365.2425   = 2,629,746 / 5
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10968, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":10969
 *     #   525,949.2 m = 1440 * 365.2425   = 2,629,746 / 5
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_D);
  if (__pyx_t_3) {

    /* "utils.pxd":10970
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x23AB1, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_1), 0x190, &__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10970, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10969
 *     #   525,949.2 m = 1440 * 365.2425   = 2,629,746 / 5
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  }

  /* "utils.pxd":10971
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_h);
  if (__pyx_t_3) {

    /* "utils.pxd":10972
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x6B013, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_5), 50, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10972, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10971
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 400, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  }

  /* "utils.pxd":10973
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_m);
  if (__pyx_t_3) {

    /* "utils.pxd":10974
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x282072, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 10974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_1), 5, &__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10974, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10973
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 50, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  }

  /* "utils.pxd":10975
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_s);
  if (__pyx_t_3) {

    /* "utils.pxd":10976
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_YY_SECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10976, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10975
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 2_629_746, 0, False), 5, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":10977
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_ms);
  if (__pyx_t_3) {

    /* "utils.pxd":10978
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_YY_MILLISECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10978, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10977
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_YY_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":10979
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_us);
  if (__pyx_t_3) {

    /* "utils.pxd":10980
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mul(arr, TD64_YY_NANOSECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_YY_MICROSECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10980, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10979
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_YY_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  }

  /* "utils.pxd":10981
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_NANOSECOND, offset, False)
 * 
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_ns);
  if (__pyx_t_3) {

    /* "utils.pxd":10982
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mul(arr, TD64_YY_NANOSECOND, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported conversion resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_YY_NANOSECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":10981
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_YY_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_YY_NANOSECOND, offset, False)
 * 
*/
  }

  /* "utils.pxd":10985
 * 
 *     # Unsupported conversion resolution
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64 array." % to_reso)             # <<<<<<<<<<<<<<
 * 
 * cdef inline np.ndarray _td64arr_M_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):
*/
  __pyx_t_1 = NULL;
  __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_to_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 10985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_conversion_unit_d_fo_2, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 10985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_8};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __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;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 10985, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __Pyx_Raise(__pyx_t_5, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __PYX_ERR(5, 10985, __pyx_L1_error)

  /* "utils.pxd":10951
 *     _raise_dt64arr_to_reso_error(arr, arr_reso, "us")
 * 
 * cdef inline np.ndarray _td64arr_Y_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[Y]] to int64 day ticks using an
 *     average year (365.2425 D), then further adjust the resolution by `to_reso` and
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cytimes.utils._td64arr_Y_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "utils.pxd":10987
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64 array." % to_reso)
 * 
 * cdef inline np.ndarray _td64arr_M_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[M]] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust the resolution
*/

static CYTHON_INLINE PyArrayObject *__pyx_f_7cytimes_5utils__td64arr_M_as_int64_D(PyArrayObject *__pyx_v_arr, int __pyx_v_to_reso, struct __pyx_opt_args_7cytimes_5utils__td64arr_M_as_int64_D *__pyx_optional_args) {
  npy_int64 __pyx_v_offset = ((npy_int64)0);
  int __pyx_v_copy = ((int)1);
  PyArrayObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_assure_int64 __pyx_t_2;
  int __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_arr_mul __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_arr_div_floor __pyx_t_6;
  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("_td64arr_M_as_int64_D", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_offset = __pyx_optional_args->offset;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_copy = __pyx_optional_args->copy;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_arr);

  /* "utils.pxd":11004
 *     #   730.485 h   = 24 * 30.436875    = 146097 / 200
 *     #   43,829.1 m  = 1440 * 30.436875  = 438291 / 10
 *     arr = arr_assure_int64(arr, copy)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.copy = __pyx_v_copy;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_assure_int64(__pyx_v_arr, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_arr, ((PyArrayObject *)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "utils.pxd":11005
 *     #   43,829.1 m  = 1440 * 30.436875  = 438291 / 10
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_D);
  if (__pyx_t_3) {

    /* "utils.pxd":11006
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0xBE3B, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_1), 0x640, &__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11006, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11005
 *     #   43,829.1 m  = 1440 * 30.436875  = 438291 / 10
 *     arr = arr_assure_int64(arr, copy)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
*/
  }

  /* "utils.pxd":11007
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_h);
  if (__pyx_t_3) {

    /* "utils.pxd":11008
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x23AB1, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_5), 0xC8, &__pyx_t_6)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11008, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_1);
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11007
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_D:   # day
 *         return arr_div_floor(arr_mul(arr, 48_699, 0, False), 1_600, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
*/
  }

  /* "utils.pxd":11009
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_m);
  if (__pyx_t_3) {

    /* "utils.pxd":11010
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = 0;
    __pyx_t_4.copy = 0;
    __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, 0x6B013, &__pyx_t_4)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 11010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6.__pyx_n = 2;
    __pyx_t_6.offset = __pyx_v_offset;
    __pyx_t_6.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_div_floor(((PyArrayObject *)__pyx_t_1), 10, &__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11009
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_h:   # hour
 *         return arr_div_floor(arr_mul(arr, 146_097, 0, False), 200, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute             # <<<<<<<<<<<<<<
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
*/
  }

  /* "utils.pxd":11011
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_s);
  if (__pyx_t_3) {

    /* "utils.pxd":11012
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_MM_SECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11012, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11011
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_m:   # minute
 *         return arr_div_floor(arr_mul(arr, 438_291, 0, False), 10, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
*/
  }

  /* "utils.pxd":11013
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_ms);
  if (__pyx_t_3) {

    /* "utils.pxd":11014
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_MM_MILLISECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11013
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_s:   # second
 *         return arr_mul(arr, TD64_MM_SECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
*/
  }

  /* "utils.pxd":11015
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_us);
  if (__pyx_t_3) {

    /* "utils.pxd":11016
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)             # <<<<<<<<<<<<<<
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mul(arr, TD64_MM_NANOSECOND, offset, False)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_MM_MICROSECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11016, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11015
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ms:  # millisecond
 *         return arr_mul(arr, TD64_MM_MILLISECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
*/
  }

  /* "utils.pxd":11017
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_NANOSECOND, offset, False)
 * 
*/
  __pyx_t_3 = (__pyx_v_to_reso == NPY_FR_ns);
  if (__pyx_t_3) {

    /* "utils.pxd":11018
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond
 *         return arr_mul(arr, TD64_MM_NANOSECOND, offset, False)             # <<<<<<<<<<<<<<
 * 
 *     # Unsupported conversion resolution
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.offset = __pyx_v_offset;
    __pyx_t_4.copy = 0;
    __pyx_t_5 = ((PyObject *)__pyx_f_7cytimes_5utils_arr_mul(__pyx_v_arr, __pyx_v_7cytimes_5utils_TD64_MM_NANOSECOND, &__pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11018, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((PyArrayObject *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;

    /* "utils.pxd":11017
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_us:  # microsecond
 *         return arr_mul(arr, TD64_MM_MICROSECOND, offset, False)
 *     if to_reso == np.NPY_DATETIMEUNIT.NPY_FR_ns:  # nanosecond             # <<<<<<<<<<<<<<
 *         return arr_mul(arr, TD64_MM_NANOSECOND, offset, False)
 * 
*/
  }

  /* "utils.pxd":11021
 * 
 *     # Unsupported conversion resolution
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64 array." % to_reso)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = NULL;
  __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_to_reso); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 11021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Unsupported_conversion_unit_d_fo_2, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 11021, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_9 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_8};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __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;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 11021, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
  }
  __Pyx_Raise(__pyx_t_5, 0, 0, 0);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __PYX_ERR(5, 11021, __pyx_L1_error)

  /* "utils.pxd":10987
 *     raise AssertionError("Unsupported conversion unit '%d' for timedelta64 array." % to_reso)
 * 
 * cdef inline np.ndarray _td64arr_M_as_int64_D(np.ndarray arr, int to_reso, np.npy_int64 offset=0, bint copy=True):             # <<<<<<<<<<<<<<
 *     """(internal) Convert a 1-D ndarray[timedelta64[M]] to int64 day ticks using an
 *     average month (365.2425 / 12 = 30.436875 D), then further adjust the resolution
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cytimes.utils._td64arr_M_as_int64_D", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_arr);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.pxd":20
 *     ALPHA_DOT = 4
 * 
 * cdef inline list _timelex(str data, Py_ssize_t pos, Py_ssize_t length=0):             # <<<<<<<<<<<<<<
 *     """Tokenize a datetime-like string into lexical units (tokens).
 * 
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser__timelex(PyObject *__pyx_v_data, Py_ssize_t __pyx_v_pos, struct __pyx_opt_args_7cytimes_6parser__timelex *__pyx_optional_args) {
  Py_ssize_t __pyx_v_length = ((Py_ssize_t)0);
  __pyx_t_7cytimes_6parser_State __pyx_v_state;
  PyObject *__pyx_v_tokens = 0;
  PyObject *__pyx_v_token = 0;
  PyObject *__pyx_v_sub_token = 0;
  Py_UCS4 __pyx_v_ch;
  Py_UCS4 __pyx_v_ch_cache;
  Py_ssize_t __pyx_v_i;
  Py_ssize_t __pyx_v_dot_count;
  Py_ssize_t __pyx_v_com_count;
  int __pyx_v_is_dot_end;
  int __pyx_v_is_com_end;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  Py_ssize_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_timelex", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_length = __pyx_optional_args->length;
    }
  }

  /* "cytimes/parser.pxd":40
 *     """
 *     # Validate bounds
 *     if length <= 0:             # <<<<<<<<<<<<<<
 *         length = str_len(data)
 *     if pos < 0:
*/
  __pyx_t_1 = (__pyx_v_length <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.pxd":41
 *     # Validate bounds
 *     if length <= 0:
 *         length = str_len(data)             # <<<<<<<<<<<<<<
 *     if pos < 0:
 *         pos = 0
*/
    __pyx_v_length = PyUnicode_GET_LENGTH(__pyx_v_data);

    /* "cytimes/parser.pxd":40
 *     """
 *     # Validate bounds
 *     if length <= 0:             # <<<<<<<<<<<<<<
 *         length = str_len(data)
 *     if pos < 0:
*/
  }

  /* "cytimes/parser.pxd":42
 *     if length <= 0:
 *         length = str_len(data)
 *     if pos < 0:             # <<<<<<<<<<<<<<
 *         pos = 0
 *     elif pos >= length:
*/
  __pyx_t_1 = (__pyx_v_pos < 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.pxd":43
 *         length = str_len(data)
 *     if pos < 0:
 *         pos = 0             # <<<<<<<<<<<<<<
 *     elif pos >= length:
 *         return []
*/
    __pyx_v_pos = 0;

    /* "cytimes/parser.pxd":42
 *     if length <= 0:
 *         length = str_len(data)
 *     if pos < 0:             # <<<<<<<<<<<<<<
 *         pos = 0
 *     elif pos >= length:
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.pxd":44
 *     if pos < 0:
 *         pos = 0
 *     elif pos >= length:             # <<<<<<<<<<<<<<
 *         return []
 * 
*/
  __pyx_t_1 = (__pyx_v_pos >= __pyx_v_length);
  if (__pyx_t_1) {

    /* "cytimes/parser.pxd":45
 *         pos = 0
 *     elif pos >= length:
 *         return []             # <<<<<<<<<<<<<<
 * 
 *     # Setup
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 45, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "cytimes/parser.pxd":44
 *     if pos < 0:
 *         pos = 0
 *     elif pos >= length:             # <<<<<<<<<<<<<<
 *         return []
 * 
*/
  }
  __pyx_L4:;

  /* "cytimes/parser.pxd":50
 *     cdef:
 *         State state
 *         list tokens = []             # <<<<<<<<<<<<<<
 *         str  token, sub_token
 *         Py_UCS4 ch              # current character
*/
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 50, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_tokens = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "cytimes/parser.pxd":53
 *         str  token, sub_token
 *         Py_UCS4 ch              # current character
 *         Py_UCS4 ch_cache = 0    # cache character for next token             # <<<<<<<<<<<<<<
 *         Py_ssize_t i            # index for 'token'
 *         Py_ssize_t dot_count    # total 'dot' count in 'token'
*/
  __pyx_v_ch_cache = 0;

  /* "cytimes/parser.pxd":61
 * 
 *     # Skip leading control & space characters
 *     while pos < length and utils.is_ascii_ctl_or_space(str_read(data, pos)):             # <<<<<<<<<<<<<<
 *         pos += 1
 * 
*/
  while (1) {
    __pyx_t_3 = (__pyx_v_pos < __pyx_v_length);
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L7_bool_binop_done;
    }
    __pyx_t_3 = __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(PyUnicode_READ_CHAR(__pyx_v_data, __pyx_v_pos));
    __pyx_t_1 = __pyx_t_3;
    __pyx_L7_bool_binop_done:;
    if (!__pyx_t_1) break;

    /* "cytimes/parser.pxd":62
 *     # Skip leading control & space characters
 *     while pos < length and utils.is_ascii_ctl_or_space(str_read(data, pos)):
 *         pos += 1             # <<<<<<<<<<<<<<
 * 
 *     # Main loop: begin -------------------------------------------------------
*/
    __pyx_v_pos = (__pyx_v_pos + 1);
  }

  /* "cytimes/parser.pxd":65
 * 
 *     # Main loop: begin -------------------------------------------------------
 *     while pos < length:             # <<<<<<<<<<<<<<
 *         # Reset
 *         state = State.START
*/
  while (1) {
    __pyx_t_1 = (__pyx_v_pos < __pyx_v_length);
    if (!__pyx_t_1) break;

    /* "cytimes/parser.pxd":67
 *     while pos < length:
 *         # Reset
 *         state = State.START             # <<<<<<<<<<<<<<
 *         token = None
 *         dot_count = com_count = 0
*/
    __pyx_v_state = __pyx_e_7cytimes_6parser_START;

    /* "cytimes/parser.pxd":68
 *         # Reset
 *         state = State.START
 *         token = None             # <<<<<<<<<<<<<<
 *         dot_count = com_count = 0
 *         is_dot_end = is_com_end = False
*/
    __Pyx_INCREF(Py_None);
    __Pyx_XDECREF_SET(__pyx_v_token, ((PyObject*)Py_None));

    /* "cytimes/parser.pxd":69
 *         state = State.START
 *         token = None
 *         dot_count = com_count = 0             # <<<<<<<<<<<<<<
 *         is_dot_end = is_com_end = False
 * 
*/
    __pyx_v_dot_count = 0;
    __pyx_v_com_count = 0;

    /* "cytimes/parser.pxd":70
 *         token = None
 *         dot_count = com_count = 0
 *         is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 * 
 *         # Nested loop: begin - - - - - - - - - - - - - - - - - - - - - - - - -
*/
    __pyx_v_is_dot_end = 0;
    __pyx_v_is_com_end = 0;

    /* "cytimes/parser.pxd":73
 * 
 *         # Nested loop: begin - - - - - - - - - - - - - - - - - - - - - - - - -
 *         while pos < length:             # <<<<<<<<<<<<<<
 *             # Read new character
 *             if ch_cache == 0:
*/
    while (1) {
      __pyx_t_1 = (__pyx_v_pos < __pyx_v_length);
      if (!__pyx_t_1) break;

      /* "cytimes/parser.pxd":75
 *         while pos < length:
 *             # Read new character
 *             if ch_cache == 0:             # <<<<<<<<<<<<<<
 *                 ch = str_read(data, pos)
 *                 # . normalize space
*/
      __pyx_t_1 = (__pyx_v_ch_cache == 0);
      if (__pyx_t_1) {

        /* "cytimes/parser.pxd":76
 *             # Read new character
 *             if ch_cache == 0:
 *                 ch = str_read(data, pos)             # <<<<<<<<<<<<<<
 *                 # . normalize space
 *                 if utils.is_ascii_ctl_or_space(ch):
*/
        __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_data, __pyx_v_pos);

        /* "cytimes/parser.pxd":78
 *                 ch = str_read(data, pos)
 *                 # . normalize space
 *                 if utils.is_ascii_ctl_or_space(ch):             # <<<<<<<<<<<<<<
 *                     ch = 32  # 'space'
 *                     # remove adjacent spaces*
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":79
 *                 # . normalize space
 *                 if utils.is_ascii_ctl_or_space(ch):
 *                     ch = 32  # 'space'             # <<<<<<<<<<<<<<
 *                     # remove adjacent spaces*
 *                     while utils.is_ascii_ctl_or_space(str_read(data, pos + 1)):
*/
          __pyx_v_ch = 32;

          /* "cytimes/parser.pxd":81
 *                     ch = 32  # 'space'
 *                     # remove adjacent spaces*
 *                     while utils.is_ascii_ctl_or_space(str_read(data, pos + 1)):             # <<<<<<<<<<<<<<
 *                         pos += 1
 *             # Comsume cache
*/
          while (1) {
            __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_ctl_or_space(PyUnicode_READ_CHAR(__pyx_v_data, (__pyx_v_pos + 1)));
            if (!__pyx_t_1) break;

            /* "cytimes/parser.pxd":82
 *                     # remove adjacent spaces*
 *                     while utils.is_ascii_ctl_or_space(str_read(data, pos + 1)):
 *                         pos += 1             # <<<<<<<<<<<<<<
 *             # Comsume cache
 *             else:
*/
            __pyx_v_pos = (__pyx_v_pos + 1);
          }

          /* "cytimes/parser.pxd":78
 *                 ch = str_read(data, pos)
 *                 # . normalize space
 *                 if utils.is_ascii_ctl_or_space(ch):             # <<<<<<<<<<<<<<
 *                     ch = 32  # 'space'
 *                     # remove adjacent spaces*
*/
        }

        /* "cytimes/parser.pxd":75
 *         while pos < length:
 *             # Read new character
 *             if ch_cache == 0:             # <<<<<<<<<<<<<<
 *                 ch = str_read(data, pos)
 *                 # . normalize space
*/
        goto __pyx_L13;
      }

      /* "cytimes/parser.pxd":85
 *             # Comsume cache
 *             else:
 *                 ch = ch_cache             # <<<<<<<<<<<<<<
 *                 ch_cache = 0
 * 
*/
      /*else*/ {
        __pyx_v_ch = __pyx_v_ch_cache;

        /* "cytimes/parser.pxd":86
 *             else:
 *                 ch = ch_cache
 *                 ch_cache = 0             # <<<<<<<<<<<<<<
 * 
 *             # State: START
*/
        __pyx_v_ch_cache = 0;
      }
      __pyx_L13:;

      /* "cytimes/parser.pxd":89
 * 
 *             # State: START
 *             if state == State.START:             # <<<<<<<<<<<<<<
 *                 # . digit (e.g: 1)
 *                 if utils.is_ascii_digit(ch):
*/
      switch (__pyx_v_state) {
        case __pyx_e_7cytimes_6parser_START:

        /* "cytimes/parser.pxd":91
 *             if state == State.START:
 *                 # . digit (e.g: 1)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token = str_chr(ch)             # collect digit
 *                     state = State.DIGIT             # set state: DIGIT
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":92
 *                 # . digit (e.g: 1)
 *                 if utils.is_ascii_digit(ch):
 *                     token = str_chr(ch)             # collect digit             # <<<<<<<<<<<<<<
 *                     state = State.DIGIT             # set state: DIGIT
 *                     is_dot_end = is_com_end = False
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 92, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":93
 *                 if utils.is_ascii_digit(ch):
 *                     token = str_chr(ch)             # collect digit
 *                     state = State.DIGIT             # set state: DIGIT             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: a)
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_DIGIT;

          /* "cytimes/parser.pxd":94
 *                     token = str_chr(ch)             # collect digit
 *                     state = State.DIGIT             # set state: DIGIT
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . alpha (e.g: a)
 *                 elif utils.is_alpha(ch):
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":91
 *             if state == State.START:
 *                 # . digit (e.g: 1)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token = str_chr(ch)             # collect digit
 *                     state = State.DIGIT             # set state: DIGIT
*/
          goto __pyx_L17;
        }

        /* "cytimes/parser.pxd":96
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: a)
 *                 elif utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token = str_chr(ch)             # collect alpha
 *                     state = State.ALPHA             # set state: ALPHA
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_alpha(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":97
 *                 # . alpha (e.g: a)
 *                 elif utils.is_alpha(ch):
 *                     token = str_chr(ch)             # collect alpha             # <<<<<<<<<<<<<<
 *                     state = State.ALPHA             # set state: ALPHA
 *                     is_dot_end = is_com_end = False
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 97, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":98
 *                 elif utils.is_alpha(ch):
 *                     token = str_chr(ch)             # collect alpha
 *                     state = State.ALPHA             # set state: ALPHA             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . emit single character token
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_ALPHA;

          /* "cytimes/parser.pxd":99
 *                     token = str_chr(ch)             # collect alpha
 *                     state = State.ALPHA             # set state: ALPHA
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . emit single character token
 *                 else:
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":96
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: a)
 *                 elif utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token = str_chr(ch)             # collect alpha
 *                     state = State.ALPHA             # set state: ALPHA
*/
          goto __pyx_L17;
        }

        /* "cytimes/parser.pxd":102
 *                 # . emit single character token
 *                 else:
 *                     tokens.append(str_chr(ch))             # <<<<<<<<<<<<<<
 *                     pos += 1
 *                     break   # end token; start a new one
*/
        /*else*/ {
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 102, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 102, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":103
 *                 else:
 *                     tokens.append(str_chr(ch))
 *                     pos += 1             # <<<<<<<<<<<<<<
 *                     break   # end token; start a new one
 * 
*/
          __pyx_v_pos = (__pyx_v_pos + 1);

          /* "cytimes/parser.pxd":104
 *                     tokens.append(str_chr(ch))
 *                     pos += 1
 *                     break   # end token; start a new one             # <<<<<<<<<<<<<<
 * 
 *             # State: DIGIT
*/
          goto __pyx_L12_break;
        }
        __pyx_L17:;

        /* "cytimes/parser.pxd":89
 * 
 *             # State: START
 *             if state == State.START:             # <<<<<<<<<<<<<<
 *                 # . digit (e.g: 1)
 *                 if utils.is_ascii_digit(ch):
*/
        break;
        case __pyx_e_7cytimes_6parser_DIGIT:

        /* "cytimes/parser.pxd":109
 *             elif state == State.DIGIT:
 *                 # . digit (e.g: [X]12)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":110
 *                 # . digit (e.g: [X]12)
 *                 if utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.)
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 110, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 110, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":111
 *                 if utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . dot   (e.g: [X]1.)
 *                 elif ch == '.':
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":109
 *             elif state == State.DIGIT:
 *                 # . digit (e.g: [X]12)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False
*/
          goto __pyx_L18;
        }

        /* "cytimes/parser.pxd":113
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
        __pyx_t_1 = (__pyx_v_ch == 46);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":114
 *                 # . dot   (e.g: [X]1.)
 *                 elif ch == '.':
 *                     token += "."                    # collect dot             # <<<<<<<<<<<<<<
 *                     dot_count += 1                  # increase dot count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
*/
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 114, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":115
 *                 elif ch == '.':
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count             # <<<<<<<<<<<<<<
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end, is_com_end = True, False
*/
          __pyx_v_dot_count = (__pyx_v_dot_count + 1);

          /* "cytimes/parser.pxd":116
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT             # <<<<<<<<<<<<<<
 *                     is_dot_end, is_com_end = True, False
 *                 # . comma (e.g: [X]1,)
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_DIGIT_DOT;

          /* "cytimes/parser.pxd":117
 *                     dot_count += 1                  # increase dot count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end, is_com_end = True, False             # <<<<<<<<<<<<<<
 *                 # . comma (e.g: [X]1,)
 *                 elif ch == ',' and dot_count == 0 and com_count == 0:
*/
          __pyx_t_1 = 1;
          __pyx_t_3 = 0;
          __pyx_v_is_dot_end = __pyx_t_1;
          __pyx_v_is_com_end = __pyx_t_3;

          /* "cytimes/parser.pxd":113
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
          goto __pyx_L18;
        }

        /* "cytimes/parser.pxd":119
 *                     is_dot_end, is_com_end = True, False
 *                 # . comma (e.g: [X]1,)
 *                 elif ch == ',' and dot_count == 0 and com_count == 0:             # <<<<<<<<<<<<<<
 *                     token += ","                    # collect comma
 *                     com_count += 1                  # increase comma count
*/
        __pyx_t_1 = (__pyx_v_ch == 44);
        if (__pyx_t_1) {
        } else {
          __pyx_t_3 = __pyx_t_1;
          goto __pyx_L19_bool_binop_done;
        }
        __pyx_t_1 = (__pyx_v_dot_count == 0);
        if (__pyx_t_1) {
        } else {
          __pyx_t_3 = __pyx_t_1;
          goto __pyx_L19_bool_binop_done;
        }
        __pyx_t_1 = (__pyx_v_com_count == 0);
        __pyx_t_3 = __pyx_t_1;
        __pyx_L19_bool_binop_done:;
        if (__pyx_t_3) {

          /* "cytimes/parser.pxd":120
 *                 # . comma (e.g: [X]1,)
 *                 elif ch == ',' and dot_count == 0 and com_count == 0:
 *                     token += ","                    # collect comma             # <<<<<<<<<<<<<<
 *                     com_count += 1                  # increase comma count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
*/
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__12); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 120, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":121
 *                 elif ch == ',' and dot_count == 0 and com_count == 0:
 *                     token += ","                    # collect comma
 *                     com_count += 1                  # increase comma count             # <<<<<<<<<<<<<<
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end, is_com_end = False, True
*/
          __pyx_v_com_count = (__pyx_v_com_count + 1);

          /* "cytimes/parser.pxd":122
 *                     token += ","                    # collect comma
 *                     com_count += 1                  # increase comma count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT             # <<<<<<<<<<<<<<
 *                     is_dot_end, is_com_end = False, True
 *                 # . cache for next token & stop
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_DIGIT_DOT;

          /* "cytimes/parser.pxd":123
 *                     com_count += 1                  # increase comma count
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end, is_com_end = False, True             # <<<<<<<<<<<<<<
 *                 # . cache for next token & stop
 *                 else:
*/
          __pyx_t_3 = 0;
          __pyx_t_1 = 1;
          __pyx_v_is_dot_end = __pyx_t_3;
          __pyx_v_is_com_end = __pyx_t_1;

          /* "cytimes/parser.pxd":119
 *                     is_dot_end, is_com_end = True, False
 *                 # . comma (e.g: [X]1,)
 *                 elif ch == ',' and dot_count == 0 and com_count == 0:             # <<<<<<<<<<<<<<
 *                     token += ","                    # collect comma
 *                     com_count += 1                  # increase comma count
*/
          goto __pyx_L18;
        }

        /* "cytimes/parser.pxd":126
 *                 # . cache for next token & stop
 *                 else:
 *                     ch_cache = ch             # <<<<<<<<<<<<<<
 *                     break
 * 
*/
        /*else*/ {
          __pyx_v_ch_cache = __pyx_v_ch;

          /* "cytimes/parser.pxd":127
 *                 else:
 *                     ch_cache = ch
 *                     break             # <<<<<<<<<<<<<<
 * 
 *             # State: DIGIT_DOT
*/
          goto __pyx_L12_break;
        }
        __pyx_L18:;

        /* "cytimes/parser.pxd":107
 * 
 *             # State: DIGIT
 *             elif state == State.DIGIT:             # <<<<<<<<<<<<<<
 *                 # . digit (e.g: [X]12)
 *                 if utils.is_ascii_digit(ch):
*/
        break;
        case __pyx_e_7cytimes_6parser_DIGIT_DOT:

        /* "cytimes/parser.pxd":132
 *             elif state == State.DIGIT_DOT:
 *                 # . digit (e.g: [X]1.2)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":133
 *                 # . digit (e.g: [X]1.2)
 *                 if utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: [X]1.a)
*/
          __pyx_t_5 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 133, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 133, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":134
 *                 if utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . alpha (e.g: [X]1.a)
 *                 elif is_dot_end and utils.is_alpha(ch):
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":132
 *             elif state == State.DIGIT_DOT:
 *                 # . digit (e.g: [X]1.2)
 *                 if utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     is_dot_end = is_com_end = False
*/
          goto __pyx_L22;
        }

        /* "cytimes/parser.pxd":136
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: [X]1.a)
 *                 elif is_dot_end and utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     state = State.ALPHA_DOT  # set state: ALPHA_DOT
*/
        if (__pyx_v_is_dot_end) {
        } else {
          __pyx_t_1 = __pyx_v_is_dot_end;
          goto __pyx_L23_bool_binop_done;
        }
        __pyx_t_3 = __pyx_f_7cytimes_5utils_is_alpha(__pyx_v_ch);
        __pyx_t_1 = __pyx_t_3;
        __pyx_L23_bool_binop_done:;
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":137
 *                 # . alpha (e.g: [X]1.a)
 *                 elif is_dot_end and utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha             # <<<<<<<<<<<<<<
 *                     state = State.ALPHA_DOT  # set state: ALPHA_DOT
 *                     is_dot_end = is_com_end = False
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 137, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":138
 *                 elif is_dot_end and utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha
 *                     state = State.ALPHA_DOT  # set state: ALPHA_DOT             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.2.)
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_ALPHA_DOT;

          /* "cytimes/parser.pxd":139
 *                     token += str_chr(ch)            # collect alpha
 *                     state = State.ALPHA_DOT  # set state: ALPHA_DOT
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . dot   (e.g: [X]1.2.)
 *                 elif ch == '.':
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":136
 *                     is_dot_end = is_com_end = False
 *                 # . alpha (e.g: [X]1.a)
 *                 elif is_dot_end and utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     state = State.ALPHA_DOT  # set state: ALPHA_DOT
*/
          goto __pyx_L22;
        }

        /* "cytimes/parser.pxd":141
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.2.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
        __pyx_t_1 = (__pyx_v_ch == 46);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":142
 *                 # . dot   (e.g: [X]1.2.)
 *                 elif ch == '.':
 *                     token += "."                    # collect dot             # <<<<<<<<<<<<<<
 *                     dot_count += 1                  # increase dot count
 *                     is_dot_end, is_com_end = True, False
*/
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 142, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":143
 *                 elif ch == '.':
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count             # <<<<<<<<<<<<<<
 *                     is_dot_end, is_com_end = True, False
 *                 # . cache for next token & stop
*/
          __pyx_v_dot_count = (__pyx_v_dot_count + 1);

          /* "cytimes/parser.pxd":144
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
 *                     is_dot_end, is_com_end = True, False             # <<<<<<<<<<<<<<
 *                 # . cache for next token & stop
 *                 else:
*/
          __pyx_t_1 = 1;
          __pyx_t_3 = 0;
          __pyx_v_is_dot_end = __pyx_t_1;
          __pyx_v_is_com_end = __pyx_t_3;

          /* "cytimes/parser.pxd":141
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]1.2.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
          goto __pyx_L22;
        }

        /* "cytimes/parser.pxd":147
 *                 # . cache for next token & stop
 *                 else:
 *                     ch_cache = ch             # <<<<<<<<<<<<<<
 *                     break
 * 
*/
        /*else*/ {
          __pyx_v_ch_cache = __pyx_v_ch;

          /* "cytimes/parser.pxd":148
 *                 else:
 *                     ch_cache = ch
 *                     break             # <<<<<<<<<<<<<<
 * 
 *             # State: ALPHA
*/
          goto __pyx_L12_break;
        }
        __pyx_L22:;

        /* "cytimes/parser.pxd":130
 * 
 *             # State: DIGIT_DOT
 *             elif state == State.DIGIT_DOT:             # <<<<<<<<<<<<<<
 *                 # . digit (e.g: [X]1.2)
 *                 if utils.is_ascii_digit(ch):
*/
        break;
        case __pyx_e_7cytimes_6parser_ALPHA:

        /* "cytimes/parser.pxd":153
 *             elif state == State.ALPHA:
 *                 # . alpha (e.g: [X]ab)
 *                 if utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False
*/
        __pyx_t_3 = __pyx_f_7cytimes_5utils_is_alpha(__pyx_v_ch);
        if (__pyx_t_3) {

          /* "cytimes/parser.pxd":154
 *                 # . alpha (e.g: [X]ab)
 *                 if utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.)
*/
          __pyx_t_5 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 154, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 154, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":155
 *                 if utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . dot   (e.g: [X]a.)
 *                 elif ch == ".":
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":153
 *             elif state == State.ALPHA:
 *                 # . alpha (e.g: [X]ab)
 *                 if utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False
*/
          goto __pyx_L25;
        }

        /* "cytimes/parser.pxd":157
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.)
 *                 elif ch == ".":             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
        __pyx_t_3 = (__pyx_v_ch == 46);
        if (__pyx_t_3) {

          /* "cytimes/parser.pxd":158
 *                 # . dot   (e.g: [X]a.)
 *                 elif ch == ".":
 *                     token += "."                    # collect dot             # <<<<<<<<<<<<<<
 *                     dot_count += 1                  # increase dot count
 *                     state = State.ALPHA_DOT         # set state: ALPHA_DOT
*/
          __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__2); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 158, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":159
 *                 elif ch == ".":
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count             # <<<<<<<<<<<<<<
 *                     state = State.ALPHA_DOT         # set state: ALPHA_DOT
 *                     is_dot_end, is_com_end = True, False
*/
          __pyx_v_dot_count = (__pyx_v_dot_count + 1);

          /* "cytimes/parser.pxd":160
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
 *                     state = State.ALPHA_DOT         # set state: ALPHA_DOT             # <<<<<<<<<<<<<<
 *                     is_dot_end, is_com_end = True, False
 *                 # . cache for next token & stop
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_ALPHA_DOT;

          /* "cytimes/parser.pxd":161
 *                     dot_count += 1                  # increase dot count
 *                     state = State.ALPHA_DOT         # set state: ALPHA_DOT
 *                     is_dot_end, is_com_end = True, False             # <<<<<<<<<<<<<<
 *                 # . cache for next token & stop
 *                 else:
*/
          __pyx_t_3 = 1;
          __pyx_t_1 = 0;
          __pyx_v_is_dot_end = __pyx_t_3;
          __pyx_v_is_com_end = __pyx_t_1;

          /* "cytimes/parser.pxd":157
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.)
 *                 elif ch == ".":             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
          goto __pyx_L25;
        }

        /* "cytimes/parser.pxd":164
 *                 # . cache for next token & stop
 *                 else:
 *                     ch_cache = ch             # <<<<<<<<<<<<<<
 *                     break
 * 
*/
        /*else*/ {
          __pyx_v_ch_cache = __pyx_v_ch;

          /* "cytimes/parser.pxd":165
 *                 else:
 *                     ch_cache = ch
 *                     break             # <<<<<<<<<<<<<<
 * 
 *             # State: ALPHA_DOT
*/
          goto __pyx_L12_break;
        }
        __pyx_L25:;

        /* "cytimes/parser.pxd":151
 * 
 *             # State: ALPHA
 *             elif state == State.ALPHA:             # <<<<<<<<<<<<<<
 *                 # . alpha (e.g: [X]ab)
 *                 if utils.is_alpha(ch):
*/
        break;
        default:

        /* "cytimes/parser.pxd":170
 *             else:
 *                 # . alpha (e.g: [X]a.b)
 *                 if utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False
*/
        __pyx_t_1 = __pyx_f_7cytimes_5utils_is_alpha(__pyx_v_ch);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":171
 *                 # . alpha (e.g: [X]a.b)
 *                 if utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . digit (e.g: [X]a.1)
*/
          __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 171, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 171, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_5));
          __pyx_t_5 = 0;

          /* "cytimes/parser.pxd":172
 *                 if utils.is_alpha(ch):
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . digit (e.g: [X]a.1)
 *                 elif is_dot_end and utils.is_ascii_digit(ch):
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":170
 *             else:
 *                 # . alpha (e.g: [X]a.b)
 *                 if utils.is_alpha(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect alpha
 *                     is_dot_end = is_com_end = False
*/
          goto __pyx_L26;
        }

        /* "cytimes/parser.pxd":174
 *                     is_dot_end = is_com_end = False
 *                 # . digit (e.g: [X]a.1)
 *                 elif is_dot_end and utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
*/
        if (__pyx_v_is_dot_end) {
        } else {
          __pyx_t_1 = __pyx_v_is_dot_end;
          goto __pyx_L27_bool_binop_done;
        }
        __pyx_t_3 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch);
        __pyx_t_1 = __pyx_t_3;
        __pyx_L27_bool_binop_done:;
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":175
 *                 # . digit (e.g: [X]a.1)
 *                 elif is_dot_end and utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit             # <<<<<<<<<<<<<<
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end = is_com_end = False
*/
          __pyx_t_5 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 175, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_5);
          __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 175, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":176
 *                 elif is_dot_end and utils.is_ascii_digit(ch):
 *                     token += str_chr(ch)            # collect digit
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT             # <<<<<<<<<<<<<<
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.b.)
*/
          __pyx_v_state = __pyx_e_7cytimes_6parser_DIGIT_DOT;

          /* "cytimes/parser.pxd":177
 *                     token += str_chr(ch)            # collect digit
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
 *                     is_dot_end = is_com_end = False             # <<<<<<<<<<<<<<
 *                 # . dot   (e.g: [X]a.b.)
 *                 elif ch == '.':
*/
          __pyx_v_is_dot_end = 0;
          __pyx_v_is_com_end = 0;

          /* "cytimes/parser.pxd":174
 *                     is_dot_end = is_com_end = False
 *                 # . digit (e.g: [X]a.1)
 *                 elif is_dot_end and utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     token += str_chr(ch)            # collect digit
 *                     state = State.DIGIT_DOT         # set state: DIGIT_DOT
*/
          goto __pyx_L26;
        }

        /* "cytimes/parser.pxd":179
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.b.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
        __pyx_t_1 = (__pyx_v_ch == 46);
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":180
 *                 # . dot   (e.g: [X]a.b.)
 *                 elif ch == '.':
 *                     token += "."                    # collect dot             # <<<<<<<<<<<<<<
 *                     dot_count += 1                  # increase dot count
 *                     is_dot_end, is_com_end = True, False
*/
          __pyx_t_2 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__2); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 180, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
          __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_2));
          __pyx_t_2 = 0;

          /* "cytimes/parser.pxd":181
 *                 elif ch == '.':
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count             # <<<<<<<<<<<<<<
 *                     is_dot_end, is_com_end = True, False
 *                 # . cache for next token & stop
*/
          __pyx_v_dot_count = (__pyx_v_dot_count + 1);

          /* "cytimes/parser.pxd":182
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
 *                     is_dot_end, is_com_end = True, False             # <<<<<<<<<<<<<<
 *                 # . cache for next token & stop
 *                 else:
*/
          __pyx_t_1 = 1;
          __pyx_t_3 = 0;
          __pyx_v_is_dot_end = __pyx_t_1;
          __pyx_v_is_com_end = __pyx_t_3;

          /* "cytimes/parser.pxd":179
 *                     is_dot_end = is_com_end = False
 *                 # . dot   (e.g: [X]a.b.)
 *                 elif ch == '.':             # <<<<<<<<<<<<<<
 *                     token += "."                    # collect dot
 *                     dot_count += 1                  # increase dot count
*/
          goto __pyx_L26;
        }

        /* "cytimes/parser.pxd":185
 *                 # . cache for next token & stop
 *                 else:
 *                     ch_cache = ch             # <<<<<<<<<<<<<<
 *                     break
 * 
*/
        /*else*/ {
          __pyx_v_ch_cache = __pyx_v_ch;

          /* "cytimes/parser.pxd":186
 *                 else:
 *                     ch_cache = ch
 *                     break             # <<<<<<<<<<<<<<
 * 
 *             # Next character
*/
          goto __pyx_L12_break;
        }
        __pyx_L26:;
        break;
      }

      /* "cytimes/parser.pxd":189
 * 
 *             # Next character
 *             pos += 1             # <<<<<<<<<<<<<<
 * 
 *         # Add token
*/
      __pyx_v_pos = (__pyx_v_pos + 1);
    }
    __pyx_L12_break:;

    /* "cytimes/parser.pxd":192
 * 
 *         # Add token
 *         if token is not None:             # <<<<<<<<<<<<<<
 *             # Pure alpha or digit token
 *             if state in (State.ALPHA, State.DIGIT):
*/
    __pyx_t_3 = (__pyx_v_token != ((PyObject*)Py_None));
    if (__pyx_t_3) {

      /* "cytimes/parser.pxd":194
 *         if token is not None:
 *             # Pure alpha or digit token
 *             if state in (State.ALPHA, State.DIGIT):             # <<<<<<<<<<<<<<
 *                 tokens.append(token)
 * 
*/
      switch (__pyx_v_state) {
        case __pyx_e_7cytimes_6parser_ALPHA:
        case __pyx_e_7cytimes_6parser_DIGIT:
        __pyx_t_3 = 1;
        break;
        default:
        __pyx_t_3 = 0;
        break;
      }
      __pyx_t_1 = __pyx_t_3;
      if (__pyx_t_1) {

        /* "cytimes/parser.pxd":195
 *             # Pure alpha or digit token
 *             if state in (State.ALPHA, State.DIGIT):
 *                 tokens.append(token)             # <<<<<<<<<<<<<<
 * 
 *             # Mixed token with dots/commas => split into sub-tokens
*/
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_v_token); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 195, __pyx_L1_error)

        /* "cytimes/parser.pxd":194
 *         if token is not None:
 *             # Pure alpha or digit token
 *             if state in (State.ALPHA, State.DIGIT):             # <<<<<<<<<<<<<<
 *                 tokens.append(token)
 * 
*/
        goto __pyx_L30;
      }

      /* "cytimes/parser.pxd":198
 * 
 *             # Mixed token with dots/commas => split into sub-tokens
 *             elif state == State.ALPHA_DOT or is_dot_end or is_com_end or dot_count > 1 or com_count > 1:             # <<<<<<<<<<<<<<
 *                 sub_token = None
 *                 for i in range(str_len(token)):
*/
      __pyx_t_3 = (__pyx_v_state == __pyx_e_7cytimes_6parser_ALPHA_DOT);
      if (!__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L31_bool_binop_done;
      }
      if (!__pyx_v_is_dot_end) {
      } else {
        __pyx_t_1 = __pyx_v_is_dot_end;
        goto __pyx_L31_bool_binop_done;
      }
      if (!__pyx_v_is_com_end) {
      } else {
        __pyx_t_1 = __pyx_v_is_com_end;
        goto __pyx_L31_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_dot_count > 1);
      if (!__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L31_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_com_count > 1);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L31_bool_binop_done:;
      if (__pyx_t_1) {

        /* "cytimes/parser.pxd":199
 *             # Mixed token with dots/commas => split into sub-tokens
 *             elif state == State.ALPHA_DOT or is_dot_end or is_com_end or dot_count > 1 or com_count > 1:
 *                 sub_token = None             # <<<<<<<<<<<<<<
 *                 for i in range(str_len(token)):
 *                     ch = str_read(token, i)
*/
        __Pyx_INCREF(Py_None);
        __Pyx_XDECREF_SET(__pyx_v_sub_token, ((PyObject*)Py_None));

        /* "cytimes/parser.pxd":200
 *             elif state == State.ALPHA_DOT or is_dot_end or is_com_end or dot_count > 1 or com_count > 1:
 *                 sub_token = None
 *                 for i in range(str_len(token)):             # <<<<<<<<<<<<<<
 *                     ch = str_read(token, i)
 *                     if ch == '.':
*/
        __pyx_t_6 = PyUnicode_GET_LENGTH(__pyx_v_token);
        __pyx_t_7 = __pyx_t_6;
        for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
          __pyx_v_i = __pyx_t_8;

          /* "cytimes/parser.pxd":201
 *                 sub_token = None
 *                 for i in range(str_len(token)):
 *                     ch = str_read(token, i)             # <<<<<<<<<<<<<<
 *                     if ch == '.':
 *                         if sub_token is not None:
*/
          __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_token, __pyx_v_i);

          /* "cytimes/parser.pxd":202
 *                 for i in range(str_len(token)):
 *                     ch = str_read(token, i)
 *                     if ch == '.':             # <<<<<<<<<<<<<<
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)
*/
          switch (__pyx_v_ch) {
            case 46:

            /* "cytimes/parser.pxd":203
 *                     ch = str_read(token, i)
 *                     if ch == '.':
 *                         if sub_token is not None:             # <<<<<<<<<<<<<<
 *                             tokens.append(sub_token)
 *                             sub_token = None
*/
            __pyx_t_1 = (__pyx_v_sub_token != ((PyObject*)Py_None));
            if (__pyx_t_1) {

              /* "cytimes/parser.pxd":204
 *                     if ch == '.':
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)             # <<<<<<<<<<<<<<
 *                             sub_token = None
 *                         tokens.append(".")
*/
              __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_v_sub_token); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 204, __pyx_L1_error)

              /* "cytimes/parser.pxd":205
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)
 *                             sub_token = None             # <<<<<<<<<<<<<<
 *                         tokens.append(".")
 *                     elif ch == ',':
*/
              __Pyx_INCREF(Py_None);
              __Pyx_DECREF_SET(__pyx_v_sub_token, ((PyObject*)Py_None));

              /* "cytimes/parser.pxd":203
 *                     ch = str_read(token, i)
 *                     if ch == '.':
 *                         if sub_token is not None:             # <<<<<<<<<<<<<<
 *                             tokens.append(sub_token)
 *                             sub_token = None
*/
            }

            /* "cytimes/parser.pxd":206
 *                             tokens.append(sub_token)
 *                             sub_token = None
 *                         tokens.append(".")             # <<<<<<<<<<<<<<
 *                     elif ch == ',':
 *                         if sub_token is not None:
*/
            __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_mstate_global->__pyx_kp_u__2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 206, __pyx_L1_error)

            /* "cytimes/parser.pxd":202
 *                 for i in range(str_len(token)):
 *                     ch = str_read(token, i)
 *                     if ch == '.':             # <<<<<<<<<<<<<<
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)
*/
            break;
            case 44:

            /* "cytimes/parser.pxd":208
 *                         tokens.append(".")
 *                     elif ch == ',':
 *                         if sub_token is not None:             # <<<<<<<<<<<<<<
 *                             tokens.append(sub_token)
 *                             sub_token = None
*/
            __pyx_t_1 = (__pyx_v_sub_token != ((PyObject*)Py_None));
            if (__pyx_t_1) {

              /* "cytimes/parser.pxd":209
 *                     elif ch == ',':
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)             # <<<<<<<<<<<<<<
 *                             sub_token = None
 *                         tokens.append(",")
*/
              __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_v_sub_token); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 209, __pyx_L1_error)

              /* "cytimes/parser.pxd":210
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)
 *                             sub_token = None             # <<<<<<<<<<<<<<
 *                         tokens.append(",")
 *                     else:
*/
              __Pyx_INCREF(Py_None);
              __Pyx_DECREF_SET(__pyx_v_sub_token, ((PyObject*)Py_None));

              /* "cytimes/parser.pxd":208
 *                         tokens.append(".")
 *                     elif ch == ',':
 *                         if sub_token is not None:             # <<<<<<<<<<<<<<
 *                             tokens.append(sub_token)
 *                             sub_token = None
*/
            }

            /* "cytimes/parser.pxd":211
 *                             tokens.append(sub_token)
 *                             sub_token = None
 *                         tokens.append(",")             # <<<<<<<<<<<<<<
 *                     else:
 *                         if sub_token is None:
*/
            __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_mstate_global->__pyx_kp_u__12); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 211, __pyx_L1_error)

            /* "cytimes/parser.pxd":207
 *                             sub_token = None
 *                         tokens.append(".")
 *                     elif ch == ',':             # <<<<<<<<<<<<<<
 *                         if sub_token is not None:
 *                             tokens.append(sub_token)
*/
            break;
            default:

            /* "cytimes/parser.pxd":213
 *                         tokens.append(",")
 *                     else:
 *                         if sub_token is None:             # <<<<<<<<<<<<<<
 *                             sub_token = str_chr(ch)
 *                         else:
*/
            __pyx_t_1 = (__pyx_v_sub_token == ((PyObject*)Py_None));
            if (__pyx_t_1) {

              /* "cytimes/parser.pxd":214
 *                     else:
 *                         if sub_token is None:
 *                             sub_token = str_chr(ch)             # <<<<<<<<<<<<<<
 *                         else:
 *                             sub_token += str_chr(ch)
*/
              __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 214, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              __Pyx_DECREF_SET(__pyx_v_sub_token, ((PyObject*)__pyx_t_2));
              __pyx_t_2 = 0;

              /* "cytimes/parser.pxd":213
 *                         tokens.append(",")
 *                     else:
 *                         if sub_token is None:             # <<<<<<<<<<<<<<
 *                             sub_token = str_chr(ch)
 *                         else:
*/
              goto __pyx_L40;
            }

            /* "cytimes/parser.pxd":216
 *                             sub_token = str_chr(ch)
 *                         else:
 *                             sub_token += str_chr(ch)             # <<<<<<<<<<<<<<
 *                 if sub_token is not None:
 *                     tokens.append(sub_token)
*/
            /*else*/ {
              __pyx_t_2 = PyUnicode_FromOrdinal(__pyx_v_ch); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 216, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_2);
              __pyx_t_5 = __Pyx_PyUnicode_Concat__Pyx_ReferenceSharing_OwnStrongReferenceInPlaceSafe(__pyx_v_sub_token, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 216, __pyx_L1_error)
              __Pyx_GOTREF(__pyx_t_5);
              __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
              __Pyx_DECREF_SET(__pyx_v_sub_token, ((PyObject*)__pyx_t_5));
              __pyx_t_5 = 0;
            }
            __pyx_L40:;
            break;
          }
        }

        /* "cytimes/parser.pxd":217
 *                         else:
 *                             sub_token += str_chr(ch)
 *                 if sub_token is not None:             # <<<<<<<<<<<<<<
 *                     tokens.append(sub_token)
 * 
*/
        __pyx_t_1 = (__pyx_v_sub_token != ((PyObject*)Py_None));
        if (__pyx_t_1) {

          /* "cytimes/parser.pxd":218
 *                             sub_token += str_chr(ch)
 *                 if sub_token is not None:
 *                     tokens.append(sub_token)             # <<<<<<<<<<<<<<
 * 
 *             # Decimal comma normalization (e.g., '1,234' -> '1.234')
*/
          __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_v_sub_token); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 218, __pyx_L1_error)

          /* "cytimes/parser.pxd":217
 *                         else:
 *                             sub_token += str_chr(ch)
 *                 if sub_token is not None:             # <<<<<<<<<<<<<<
 *                     tokens.append(sub_token)
 * 
*/
        }

        /* "cytimes/parser.pxd":198
 * 
 *             # Mixed token with dots/commas => split into sub-tokens
 *             elif state == State.ALPHA_DOT or is_dot_end or is_com_end or dot_count > 1 or com_count > 1:             # <<<<<<<<<<<<<<
 *                 sub_token = None
 *                 for i in range(str_len(token)):
*/
        goto __pyx_L30;
      }

      /* "cytimes/parser.pxd":221
 * 
 *             # Decimal comma normalization (e.g., '1,234' -> '1.234')
 *             elif state == State.DIGIT_DOT and com_count == 1 and dot_count == 0:             # <<<<<<<<<<<<<<
 *                 tokens.append(str_replace(token, ",", ".", -1))
 * 
*/
      __pyx_t_3 = (__pyx_v_state == __pyx_e_7cytimes_6parser_DIGIT_DOT);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L42_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_com_count == 1);
      if (__pyx_t_3) {
      } else {
        __pyx_t_1 = __pyx_t_3;
        goto __pyx_L42_bool_binop_done;
      }
      __pyx_t_3 = (__pyx_v_dot_count == 0);
      __pyx_t_1 = __pyx_t_3;
      __pyx_L42_bool_binop_done:;
      if (__pyx_t_1) {

        /* "cytimes/parser.pxd":222
 *             # Decimal comma normalization (e.g., '1,234' -> '1.234')
 *             elif state == State.DIGIT_DOT and com_count == 1 and dot_count == 0:
 *                 tokens.append(str_replace(token, ",", ".", -1))             # <<<<<<<<<<<<<<
 * 
 *             # Other cases
*/
        __pyx_t_5 = PyUnicode_Replace(__pyx_v_token, __pyx_mstate_global->__pyx_kp_u__12, __pyx_mstate_global->__pyx_kp_u__2, -1L); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 222, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 222, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

        /* "cytimes/parser.pxd":221
 * 
 *             # Decimal comma normalization (e.g., '1,234' -> '1.234')
 *             elif state == State.DIGIT_DOT and com_count == 1 and dot_count == 0:             # <<<<<<<<<<<<<<
 *                 tokens.append(str_replace(token, ",", ".", -1))
 * 
*/
        goto __pyx_L30;
      }

      /* "cytimes/parser.pxd":226
 *             # Other cases
 *             else:
 *                 tokens.append(token)             # <<<<<<<<<<<<<<
 * 
 *         # Nested loop: break - - - - - - - - - - - - - - - - - - - - - - - - -
*/
      /*else*/ {
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_v_token); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(6, 226, __pyx_L1_error)
      }
      __pyx_L30:;

      /* "cytimes/parser.pxd":192
 * 
 *         # Add token
 *         if token is not None:             # <<<<<<<<<<<<<<
 *             # Pure alpha or digit token
 *             if state in (State.ALPHA, State.DIGIT):
*/
    }
  }

  /* "cytimes/parser.pxd":231
 * 
 *     # Main loop: break -------------------------------------------------------
 *     return tokens             # <<<<<<<<<<<<<<
 * 
 * cpdef list timelex(str dtstr)
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_tokens);
  __pyx_r = __pyx_v_tokens;
  goto __pyx_L0;

  /* "cytimes/parser.pxd":20
 *     ALPHA_DOT = 4
 * 
 * cdef inline list _timelex(str data, Py_ssize_t pos, Py_ssize_t length=0):             # <<<<<<<<<<<<<<
 *     """Tokenize a datetime-like string into lexical units (tokens).
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cytimes.parser._timelex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tokens);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_XDECREF(__pyx_v_sub_token);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":51
 * 
 * # Timelex -------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def timelex(data: str) -> list[str]:
 *     """Tokenize a datetime-like string into lexical units (tokens).
*/

static PyObject *__pyx_pw_7cytimes_6parser_1timelex(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 PyObject *__pyx_f_7cytimes_6parser_timelex(PyObject *__pyx_v_data, CYTHON_UNUSED int __pyx_skip_dispatch) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser__timelex __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("timelex", 0);

  /* "cytimes/parser.py":67
 *         * A single normalized numeric token.
 *     """
 *     return _timelex(data, 0, 0)  # type: ignore             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.length = 0;
  __pyx_t_1 = __pyx_f_7cytimes_6parser__timelex(__pyx_v_data, 0, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":51
 * 
 * # Timelex -------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def timelex(data: str) -> list[str]:
 *     """Tokenize a datetime-like string into lexical units (tokens).
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.timelex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_1timelex(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_7cytimes_6parser_timelex, "Tokenize a datetime-like string into lexical units (tokens).\n\n    This lexer performs a single left-to-right pass over `data` and emits tokens\n    based on `maximal runs` of letters or digits, while preserving separators\n    as individual one-character tokens. It is optimized for datetime strings\n    (ISO/RFC-like), and implements special handling for dots and decimal commas.\n\n    :param data `<'str'>`: The datetime string to be tokenized.\n    :returns `<'list[str]'>`: A list of tokens that are either:\n\n        * Maximal runs of letters (Unicode-aware) or ASCII digits\n        * Individual one-character separators (including spaces and punctuation),\n        * A single normalized numeric token.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_1timelex = {"timelex", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_1timelex, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_timelex};
static PyObject *__pyx_pw_7cytimes_6parser_1timelex(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_data = 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("timelex (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_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(0, 51, __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, 51, __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, "timelex", 0) < (0)) __PYX_ERR(0, 51, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("timelex", 1, 1, 1, i); __PYX_ERR(0, 51, __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, 51, __pyx_L3_error)
    }
    __pyx_v_data = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("timelex", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 51, __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("cytimes.parser.timelex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_data), (&PyUnicode_Type), 0, "data", 2))) __PYX_ERR(0, 52, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_timelex(__pyx_self, __pyx_v_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_7cytimes_6parser_timelex(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_data) {
  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("timelex", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_timelex(__pyx_v_data, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.timelex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":164
 *     __cls: object
 * 
 *     def __init__(             # <<<<<<<<<<<<<<
 *         self,
 *         yearfirst: cython.bint = True,
*/

/* Python wrapper */
static int __pyx_pw_7cytimes_6parser_7Configs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_7cytimes_6parser_7Configs___init__, "Configuration for `<'Parser'>`.\n\n        A `Configs` instance controls how tokens are recognized and how ambiguous\n        year/month/day triples are interpreted. It maintains several token namespaces\n        (e.g., month, weekday, AM/PM, timezone names) and enforces cross-namespace\n        uniqueness rules so a token cannot silently change meaning.\n\n        :param yearfirst `<'bool'>`: Interpret the first ambiguous Y/M/D value as year. Defaults to `True`.\n        :param dayfirst `<'bool'>`: Interpret the first ambiguous Y/M/D values as day. Defaults to `False`.\n\n        Ambiguous Y/M/D\n        ---------------\n        Two booleans control ambiguous triplets (e.g. \"01/05/09\"):\n\n        - `yearfirst` has precedence over `dayfirst` when both are True.\n        - If all three positions are ambiguous, these apply:\n            * yearfirst=False, dayfirst=False -> M/D/Y\n            * yearfirst=False, dayfirst=True  -> D/M/Y\n            * yearfirst=True,  dayfirst=False -> Y/M/D\n            * yearfirst=True,  dayfirst=True  -> Y/D/M\n        - If exactly one component is unambiguous (e.g. a number > 12), the parser\n        should infer the order regardless of these flags.\n\n        Namespaces\n        ----------\n        pertain : set[str]\n            Tokenss like \"of\" that indicate a possessive/pertain relationship.\n        jump : set[str]\n            Low-priority stopwords that may safely be skipped (e.g. \"and\", \"at\", \"on\").\n        utc : set[str]\n            Tokens that explicitly denote UTC (e.g. \"utc\", \"gmt\", \"z\").\n        tz : dict[str, int]\n            Timezone aliases mapped to UTC offset in seconds (e.g. {\"est\": -18000}).\n        month : dict[str, int]\n            Month names/aliases to month number (1..12).\n        weekday : dict[str, int]\n            Weekday names/aliases to weekday number (0=Mon..6=Sun).\n        hms : dict[str, int]\n            Time unit flags: 0 = hour, 1 = minute, 2 = second.\n        ampm : d""ict[str, int]\n            AM/PM flags: 0 = AM, 1 = PM.\n\n        Normalization & Validation\n        --------------------------\n        - All tokens are normalized to lowercase for conflict checking.\n        - Then each token will generate three case variants for recognition:\n            * lowercase\n            * uppercase\n            * titlecase\n        - Integer values are range-checked:\n            * tz offset:  -86,400 .. 86,400  (seconds)\n            * month:       1 .. 12 (January .. December)\n            * weekday:     0 .. 6  (Monday .. Sunday)\n            * hms:         0 .. 2  (hour/minute/second)\n            * ampm:        0 .. 1  (AM/PM)\n\n        Conflict Policy\n        ---------------\n        - Overlap token is rejected unless explicitly allowed:\n            * `jump` is lowest priority and may overlap with any namespace.\n            * Re-adding a token to the same namespace is allowed.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7cytimes_6parser_7Configs___init__;
#endif
static int __pyx_pw_7cytimes_6parser_7Configs_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_v_yearfirst;
  int __pyx_v_dayfirst;
  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("__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_yearfirst,&__pyx_mstate_global->__pyx_n_u_dayfirst,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 164, __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(0, 164, __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(0, 164, __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(0, 164, __pyx_L3_error)
    } else {
      switch (__pyx_nargs) {
        case  2:
        values[1] = __Pyx_ArgRef_VARARGS(__pyx_args, 1);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 164, __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(0, 164, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    if (values[0]) {
      __pyx_v_yearfirst = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_yearfirst == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 166, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":166
 *     def __init__(
 *         self,
 *         yearfirst: cython.bint = True,             # <<<<<<<<<<<<<<
 *         dayfirst: cython.bint = False,
 *     ) -> None:
*/
      __pyx_v_yearfirst = ((int)1);
    }
    if (values[1]) {
      __pyx_v_dayfirst = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_dayfirst == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":167
 *         self,
 *         yearfirst: cython.bint = True,
 *         dayfirst: cython.bint = False,             # <<<<<<<<<<<<<<
 *     ) -> None:
 *         """Configuration for `<'Parser'>`.
*/
      __pyx_v_dayfirst = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, __pyx_nargs); __PYX_ERR(0, 164, __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("cytimes.parser.Configs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs___init__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_yearfirst, __pyx_v_dayfirst);

  /* "cytimes/parser.py":164
 *     __cls: object
 * 
 *     def __init__(             # <<<<<<<<<<<<<<
 *         self,
 *         yearfirst: cython.bint = True,
*/

  /* 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_7cytimes_6parser_7Configs___init__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_v_yearfirst, int __pyx_v_dayfirst) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":231
 *             * Re-adding a token to the same namespace is allowed.
 *         """
 *         self._yearfirst = yearfirst             # <<<<<<<<<<<<<<
 *         self._dayfirst = dayfirst
 *         #: The following order matters for conflict checking
*/
  __pyx_v_self->_yearfirst = __pyx_v_yearfirst;

  /* "cytimes/parser.py":232
 *         """
 *         self._yearfirst = yearfirst
 *         self._dayfirst = dayfirst             # <<<<<<<<<<<<<<
 *         #: The following order matters for conflict checking
 *         self.reset_settings()
*/
  __pyx_v_self->_dayfirst = __pyx_v_dayfirst;

  /* "cytimes/parser.py":234
 *         self._dayfirst = dayfirst
 *         #: The following order matters for conflict checking
 *         self.reset_settings()             # <<<<<<<<<<<<<<
 * 
 *     @classmethod
*/
  __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->reset_settings(__pyx_v_self, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 234, __pyx_L1_error)

  /* "cytimes/parser.py":164
 *     __cls: object
 * 
 *     def __init__(             # <<<<<<<<<<<<<<
 *         self,
 *         yearfirst: cython.bint = True,
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Configs.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":236
 *         self.reset_settings()
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_parserinfo(cls, info: parserinfo) -> Configs:
 *         """Build `Configs` from an existing `dateutil.parser.parserinfo` <'Configs'>`.
*/

/* Python wrapper */
static struct __pyx_obj_7cytimes_6parser_Configs *__pyx_pw_7cytimes_6parser_7Configs_3from_parserinfo(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*/
PyDoc_STRVAR(__pyx_doc_7cytimes_6parser_7Configs_2from_parserinfo, "Build `Configs` from an existing `dateutil.parser.parserinfo` <'Configs'>`.\n\n        :param info `<'dateutil.parser.parserinfo'>`: An existing parserinfo instance.\n        :returns `<'Configs'>`: A Configs instance constructed from `info`,\n            with equivalent settings.\n\n        ## Example\n        ```python\n        from cytimes import Configs\n        from dateutil.parser import parserinfo\n        info = parserinfo()\n        cfg = Configs.from_parserinfo(info)\n        ```\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_3from_parserinfo = {"from_parserinfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_3from_parserinfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_2from_parserinfo};
static struct __pyx_obj_7cytimes_6parser_Configs *__pyx_pw_7cytimes_6parser_7Configs_3from_parserinfo(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_info = 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_7cytimes_6parser_Configs *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_parserinfo (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_info,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, 236, __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, 236, __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_parserinfo", 0) < (0)) __PYX_ERR(0, 236, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("from_parserinfo", 1, 1, 1, i); __PYX_ERR(0, 236, __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, 236, __pyx_L3_error)
    }
    __pyx_v_info = values[0];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_parserinfo", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 236, __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("cytimes.parser.Configs.from_parserinfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_2from_parserinfo(((PyTypeObject*)__pyx_v_cls), __pyx_v_info);

  /* 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_7cytimes_6parser_Configs *__pyx_pf_7cytimes_6parser_7Configs_2from_parserinfo(PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_info) {
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 0;
  PyObject *__pyx_7genexpr__pyx_v_i = NULL;
  PyObject *__pyx_7genexpr__pyx_v_row = NULL;
  PyObject *__pyx_7genexpr__pyx_v_t = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_i = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_row = NULL;
  PyObject *__pyx_8genexpr1__pyx_v_t = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_i = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_row = NULL;
  PyObject *__pyx_8genexpr2__pyx_v_t = NULL;
  PyObject *__pyx_8genexpr3__pyx_v_i = NULL;
  PyObject *__pyx_8genexpr3__pyx_v_row = NULL;
  PyObject *__pyx_8genexpr3__pyx_v_t = NULL;
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_error __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  size_t __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump __pyx_t_10;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain __pyx_t_11;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc __pyx_t_12;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz __pyx_t_13;
  Py_ssize_t __pyx_t_14;
  PyObject *(*__pyx_t_15)(PyObject *);
  Py_ssize_t __pyx_t_16;
  PyObject *(*__pyx_t_17)(PyObject *);
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month __pyx_t_18;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday __pyx_t_19;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms __pyx_t_20;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm __pyx_t_21;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("from_parserinfo", 0);

  /* "cytimes/parser.py":252
 *         ```
 *         """
 *         if not isinstance(info, parserinfo):             # <<<<<<<<<<<<<<
 *             errors.raise_error(
 *                 errors.InvalidParserInfo,
*/
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_parserinfo); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_info, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (!__pyx_t_2);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":254
 *         if not isinstance(info, parserinfo):
 *             errors.raise_error(
 *                 errors.InvalidParserInfo,             # <<<<<<<<<<<<<<
 *                 cls,
 *                 "from_parserinfo(info)",
*/
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_InvalidParserInfo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":258
 *                 "from_parserinfo(info)",
 *                 "Expects an instance of 'dateutil.parser.parserinfo', "
 *                 "instead got %s." % (type(info)),             # <<<<<<<<<<<<<<
 *             )
 *         # Construct Configs
*/
    __pyx_t_1 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Expects_an_instance_of_dateutil, ((PyObject *)Py_TYPE(__pyx_v_info))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);

    /* "cytimes/parser.py":253
 *         """
 *         if not isinstance(info, parserinfo):
 *             errors.raise_error(             # <<<<<<<<<<<<<<
 *                 errors.InvalidParserInfo,
 *                 cls,
*/
    __pyx_t_5.__pyx_n = 3;
    __pyx_t_5.cls = ((PyObject *)__pyx_v_cls);
    __pyx_t_5.input_msg = __pyx_mstate_global->__pyx_kp_u_from_parserinfo_info;
    __pyx_t_5.error_msg = ((PyObject*)__pyx_t_1);
    __pyx_f_7cytimes_6errors_raise_error(__pyx_t_4, 0, &__pyx_t_5); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":252
 *         ```
 *         """
 *         if not isinstance(info, parserinfo):             # <<<<<<<<<<<<<<
 *             errors.raise_error(
 *                 errors.InvalidParserInfo,
*/
  }

  /* "cytimes/parser.py":261
 *             )
 *         # Construct Configs
 *         cfg: Configs = cls(yearfirst=bool(info.yearfirst), dayfirst=bool(info.dayfirst))             # <<<<<<<<<<<<<<
 *         #: The following order matters for conflict checking
 *         cfg.clear_settings()
*/
  __pyx_t_4 = NULL;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_yearfirst); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyBool_FromLong((!(!__pyx_t_3))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_dayfirst); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyBool_FromLong((!(!__pyx_t_3))); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 261, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = 1;
  {
    PyObject *__pyx_callargs[2 + ((CYTHON_VECTORCALL) ? 2 : 0)] = {__pyx_t_4, NULL};
    __pyx_t_9 = __Pyx_MakeVectorcallBuilderKwds(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_yearfirst, __pyx_t_6, __pyx_t_9, __pyx_callargs+1, 0) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
    if (__Pyx_VectorcallBuilder_AddArg(__pyx_mstate_global->__pyx_n_u_dayfirst, __pyx_t_7, __pyx_t_9, __pyx_callargs+1, 1) < (0)) __PYX_ERR(0, 261, __pyx_L1_error)
    __pyx_t_1 = __Pyx_Object_Vectorcall_CallFromBuilder((PyObject*)__pyx_v_cls, __pyx_callargs+__pyx_t_8, (1-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET), __pyx_t_9);
    __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_9); __pyx_t_9 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 261, __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_7cytimes_6parser_Configs))))) __PYX_ERR(0, 261, __pyx_L1_error)
  __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":263
 *         cfg: Configs = cls(yearfirst=bool(info.yearfirst), dayfirst=bool(info.dayfirst))
 *         #: The following order matters for conflict checking
 *         cfg.clear_settings()             # <<<<<<<<<<<<<<
 *         if isinstance(info.JUMP, (list, tuple, set)):
 *             cfg.replace_jump(set(info.JUMP))
*/
  __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->clear_settings(__pyx_v_cfg, 0); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 263, __pyx_L1_error)

  /* "cytimes/parser.py":264
 *         #: The following order matters for conflict checking
 *         cfg.clear_settings()
 *         if isinstance(info.JUMP, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_jump(set(info.JUMP))
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_JUMP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyList_Check(__pyx_t_1); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_1); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = PySet_Check(__pyx_t_1); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":265
 *         cfg.clear_settings()
 *         if isinstance(info.JUMP, (list, tuple, set)):
 *             cfg.replace_jump(set(info.JUMP))             # <<<<<<<<<<<<<<
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
 *             cfg.replace_pertain(set(info.PERTAIN))
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_JUMP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = PySet_New(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_10.__pyx_n = 1;
    __pyx_t_10.tokens = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_jump(__pyx_v_cfg, 0, &__pyx_t_10); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":264
 *         #: The following order matters for conflict checking
 *         cfg.clear_settings()
 *         if isinstance(info.JUMP, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_jump(set(info.JUMP))
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
*/
  }

  /* "cytimes/parser.py":266
 *         if isinstance(info.JUMP, (list, tuple, set)):
 *             cfg.replace_jump(set(info.JUMP))
 *         if isinstance(info.PERTAIN, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_pertain(set(info.PERTAIN))
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_PERTAIN); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_2 = PySet_Check(__pyx_t_9); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L9_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":267
 *             cfg.replace_jump(set(info.JUMP))
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
 *             cfg.replace_pertain(set(info.PERTAIN))             # <<<<<<<<<<<<<<
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
 *             cfg.replace_utc(set(info.UTCZONE))
*/
    __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_PERTAIN); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_1 = PySet_New(__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_11.__pyx_n = 1;
    __pyx_t_11.tokens = ((PyObject*)__pyx_t_1);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_pertain(__pyx_v_cfg, 0, &__pyx_t_11); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":266
 *         if isinstance(info.JUMP, (list, tuple, set)):
 *             cfg.replace_jump(set(info.JUMP))
 *         if isinstance(info.PERTAIN, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_pertain(set(info.PERTAIN))
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
*/
  }

  /* "cytimes/parser.py":268
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
 *             cfg.replace_pertain(set(info.PERTAIN))
 *         if isinstance(info.UTCZONE, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_utc(set(info.UTCZONE))
 *         if isinstance(info.TZOFFSET, dict):
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_UTCZONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyList_Check(__pyx_t_1); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_1); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L13_bool_binop_done;
  }
  __pyx_t_2 = PySet_Check(__pyx_t_1); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L13_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":269
 *             cfg.replace_pertain(set(info.PERTAIN))
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
 *             cfg.replace_utc(set(info.UTCZONE))             # <<<<<<<<<<<<<<
 *         if isinstance(info.TZOFFSET, dict):
 *             cfg.replace_tz(dict(info.TZOFFSET))
*/
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_UTCZONE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = PySet_New(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_12.__pyx_n = 1;
    __pyx_t_12.tokens = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_utc(__pyx_v_cfg, 0, &__pyx_t_12); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":268
 *         if isinstance(info.PERTAIN, (list, tuple, set)):
 *             cfg.replace_pertain(set(info.PERTAIN))
 *         if isinstance(info.UTCZONE, (list, tuple, set)):             # <<<<<<<<<<<<<<
 *             cfg.replace_utc(set(info.UTCZONE))
 *         if isinstance(info.TZOFFSET, dict):
*/
  }

  /* "cytimes/parser.py":270
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
 *             cfg.replace_utc(set(info.UTCZONE))
 *         if isinstance(info.TZOFFSET, dict):             # <<<<<<<<<<<<<<
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_TZOFFSET); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_3 = PyDict_Check(__pyx_t_9); 
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":271
 *             cfg.replace_utc(set(info.UTCZONE))
 *         if isinstance(info.TZOFFSET, dict):
 *             cfg.replace_tz(dict(info.TZOFFSET))             # <<<<<<<<<<<<<<
 *         if isinstance(info.MONTHS, (list, tuple)):
 *             cfg.replace_month(
*/
    __pyx_t_1 = NULL;
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_TZOFFSET); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_1, __pyx_t_7};
      __pyx_t_9 = __Pyx_PyObject_FastCall((PyObject*)(&PyDict_Type), __pyx_callargs+__pyx_t_8, (2-__pyx_t_8) | (__pyx_t_8*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 271, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
    }
    __pyx_t_13.__pyx_n = 1;
    __pyx_t_13.mapping = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_tz(__pyx_v_cfg, 0, &__pyx_t_13); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 271, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":270
 *         if isinstance(info.UTCZONE, (list, tuple, set)):
 *             cfg.replace_utc(set(info.UTCZONE))
 *         if isinstance(info.TZOFFSET, dict):             # <<<<<<<<<<<<<<
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):
*/
  }

  /* "cytimes/parser.py":272
 *         if isinstance(info.TZOFFSET, dict):
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_month(
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_MONTHS); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_9); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L18_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":273
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):
 *             cfg.replace_month(             # <<<<<<<<<<<<<<
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
 *             )
*/
    { /* enter inner scope */

      /* "cytimes/parser.py":274
 *         if isinstance(info.MONTHS, (list, tuple)):
 *             cfg.replace_month(
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}             # <<<<<<<<<<<<<<
 *             )
 *         if isinstance(info.WEEKDAYS, (list, tuple)):
*/
      __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 274, __pyx_L22_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_7 = __pyx_mstate_global->__pyx_int_0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_MONTHS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L22_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6);
        __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 274, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 274, __pyx_L22_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_15)) {
          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, 274, __pyx_L22_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_14;
          } 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, 274, __pyx_L22_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_14));
            #else
            __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_14);
            #endif
            ++__pyx_t_14;
          }
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L22_error)
        } else {
          __pyx_t_1 = __pyx_t_15(__pyx_t_6);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 274, __pyx_L22_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_row, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_i, __pyx_t_7);
        __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7);
        __pyx_t_7 = __pyx_t_1;
        __pyx_t_1 = 0;
        if (likely(PyList_CheckExact(__pyx_7genexpr__pyx_v_row)) || PyTuple_CheckExact(__pyx_7genexpr__pyx_v_row)) {
          __pyx_t_1 = __pyx_7genexpr__pyx_v_row; __Pyx_INCREF(__pyx_t_1);
          __pyx_t_16 = 0;
          __pyx_t_17 = NULL;
        } else {
          __pyx_t_16 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_7genexpr__pyx_v_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 274, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_17 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 274, __pyx_L22_error)
        }
        for (;;) {
          if (likely(!__pyx_t_17)) {
            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(0, 274, __pyx_L22_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_16, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_16;
            } 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(0, 274, __pyx_L22_error)
                #endif
                if (__pyx_t_16 >= __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_16));
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_16);
              #endif
              ++__pyx_t_16;
            }
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L22_error)
          } else {
            __pyx_t_4 = __pyx_t_17(__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(0, 274, __pyx_L22_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_7genexpr__pyx_v_t, __pyx_t_4);
          __pyx_t_4 = 0;
          __pyx_t_4 = __Pyx_PyLong_AddObjC(__pyx_7genexpr__pyx_v_i, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 274, __pyx_L22_error)
          __Pyx_GOTREF(__pyx_t_4);
          if (unlikely(PyDict_SetItem(__pyx_t_9, (PyObject*)__pyx_7genexpr__pyx_v_t, (PyObject*)__pyx_t_4))) __PYX_ERR(0, 274, __pyx_L22_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_i); __pyx_7genexpr__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_row); __pyx_7genexpr__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
      goto __pyx_L29_exit_scope;
      __pyx_L22_error:;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_i); __pyx_7genexpr__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_row); __pyx_7genexpr__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t); __pyx_7genexpr__pyx_v_t = 0;
      goto __pyx_L1_error;
      __pyx_L29_exit_scope:;
    } /* exit inner scope */

    /* "cytimes/parser.py":273
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):
 *             cfg.replace_month(             # <<<<<<<<<<<<<<
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
 *             )
*/
    __pyx_t_18.__pyx_n = 1;
    __pyx_t_18.mapping = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_month(__pyx_v_cfg, 0, &__pyx_t_18); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":272
 *         if isinstance(info.TZOFFSET, dict):
 *             cfg.replace_tz(dict(info.TZOFFSET))
 *         if isinstance(info.MONTHS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_month(
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
*/
  }

  /* "cytimes/parser.py":276
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
 *             )
 *         if isinstance(info.WEEKDAYS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_weekday(
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_WEEKDAYS); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 276, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L31_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_9); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L31_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":277
 *             )
 *         if isinstance(info.WEEKDAYS, (list, tuple)):
 *             cfg.replace_weekday(             # <<<<<<<<<<<<<<
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
 *             )
*/
    { /* enter inner scope */

      /* "cytimes/parser.py":278
 *         if isinstance(info.WEEKDAYS, (list, tuple)):
 *             cfg.replace_weekday(
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}             # <<<<<<<<<<<<<<
 *             )
 *         if isinstance(info.HMS, (list, tuple)):
*/
      __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 278, __pyx_L35_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_7 = __pyx_mstate_global->__pyx_int_0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_WEEKDAYS); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L35_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
        __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1);
        __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 278, __pyx_L35_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 278, __pyx_L35_error)
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      for (;;) {
        if (likely(!__pyx_t_15)) {
          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(0, 278, __pyx_L35_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_14;
          } 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(0, 278, __pyx_L35_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14));
            #else
            __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14);
            #endif
            ++__pyx_t_14;
          }
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L35_error)
        } else {
          __pyx_t_6 = __pyx_t_15(__pyx_t_1);
          if (unlikely(!__pyx_t_6)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 278, __pyx_L35_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_row, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_i, __pyx_t_7);
        __pyx_t_6 = __Pyx_PyLong_AddObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L35_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7);
        __pyx_t_7 = __pyx_t_6;
        __pyx_t_6 = 0;
        if (likely(PyList_CheckExact(__pyx_8genexpr1__pyx_v_row)) || PyTuple_CheckExact(__pyx_8genexpr1__pyx_v_row)) {
          __pyx_t_6 = __pyx_8genexpr1__pyx_v_row; __Pyx_INCREF(__pyx_t_6);
          __pyx_t_16 = 0;
          __pyx_t_17 = NULL;
        } else {
          __pyx_t_16 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_8genexpr1__pyx_v_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 278, __pyx_L35_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_17 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 278, __pyx_L35_error)
        }
        for (;;) {
          if (likely(!__pyx_t_17)) {
            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, 278, __pyx_L35_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_16, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_16;
            } 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, 278, __pyx_L35_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_16));
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_16);
              #endif
              ++__pyx_t_16;
            }
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 278, __pyx_L35_error)
          } else {
            __pyx_t_4 = __pyx_t_17(__pyx_t_6);
            if (unlikely(!__pyx_t_4)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 278, __pyx_L35_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_8genexpr1__pyx_v_t, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_9, (PyObject*)__pyx_8genexpr1__pyx_v_t, (PyObject*)__pyx_8genexpr1__pyx_v_i))) __PYX_ERR(0, 278, __pyx_L35_error)
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_row); __pyx_8genexpr1__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
      goto __pyx_L42_exit_scope;
      __pyx_L35_error:;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i); __pyx_8genexpr1__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_row); __pyx_8genexpr1__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t); __pyx_8genexpr1__pyx_v_t = 0;
      goto __pyx_L1_error;
      __pyx_L42_exit_scope:;
    } /* exit inner scope */

    /* "cytimes/parser.py":277
 *             )
 *         if isinstance(info.WEEKDAYS, (list, tuple)):
 *             cfg.replace_weekday(             # <<<<<<<<<<<<<<
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
 *             )
*/
    __pyx_t_19.__pyx_n = 1;
    __pyx_t_19.mapping = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_weekday(__pyx_v_cfg, 0, &__pyx_t_19); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 277, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":276
 *                 {t: i + 1 for i, row in enumerate(info.MONTHS) for t in row}
 *             )
 *         if isinstance(info.WEEKDAYS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_weekday(
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
*/
  }

  /* "cytimes/parser.py":280
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
 *             )
 *         if isinstance(info.HMS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})
 *         if isinstance(info.AMPM, (list, tuple)):
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_HMS); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L44_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_9); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L44_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":281
 *             )
 *         if isinstance(info.HMS, (list, tuple)):
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})             # <<<<<<<<<<<<<<
 *         if isinstance(info.AMPM, (list, tuple)):
 *             cfg.replace_ampm({t: i for i, row in enumerate(info.AMPM) for t in row})
*/
    { /* enter inner scope */
      __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 281, __pyx_L48_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_7 = __pyx_mstate_global->__pyx_int_0;
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_HMS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L48_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
        __pyx_t_6 = __pyx_t_1; __Pyx_INCREF(__pyx_t_6);
        __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 281, __pyx_L48_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 281, __pyx_L48_error)
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      for (;;) {
        if (likely(!__pyx_t_15)) {
          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, 281, __pyx_L48_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            __pyx_t_1 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_14;
          } 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, 281, __pyx_L48_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_14));
            #else
            __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_14);
            #endif
            ++__pyx_t_14;
          }
          if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L48_error)
        } else {
          __pyx_t_1 = __pyx_t_15(__pyx_t_6);
          if (unlikely(!__pyx_t_1)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 281, __pyx_L48_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_row, __pyx_t_1);
        __pyx_t_1 = 0;
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_i, __pyx_t_7);
        __pyx_t_1 = __Pyx_PyLong_AddObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L48_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_7);
        __pyx_t_7 = __pyx_t_1;
        __pyx_t_1 = 0;
        if (likely(PyList_CheckExact(__pyx_8genexpr2__pyx_v_row)) || PyTuple_CheckExact(__pyx_8genexpr2__pyx_v_row)) {
          __pyx_t_1 = __pyx_8genexpr2__pyx_v_row; __Pyx_INCREF(__pyx_t_1);
          __pyx_t_16 = 0;
          __pyx_t_17 = NULL;
        } else {
          __pyx_t_16 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_8genexpr2__pyx_v_row); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 281, __pyx_L48_error)
          __Pyx_GOTREF(__pyx_t_1);
          __pyx_t_17 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 281, __pyx_L48_error)
        }
        for (;;) {
          if (likely(!__pyx_t_17)) {
            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(0, 281, __pyx_L48_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_16, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_16;
            } 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(0, 281, __pyx_L48_error)
                #endif
                if (__pyx_t_16 >= __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_16));
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_16);
              #endif
              ++__pyx_t_16;
            }
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 281, __pyx_L48_error)
          } else {
            __pyx_t_4 = __pyx_t_17(__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(0, 281, __pyx_L48_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_8genexpr2__pyx_v_t, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_9, (PyObject*)__pyx_8genexpr2__pyx_v_t, (PyObject*)__pyx_8genexpr2__pyx_v_i))) __PYX_ERR(0, 281, __pyx_L48_error)
        }
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_row); __pyx_8genexpr2__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t); __pyx_8genexpr2__pyx_v_t = 0;
      goto __pyx_L55_exit_scope;
      __pyx_L48_error:;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i); __pyx_8genexpr2__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_row); __pyx_8genexpr2__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t); __pyx_8genexpr2__pyx_v_t = 0;
      goto __pyx_L1_error;
      __pyx_L55_exit_scope:;
    } /* exit inner scope */
    __pyx_t_20.__pyx_n = 1;
    __pyx_t_20.mapping = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_hms(__pyx_v_cfg, 0, &__pyx_t_20); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 281, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":280
 *                 {t: i for i, row in enumerate(info.WEEKDAYS) for t in row}
 *             )
 *         if isinstance(info.HMS, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})
 *         if isinstance(info.AMPM, (list, tuple)):
*/
  }

  /* "cytimes/parser.py":282
 *         if isinstance(info.HMS, (list, tuple)):
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})
 *         if isinstance(info.AMPM, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_ampm({t: i for i, row in enumerate(info.AMPM) for t in row})
 *         return cfg
*/
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_AMPM); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyList_Check(__pyx_t_9); 
  if (!__pyx_t_2) {
  } else {
    __pyx_t_3 = __pyx_t_2;
    goto __pyx_L57_bool_binop_done;
  }
  __pyx_t_2 = PyTuple_Check(__pyx_t_9); 
  __pyx_t_3 = __pyx_t_2;
  __pyx_L57_bool_binop_done:;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":283
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})
 *         if isinstance(info.AMPM, (list, tuple)):
 *             cfg.replace_ampm({t: i for i, row in enumerate(info.AMPM) for t in row})             # <<<<<<<<<<<<<<
 *         return cfg
 * 
*/
    { /* enter inner scope */
      __pyx_t_9 = PyDict_New(); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 283, __pyx_L61_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_mstate_global->__pyx_int_0);
      __pyx_t_7 = __pyx_mstate_global->__pyx_int_0;
      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_mstate_global->__pyx_n_u_AMPM); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 283, __pyx_L61_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
        __pyx_t_1 = __pyx_t_6; __Pyx_INCREF(__pyx_t_1);
        __pyx_t_14 = 0;
        __pyx_t_15 = NULL;
      } else {
        __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L61_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_15 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 283, __pyx_L61_error)
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      for (;;) {
        if (likely(!__pyx_t_15)) {
          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(0, 283, __pyx_L61_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            __pyx_t_6 = __Pyx_PyList_GetItemRefFast(__pyx_t_1, __pyx_t_14, __Pyx_ReferenceSharing_OwnStrongReference);
            ++__pyx_t_14;
          } 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(0, 283, __pyx_L61_error)
              #endif
              if (__pyx_t_14 >= __pyx_temp) break;
            }
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14));
            #else
            __pyx_t_6 = __Pyx_PySequence_ITEM(__pyx_t_1, __pyx_t_14);
            #endif
            ++__pyx_t_14;
          }
          if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 283, __pyx_L61_error)
        } else {
          __pyx_t_6 = __pyx_t_15(__pyx_t_1);
          if (unlikely(!__pyx_t_6)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 283, __pyx_L61_error)
              PyErr_Clear();
            }
            break;
          }
        }
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_row, __pyx_t_6);
        __pyx_t_6 = 0;
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_i, __pyx_t_7);
        __pyx_t_6 = __Pyx_PyLong_AddObjC(__pyx_t_7, __pyx_mstate_global->__pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 283, __pyx_L61_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7);
        __pyx_t_7 = __pyx_t_6;
        __pyx_t_6 = 0;
        if (likely(PyList_CheckExact(__pyx_8genexpr3__pyx_v_row)) || PyTuple_CheckExact(__pyx_8genexpr3__pyx_v_row)) {
          __pyx_t_6 = __pyx_8genexpr3__pyx_v_row; __Pyx_INCREF(__pyx_t_6);
          __pyx_t_16 = 0;
          __pyx_t_17 = NULL;
        } else {
          __pyx_t_16 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_8genexpr3__pyx_v_row); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 283, __pyx_L61_error)
          __Pyx_GOTREF(__pyx_t_6);
          __pyx_t_17 = (CYTHON_COMPILING_IN_LIMITED_API) ? PyIter_Next : __Pyx_PyObject_GetIterNextFunc(__pyx_t_6); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 283, __pyx_L61_error)
        }
        for (;;) {
          if (likely(!__pyx_t_17)) {
            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, 283, __pyx_L61_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              __pyx_t_4 = __Pyx_PyList_GetItemRefFast(__pyx_t_6, __pyx_t_16, __Pyx_ReferenceSharing_OwnStrongReference);
              ++__pyx_t_16;
            } 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, 283, __pyx_L61_error)
                #endif
                if (__pyx_t_16 >= __pyx_temp) break;
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              __pyx_t_4 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_16));
              #else
              __pyx_t_4 = __Pyx_PySequence_ITEM(__pyx_t_6, __pyx_t_16);
              #endif
              ++__pyx_t_16;
            }
            if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L61_error)
          } else {
            __pyx_t_4 = __pyx_t_17(__pyx_t_6);
            if (unlikely(!__pyx_t_4)) {
              PyObject* exc_type = PyErr_Occurred();
              if (exc_type) {
                if (unlikely(!__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) __PYX_ERR(0, 283, __pyx_L61_error)
                PyErr_Clear();
              }
              break;
            }
          }
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_XDECREF_SET(__pyx_8genexpr3__pyx_v_t, __pyx_t_4);
          __pyx_t_4 = 0;
          if (unlikely(PyDict_SetItem(__pyx_t_9, (PyObject*)__pyx_8genexpr3__pyx_v_t, (PyObject*)__pyx_8genexpr3__pyx_v_i))) __PYX_ERR(0, 283, __pyx_L61_error)
        }
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i); __pyx_8genexpr3__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_row); __pyx_8genexpr3__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t); __pyx_8genexpr3__pyx_v_t = 0;
      goto __pyx_L68_exit_scope;
      __pyx_L61_error:;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i); __pyx_8genexpr3__pyx_v_i = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_row); __pyx_8genexpr3__pyx_v_row = 0;
      __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t); __pyx_8genexpr3__pyx_v_t = 0;
      goto __pyx_L1_error;
      __pyx_L68_exit_scope:;
    } /* exit inner scope */
    __pyx_t_21.__pyx_n = 1;
    __pyx_t_21.mapping = ((PyObject*)__pyx_t_9);
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->replace_ampm(__pyx_v_cfg, 0, &__pyx_t_21); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;

    /* "cytimes/parser.py":282
 *         if isinstance(info.HMS, (list, tuple)):
 *             cfg.replace_hms({t: i for i, row in enumerate(info.HMS) for t in row})
 *         if isinstance(info.AMPM, (list, tuple)):             # <<<<<<<<<<<<<<
 *             cfg.replace_ampm({t: i for i, row in enumerate(info.AMPM) for t in row})
 *         return cfg
*/
  }

  /* "cytimes/parser.py":284
 *         if isinstance(info.AMPM, (list, tuple)):
 *             cfg.replace_ampm({t: i for i, row in enumerate(info.AMPM) for t in row})
 *         return cfg             # <<<<<<<<<<<<<<
 * 
 *     # Y/M/D -----------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __Pyx_INCREF((PyObject *)__pyx_v_cfg);
  __pyx_r = __pyx_v_cfg;
  goto __pyx_L0;

  /* "cytimes/parser.py":236
 *         self.reset_settings()
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_parserinfo(cls, info: parserinfo) -> Configs:
 *         """Build `Configs` from an existing `dateutil.parser.parserinfo` <'Configs'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.parser.Configs.from_parserinfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cfg);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_i);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_row);
  __Pyx_XDECREF(__pyx_7genexpr__pyx_v_t);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_i);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_row);
  __Pyx_XDECREF(__pyx_8genexpr1__pyx_v_t);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_i);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_row);
  __Pyx_XDECREF(__pyx_8genexpr2__pyx_v_t);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_i);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_row);
  __Pyx_XDECREF(__pyx_8genexpr3__pyx_v_t);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":287
 * 
 *     # Y/M/D -----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def yearfirst(self) -> bool:
 *         """Whether to interpret ambiguous Y/M/D with the first position as `year` `<'bool'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_9yearfirst_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_9yearfirst_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_7cytimes_6parser_7Configs_9yearfirst___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_9yearfirst___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":294
 *         - `yearfirst` has higher priority than `dayfirst` when both are set to `True`.
 *         """
 *         return self._yearfirst             # <<<<<<<<<<<<<<
 * 
 *     @property
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_yearfirst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 294, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":287
 * 
 *     # Y/M/D -----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def yearfirst(self) -> bool:
 *         """Whether to interpret ambiguous Y/M/D with the first position as `year` `<'bool'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.yearfirst.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":296
 *         return self._yearfirst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dayfirst(self) -> bool:
 *         """Whether to interpret ambiguous Y/M/D with the first position as `day` `<'bool'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_8dayfirst_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_8dayfirst_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_7cytimes_6parser_7Configs_8dayfirst___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_8dayfirst___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":303
 *         - `yearfirst` has higher priority than `dayfirst` when both are set to `True`.
 *         """
 *         return self._dayfirst             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_dayfirst); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":296
 *         return self._yearfirst
 * 
 *     @property             # <<<<<<<<<<<<<<
 *     def dayfirst(self) -> bool:
 *         """Whether to interpret ambiguous Y/M/D with the first position as `day` `<'bool'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.dayfirst.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":305
 *         return self._dayfirst
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def order_hint(self) -> str:
 *         """Give a hint of the ambiguous Y/M/D order based
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_5order_hint(PyObject *__pyx_v_self, 
#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 PyObject *__pyx_f_7cytimes_6parser_7Configs_order_hint(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch) {
  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_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("order_hint", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_order_hint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_5order_hint)) {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__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_2)) __PYX_ERR(0, 305, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 305, __pyx_L1_error)
        __pyx_r = ((PyObject*)__pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":310
 *         on `yearfirst` and `dayfirst` settings `<'str'>`.
 *         """
 *         if self._yearfirst and self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "Y/D/M"
 *         elif self._yearfirst and not self._dayfirst:
*/
  if (__pyx_v_self->_yearfirst) {
  } else {
    __pyx_t_6 = __pyx_v_self->_yearfirst;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = __pyx_v_self->_dayfirst;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_6) {

    /* "cytimes/parser.py":311
 *         """
 *         if self._yearfirst and self._dayfirst:
 *             return "Y/D/M"             # <<<<<<<<<<<<<<
 *         elif self._yearfirst and not self._dayfirst:
 *             return "Y/M/D"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Y_D_M);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_Y_D_M;
    goto __pyx_L0;

    /* "cytimes/parser.py":310
 *         on `yearfirst` and `dayfirst` settings `<'str'>`.
 *         """
 *         if self._yearfirst and self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "Y/D/M"
 *         elif self._yearfirst and not self._dayfirst:
*/
  }

  /* "cytimes/parser.py":312
 *         if self._yearfirst and self._dayfirst:
 *             return "Y/D/M"
 *         elif self._yearfirst and not self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "Y/M/D"
 *         elif not self._yearfirst and self._dayfirst:
*/
  if (__pyx_v_self->_yearfirst) {
  } else {
    __pyx_t_6 = __pyx_v_self->_yearfirst;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_7 = (!__pyx_v_self->_dayfirst);
  __pyx_t_6 = __pyx_t_7;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_6) {

    /* "cytimes/parser.py":313
 *             return "Y/D/M"
 *         elif self._yearfirst and not self._dayfirst:
 *             return "Y/M/D"             # <<<<<<<<<<<<<<
 *         elif not self._yearfirst and self._dayfirst:
 *             return "D/M/Y"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_Y_M_D);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_Y_M_D;
    goto __pyx_L0;

    /* "cytimes/parser.py":312
 *         if self._yearfirst and self._dayfirst:
 *             return "Y/D/M"
 *         elif self._yearfirst and not self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "Y/M/D"
 *         elif not self._yearfirst and self._dayfirst:
*/
  }

  /* "cytimes/parser.py":314
 *         elif self._yearfirst and not self._dayfirst:
 *             return "Y/M/D"
 *         elif not self._yearfirst and self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "D/M/Y"
 *         else:
*/
  __pyx_t_7 = (!__pyx_v_self->_yearfirst);
  if (__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = __pyx_v_self->_dayfirst;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_6) {

    /* "cytimes/parser.py":315
 *             return "Y/M/D"
 *         elif not self._yearfirst and self._dayfirst:
 *             return "D/M/Y"             # <<<<<<<<<<<<<<
 *         else:
 *             return "M/D/Y"
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_D_M_Y);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_D_M_Y;
    goto __pyx_L0;

    /* "cytimes/parser.py":314
 *         elif self._yearfirst and not self._dayfirst:
 *             return "Y/M/D"
 *         elif not self._yearfirst and self._dayfirst:             # <<<<<<<<<<<<<<
 *             return "D/M/Y"
 *         else:
*/
  }

  /* "cytimes/parser.py":317
 *             return "D/M/Y"
 *         else:
 *             return "M/D/Y"             # <<<<<<<<<<<<<<
 * 
 *     # Jump ------------------------------------------------------------
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_kp_u_M_D_Y);
    __pyx_r = __pyx_mstate_global->__pyx_kp_u_M_D_Y;
    goto __pyx_L0;
  }

  /* "cytimes/parser.py":305
 *         return self._dayfirst
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def order_hint(self) -> str:
 *         """Give a hint of the ambiguous Y/M/D order based
*/

  /* 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("cytimes.parser.Configs.order_hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_5order_hint(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_4order_hint, "Give a hint of the ambiguous Y/M/D order based\n        on `yearfirst` and `dayfirst` settings `<'str'>`.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_5order_hint = {"order_hint", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_5order_hint, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_4order_hint};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_5order_hint(PyObject *__pyx_v_self, 
#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("order_hint (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("order_hint", 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("order_hint", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_4order_hint(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4order_hint(struct __pyx_obj_7cytimes_6parser_Configs *__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("order_hint", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_order_hint(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.order_hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":320
 * 
 *     # Jump ------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def jump(self) -> set[str]:
 *         """Set of tokens that should be skipped `<'set[str]'>`."""
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_4jump_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_4jump_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_7cytimes_6parser_7Configs_4jump___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4jump___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":323
 *     def jump(self) -> set[str]:
 *         """Set of tokens that should be skipped `<'set[str]'>`."""
 *         return set(self._jump)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySet_New(__pyx_v_self->_jump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":320
 * 
 *     # Jump ------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def jump(self) -> set[str]:
 *         """Set of tokens that should be skipped `<'set[str]'>`."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.jump.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":325
 *         return set(self._jump)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_jump(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7add_jump(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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_t_7;
  Py_ssize_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_jump", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_jump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 325, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_7add_jump)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 325, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":338
 *         """
 *         # Validate token
 *         token = self._validate_token("jump", token)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         set_add(self._jump, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_jump, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":340
 *         token = self._validate_token("jump", token)
 *         # Add to base namespace
 *         set_add(self._jump, token)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_jump;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 340, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":342
 *         set_add(self._jump, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._jump_ext, tok)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 342, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 342, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 342, __pyx_L1_error)
      #endif
      if (__pyx_t_8 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8);
    #endif
    ++__pyx_t_8;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":343
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._jump_ext, tok)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_jump_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 343, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":342
 *         set_add(self._jump, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._jump_ext, tok)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":344
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._jump_ext, tok)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":325
 *         return set(self._jump)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_jump(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7add_jump(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_6add_jump, "Add token that should be skipped `<'bool'>`.\n\n        :param token `<'str'>`: The `jump` token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_jump(\"at\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_7add_jump = {"add_jump", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_7add_jump, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_6add_jump};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7add_jump(PyObject *__pyx_v_self, 
#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_token = 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_jump (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_token,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, 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(0, 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, "add_jump", 0) < (0)) __PYX_ERR(0, 325, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_jump", 1, 1, 1, i); __PYX_ERR(0, 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(0, 325, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_jump", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 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("cytimes.parser.Configs.add_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 327, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_6add_jump(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_6add_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("add_jump", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_jump(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 325, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":346
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_jump(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_9remove_jump(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __pyx_v_removed;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  Py_ssize_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_jump", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_jump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_9remove_jump)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 346, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":359
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("jump", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         removed = set_discard(self._jump, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_jump, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 359, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":361
 *         token = self._lowercase_token("jump", token)
 *         # Remove from base namespace
 *         removed = set_discard(self._jump, token)             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         if removed:
*/
  __pyx_t_1 = __pyx_v_self->_jump;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 361, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_removed = __pyx_t_6;

  /* "cytimes/parser.py":363
 *         removed = set_discard(self._jump, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._jump_ext, tok)
*/
  if (__pyx_v_removed) {

    /* "cytimes/parser.py":364
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._jump_ext, tok)
 *         return removed
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 364, __pyx_L1_error)
    }
    __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 364, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 364, __pyx_L1_error)
        #endif
        if (__pyx_t_7 >= __pyx_temp) break;
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7));
      #else
      __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_7);
      #endif
      ++__pyx_t_7;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "cytimes/parser.py":365
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._jump_ext, tok)             # <<<<<<<<<<<<<<
 *         return removed
 * 
*/
      __pyx_t_1 = __pyx_v_self->_jump_ext;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 365, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":364
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._jump_ext, tok)
 *         return removed
*/
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":363
 *         removed = set_discard(self._jump, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._jump_ext, tok)
*/
  }

  /* "cytimes/parser.py":366
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._jump_ext, tok)
 *         return removed             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = __pyx_v_removed;
  goto __pyx_L0;

  /* "cytimes/parser.py":346
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_jump(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_9remove_jump(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_8remove_jump, "Remove `jump` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `jump` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_jump(\"at\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_9remove_jump = {"remove_jump", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_9remove_jump, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_8remove_jump};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_9remove_jump(PyObject *__pyx_v_self, 
#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_token = 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_jump (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_token,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, 346, __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, 346, __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_jump", 0) < (0)) __PYX_ERR(0, 346, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_jump", 1, 1, 1, i); __PYX_ERR(0, 346, __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, 346, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_jump", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 346, __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("cytimes.parser.Configs.remove_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 348, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_8remove_jump(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_8remove_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_jump", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_jump(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 346, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_11replace_jump(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump *__pyx_optional_args) {

  /* "cytimes/parser.py":370
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `jump` tokens `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_tokens = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_jump", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tokens = __pyx_optional_args->tokens;
    }
  }
  __Pyx_INCREF(__pyx_v_tokens);

  /* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_jump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 368, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_11replace_jump)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_tokens};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 368, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":382
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_JUMP
 * 
*/
  __pyx_t_6 = (__pyx_v_tokens == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":383
 *         # Reset to default
 *         if tokens is None:
 *             tokens = _DEFAULT_JUMP             # <<<<<<<<<<<<<<
 * 
 *         # Cache tokens
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_JUMP);
    __Pyx_DECREF_SET(__pyx_v_tokens, __pyx_v_7cytimes_6parser__DEFAULT_JUMP);

    /* "cytimes/parser.py":382
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_JUMP
 * 
*/
  }

  /* "cytimes/parser.py":386
 * 
 *         # Cache tokens
 *         old: set = self._jump             # <<<<<<<<<<<<<<
 *         old_ext: set = self._jump_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_jump;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":387
 *         # Cache tokens
 *         old: set = self._jump
 *         old_ext: set = self._jump_ext             # <<<<<<<<<<<<<<
 * 
 *         # Add tokens
*/
  __pyx_t_1 = __pyx_v_self->_jump_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":390
 * 
 *         # Add tokens
 *         self._jump = set()             # <<<<<<<<<<<<<<
 *         self._jump_ext = set()
 *         try:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_jump);
  __Pyx_DECREF(__pyx_v_self->_jump);
  __pyx_v_self->_jump = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":391
 *         # Add tokens
 *         self._jump = set()
 *         self._jump_ext = set()             # <<<<<<<<<<<<<<
 *         try:
 *             for t in tokens:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 391, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_jump_ext);
  __Pyx_DECREF(__pyx_v_self->_jump_ext);
  __pyx_v_self->_jump_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":392
 *         self._jump = set()
 *         self._jump_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_jump(self._ensure_str_token("jump", t))
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":393
 *         self._jump_ext = set()
 *         try:
 *             for t in tokens:             # <<<<<<<<<<<<<<
 *                 self.add_jump(self._ensure_str_token("jump", t))
 *         except Exception:
*/
      __pyx_t_10 = 0;
      __pyx_t_2 = __Pyx_set_iterator(__pyx_v_tokens, 1, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 393, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "cytimes/parser.py":394
 *         try:
 *             for t in tokens:
 *                 self.add_jump(self._ensure_str_token("jump", t))             # <<<<<<<<<<<<<<
 *         except Exception:
 *             # Rollback
*/
        __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_jump, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_jump(__pyx_v_self, ((PyObject*)__pyx_t_2), 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 394, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":392
 *         self._jump = set()
 *         self._jump_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_jump(self._ensure_str_token("jump", t))
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":395
 *             for t in tokens:
 *                 self.add_jump(self._ensure_str_token("jump", t))
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._jump = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 395, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);

      /* "cytimes/parser.py":397
 *         except Exception:
 *             # Rollback
 *             self._jump = old             # <<<<<<<<<<<<<<
 *             self._jump_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_jump);
      __Pyx_DECREF(__pyx_v_self->_jump);
      __pyx_v_self->_jump = __pyx_v_old;

      /* "cytimes/parser.py":398
 *             # Rollback
 *             self._jump = old
 *             self._jump_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_jump_ext);
      __Pyx_DECREF(__pyx_v_self->_jump_ext);
      __pyx_v_self->_jump_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":399
 *             self._jump = old
 *             self._jump_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4);
      __pyx_t_1 = 0;  __pyx_t_2 = 0;  __pyx_t_4 = 0; 
      __PYX_ERR(0, 399, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":392
 *         self._jump = set()
 *         self._jump_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_jump(self._ensure_str_token("jump", t))
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":400
 *             self._jump_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_tokens);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_11replace_jump(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_10replace_jump, "Replace the set of `jump` tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `jump` tokens. Defaults to `None`.\n            If `None`, resets to the default `jump` set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_jump({\"at\", \"on\", ...})\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_11replace_jump = {"replace_jump", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_11replace_jump, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_10replace_jump};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_11replace_jump(PyObject *__pyx_v_self, 
#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_tokens = 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("replace_jump (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_tokens,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, 368, __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, 368, __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, "replace_jump", 0) < (0)) __PYX_ERR(0, 368, __pyx_L3_error)

      /* "cytimes/parser.py":370
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `jump` tokens `<'bool'>`.
 * 
*/
      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, 368, __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_tokens = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_jump", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 368, __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("cytimes.parser.Configs.replace_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tokens), (&PySet_Type), 1, "tokens", 2))) __PYX_ERR(0, 370, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_10replace_jump(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_tokens);

  /* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_10replace_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_jump", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.tokens = __pyx_v_tokens;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_jump(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 368, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":402
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_jump(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_13is_jump(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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("is_jump", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_jump); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 402, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_13is_jump)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 402, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":411
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._jump_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":412
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return set_contains(self._jump_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":411
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._jump_ext, token)
*/
  }

  /* "cytimes/parser.py":413
 *         if token is None:
 *             return False
 *         return set_contains(self._jump_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     # Pertain ---------------------------------------------------------
*/
  __pyx_t_1 = __pyx_v_self->_jump_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":402
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_jump(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_13is_jump(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_12is_jump, "Check if the `token` can be recognized as `jump` `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_13is_jump = {"is_jump", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_13is_jump, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_12is_jump};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_13is_jump(PyObject *__pyx_v_self, 
#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_token = 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_jump (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_token,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, 402, __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, 402, __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_jump", 0) < (0)) __PYX_ERR(0, 402, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_jump", 1, 1, 1, i); __PYX_ERR(0, 402, __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, 402, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_jump", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 402, __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("cytimes.parser.Configs.is_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 404, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_12is_jump(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_12is_jump(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_jump", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_jump(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 402, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_jump", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":416
 * 
 *     # Pertain ---------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def pertain(self) -> set[str]:
 *         """Set of tokens to recognize as `pertain` `<'set[str]'>`."""
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7pertain_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7pertain_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_7cytimes_6parser_7Configs_7pertain___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_7pertain___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":419
 *     def pertain(self) -> set[str]:
 *         """Set of tokens to recognize as `pertain` `<'set[str]'>`."""
 *         return set(self._pertain)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySet_New(__pyx_v_self->_pertain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":416
 * 
 *     # Pertain ---------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def pertain(self) -> set[str]:
 *         """Set of tokens to recognize as `pertain` `<'set[str]'>`."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.pertain.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":421
 *         return set(self._pertain)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_pertain(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_15add_pertain(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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_t_7;
  Py_ssize_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_pertain", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_pertain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 421, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_15add_pertain)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 421, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":434
 *         """
 *         # Validate token
 *         token = self._validate_token("pertain", token)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         set_add(self._pertain, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_pertain, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 434, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":436
 *         token = self._validate_token("pertain", token)
 *         # Add to base namespace
 *         set_add(self._pertain, token)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_pertain;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":438
 *         set_add(self._pertain, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._pertain_ext, tok)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 438, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 438, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 438, __pyx_L1_error)
      #endif
      if (__pyx_t_8 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8);
    #endif
    ++__pyx_t_8;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 438, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":439
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._pertain_ext, tok)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_pertain_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":438
 *         set_add(self._pertain, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._pertain_ext, tok)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":440
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._pertain_ext, tok)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":421
 *         return set(self._pertain)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_pertain(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_15add_pertain(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_14add_pertain, "Add token that should be recognized as `pertain` `<'bool'>`.\n\n        :param token `<'str'>`: The `pertain` token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_pertain(\"of\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_15add_pertain = {"add_pertain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_15add_pertain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_14add_pertain};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_15add_pertain(PyObject *__pyx_v_self, 
#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_token = 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_pertain (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_token,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, 421, __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, 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, "add_pertain", 0) < (0)) __PYX_ERR(0, 421, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_pertain", 1, 1, 1, i); __PYX_ERR(0, 421, __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, 421, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_pertain", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 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("cytimes.parser.Configs.add_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 423, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_14add_pertain(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_14add_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("add_pertain", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_pertain(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 421, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":442
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_pertain(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_17remove_pertain(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __pyx_v_removed;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  Py_ssize_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_pertain", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_pertain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 442, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_17remove_pertain)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 442, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":455
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("pertain", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         removed = set_discard(self._pertain, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_pertain, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 455, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":457
 *         token = self._lowercase_token("pertain", token)
 *         # Remove from base namespace
 *         removed = set_discard(self._pertain, token)             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         if removed:
*/
  __pyx_t_1 = __pyx_v_self->_pertain;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 457, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_removed = __pyx_t_6;

  /* "cytimes/parser.py":459
 *         removed = set_discard(self._pertain, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._pertain_ext, tok)
*/
  if (__pyx_v_removed) {

    /* "cytimes/parser.py":460
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._pertain_ext, tok)
 *         return removed
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 460, __pyx_L1_error)
    }
    __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 460, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 460, __pyx_L1_error)
        #endif
        if (__pyx_t_7 >= __pyx_temp) break;
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7));
      #else
      __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_7);
      #endif
      ++__pyx_t_7;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 460, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "cytimes/parser.py":461
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._pertain_ext, tok)             # <<<<<<<<<<<<<<
 *         return removed
 * 
*/
      __pyx_t_1 = __pyx_v_self->_pertain_ext;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 461, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":460
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._pertain_ext, tok)
 *         return removed
*/
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":459
 *         removed = set_discard(self._pertain, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._pertain_ext, tok)
*/
  }

  /* "cytimes/parser.py":462
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._pertain_ext, tok)
 *         return removed             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = __pyx_v_removed;
  goto __pyx_L0;

  /* "cytimes/parser.py":442
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_pertain(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_17remove_pertain(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_16remove_pertain, "Remove `pertain` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `pertain` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_pertain(\"of\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_17remove_pertain = {"remove_pertain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_17remove_pertain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_16remove_pertain};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_17remove_pertain(PyObject *__pyx_v_self, 
#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_token = 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_pertain (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_token,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, 442, __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, 442, __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_pertain", 0) < (0)) __PYX_ERR(0, 442, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_pertain", 1, 1, 1, i); __PYX_ERR(0, 442, __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, 442, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_pertain", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 442, __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("cytimes.parser.Configs.remove_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 444, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_16remove_pertain(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_16remove_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_pertain", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_pertain(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 442, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":464
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_19replace_pertain(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain *__pyx_optional_args) {

  /* "cytimes/parser.py":466
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `pertain` tokens `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_tokens = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_pertain", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tokens = __pyx_optional_args->tokens;
    }
  }
  __Pyx_INCREF(__pyx_v_tokens);

  /* "cytimes/parser.py":464
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_pertain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 464, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_19replace_pertain)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_tokens};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 464, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":478
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_PERTAIN
 * 
*/
  __pyx_t_6 = (__pyx_v_tokens == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":479
 *         # Reset to default
 *         if tokens is None:
 *             tokens = _DEFAULT_PERTAIN             # <<<<<<<<<<<<<<
 * 
 *         # Cache tokens
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_PERTAIN);
    __Pyx_DECREF_SET(__pyx_v_tokens, __pyx_v_7cytimes_6parser__DEFAULT_PERTAIN);

    /* "cytimes/parser.py":478
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_PERTAIN
 * 
*/
  }

  /* "cytimes/parser.py":482
 * 
 *         # Cache tokens
 *         old: set = self._pertain             # <<<<<<<<<<<<<<
 *         old_ext: set = self._pertain_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_pertain;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":483
 *         # Cache tokens
 *         old: set = self._pertain
 *         old_ext: set = self._pertain_ext             # <<<<<<<<<<<<<<
 * 
 *         # Add tokens
*/
  __pyx_t_1 = __pyx_v_self->_pertain_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":486
 * 
 *         # Add tokens
 *         self._pertain = set()             # <<<<<<<<<<<<<<
 *         self._pertain_ext = set()
 *         try:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_pertain);
  __Pyx_DECREF(__pyx_v_self->_pertain);
  __pyx_v_self->_pertain = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":487
 *         # Add tokens
 *         self._pertain = set()
 *         self._pertain_ext = set()             # <<<<<<<<<<<<<<
 *         try:
 *             for t in tokens:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_pertain_ext);
  __Pyx_DECREF(__pyx_v_self->_pertain_ext);
  __pyx_v_self->_pertain_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":488
 *         self._pertain = set()
 *         self._pertain_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_pertain(self._ensure_str_token("pertain", t))
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":489
 *         self._pertain_ext = set()
 *         try:
 *             for t in tokens:             # <<<<<<<<<<<<<<
 *                 self.add_pertain(self._ensure_str_token("pertain", t))
 *         except Exception:
*/
      __pyx_t_10 = 0;
      __pyx_t_2 = __Pyx_set_iterator(__pyx_v_tokens, 1, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 489, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 489, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "cytimes/parser.py":490
 *         try:
 *             for t in tokens:
 *                 self.add_pertain(self._ensure_str_token("pertain", t))             # <<<<<<<<<<<<<<
 *         except Exception:
 *             # Rollback
*/
        __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_pertain, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 490, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_pertain(__pyx_v_self, ((PyObject*)__pyx_t_2), 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 490, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":488
 *         self._pertain = set()
 *         self._pertain_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_pertain(self._ensure_str_token("pertain", t))
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":491
 *             for t in tokens:
 *                 self.add_pertain(self._ensure_str_token("pertain", t))
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._pertain = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 491, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);

      /* "cytimes/parser.py":493
 *         except Exception:
 *             # Rollback
 *             self._pertain = old             # <<<<<<<<<<<<<<
 *             self._pertain_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_pertain);
      __Pyx_DECREF(__pyx_v_self->_pertain);
      __pyx_v_self->_pertain = __pyx_v_old;

      /* "cytimes/parser.py":494
 *             # Rollback
 *             self._pertain = old
 *             self._pertain_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_pertain_ext);
      __Pyx_DECREF(__pyx_v_self->_pertain_ext);
      __pyx_v_self->_pertain_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":495
 *             self._pertain = old
 *             self._pertain_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4);
      __pyx_t_1 = 0;  __pyx_t_2 = 0;  __pyx_t_4 = 0; 
      __PYX_ERR(0, 495, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":488
 *         self._pertain = set()
 *         self._pertain_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_pertain(self._ensure_str_token("pertain", t))
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":496
 *             self._pertain_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":464
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_tokens);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_19replace_pertain(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_18replace_pertain, "Replace the set of `pertain` tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `pertain` tokens. Defaults to `None`.\n            If `None`, resets to the default `pertain` set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_pertain({\"of\", \"for\", ...})\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_19replace_pertain = {"replace_pertain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_19replace_pertain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_18replace_pertain};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_19replace_pertain(PyObject *__pyx_v_self, 
#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_tokens = 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("replace_pertain (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_tokens,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, 464, __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, 464, __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, "replace_pertain", 0) < (0)) __PYX_ERR(0, 464, __pyx_L3_error)

      /* "cytimes/parser.py":466
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `pertain` tokens `<'bool'>`.
 * 
*/
      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, 464, __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_tokens = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_pertain", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 464, __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("cytimes.parser.Configs.replace_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tokens), (&PySet_Type), 1, "tokens", 2))) __PYX_ERR(0, 466, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_18replace_pertain(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_tokens);

  /* "cytimes/parser.py":464
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_18replace_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_pertain", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.tokens = __pyx_v_tokens;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_pertain(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 464, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":498
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_pertain(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_21is_pertain(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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("is_pertain", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_pertain); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 498, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_21is_pertain)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 498, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":507
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._pertain_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":508
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return set_contains(self._pertain_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":507
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._pertain_ext, token)
*/
  }

  /* "cytimes/parser.py":509
 *         if token is None:
 *             return False
 *         return set_contains(self._pertain_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     # UTC -------------------------------------------------------------
*/
  __pyx_t_1 = __pyx_v_self->_pertain_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 509, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":498
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_pertain(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_21is_pertain(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_20is_pertain, "Check if the `token` can be recognized as `pertain` `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_21is_pertain = {"is_pertain", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_21is_pertain, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_20is_pertain};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_21is_pertain(PyObject *__pyx_v_self, 
#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_token = 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_pertain (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_token,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, 498, __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, 498, __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_pertain", 0) < (0)) __PYX_ERR(0, 498, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_pertain", 1, 1, 1, i); __PYX_ERR(0, 498, __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, 498, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_pertain", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 498, __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("cytimes.parser.Configs.is_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 500, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_20is_pertain(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_20is_pertain(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_pertain", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_pertain(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 498, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_pertain", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":512
 * 
 *     # UTC -------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def utc(self) -> set[str]:
 *         """Set of tokens to recognize as `UTC` timezone `<'set[str]'>`."""
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_3utc_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_3utc_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_7cytimes_6parser_7Configs_3utc___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_3utc___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":515
 *     def utc(self) -> set[str]:
 *         """Set of tokens to recognize as `UTC` timezone `<'set[str]'>`."""
 *         return set(self._utc)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PySet_New(__pyx_v_self->_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":512
 * 
 *     # UTC -------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def utc(self) -> set[str]:
 *         """Set of tokens to recognize as `UTC` timezone `<'set[str]'>`."""
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.utc.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":517
 *         return set(self._utc)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_utc(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_23add_utc(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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_t_7;
  Py_ssize_t __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_utc", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 517, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_23add_utc)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 517, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":530
 *         """
 *         # Validate token
 *         token = self._validate_token("utc", token)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         set_add(self._utc, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_utc, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":532
 *         token = self._validate_token("utc", token)
 *         # Add to base namespace
 *         set_add(self._utc, token)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_utc;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 532, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":534
 *         set_add(self._utc, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._utc_ext, tok)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 534, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 534, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 534, __pyx_L1_error)
      #endif
      if (__pyx_t_8 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_8));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_8);
    #endif
    ++__pyx_t_8;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":535
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._utc_ext, tok)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_utc_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_7 = PySet_Add(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 535, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":534
 *         set_add(self._utc, token)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             set_add(self._utc_ext, tok)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":536
 *         for tok in self._gen_token_case_variants(token):
 *             set_add(self._utc_ext, tok)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":517
 *         return set(self._utc)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_utc(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_23add_utc(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_22add_utc, "Add token that should be recognized as UTC timezone `<'bool'>`.\n\n        :param token `<'str'>`: The `UTC` timezone token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_utc(\"gmt\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_23add_utc = {"add_utc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_23add_utc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_22add_utc};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_23add_utc(PyObject *__pyx_v_self, 
#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_token = 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_utc (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_token,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, 517, __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, 517, __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_utc", 0) < (0)) __PYX_ERR(0, 517, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_utc", 1, 1, 1, i); __PYX_ERR(0, 517, __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, 517, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_utc", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 517, __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("cytimes.parser.Configs.add_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 519, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_22add_utc(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_22add_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("add_utc", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_utc(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 517, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":538
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_utc(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_25remove_utc(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __pyx_v_removed;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  Py_ssize_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_utc", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 538, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_25remove_utc)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 538, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":551
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("utc", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         removed = set_discard(self._utc, token)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_utc, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":553
 *         token = self._lowercase_token("utc", token)
 *         # Remove from base namespace
 *         removed = set_discard(self._utc, token)             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         if removed:
*/
  __pyx_t_1 = __pyx_v_self->_utc;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 553, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_removed = __pyx_t_6;

  /* "cytimes/parser.py":555
 *         removed = set_discard(self._utc, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._utc_ext, tok)
*/
  if (__pyx_v_removed) {

    /* "cytimes/parser.py":556
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._utc_ext, tok)
 *         return removed
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 556, __pyx_L1_error)
    }
    __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_t_1 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 556, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
    __pyx_t_7 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    for (;;) {
      {
        Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
        #if !CYTHON_ASSUME_SAFE_SIZE
        if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 556, __pyx_L1_error)
        #endif
        if (__pyx_t_7 >= __pyx_temp) break;
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_7));
      #else
      __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_7);
      #endif
      ++__pyx_t_7;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 556, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
      __pyx_t_1 = 0;

      /* "cytimes/parser.py":557
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._utc_ext, tok)             # <<<<<<<<<<<<<<
 *         return removed
 * 
*/
      __pyx_t_1 = __pyx_v_self->_utc_ext;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_6 = PySet_Discard(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 557, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":556
 *         # Remove from extend namespace
 *         if removed:
 *             for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *                 set_discard(self._utc_ext, tok)
 *         return removed
*/
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":555
 *         removed = set_discard(self._utc, token)
 *         # Remove from extend namespace
 *         if removed:             # <<<<<<<<<<<<<<
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._utc_ext, tok)
*/
  }

  /* "cytimes/parser.py":558
 *             for tok in self._gen_token_case_variants(token):
 *                 set_discard(self._utc_ext, tok)
 *         return removed             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = __pyx_v_removed;
  goto __pyx_L0;

  /* "cytimes/parser.py":538
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_utc(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_25remove_utc(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_24remove_utc, "Remove `UTC` timezone token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `UTC` timezone token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_utc(\"gmt\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_25remove_utc = {"remove_utc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_25remove_utc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_24remove_utc};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_25remove_utc(PyObject *__pyx_v_self, 
#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_token = 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_utc (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_token,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, 538, __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, 538, __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_utc", 0) < (0)) __PYX_ERR(0, 538, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_utc", 1, 1, 1, i); __PYX_ERR(0, 538, __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, 538, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_utc", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 538, __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("cytimes.parser.Configs.remove_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 540, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_24remove_utc(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_24remove_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_utc", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_utc(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 538, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":560
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_27replace_utc(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc *__pyx_optional_args) {

  /* "cytimes/parser.py":562
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `UTC` timezone tokens `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_tokens = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_utc", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_tokens = __pyx_optional_args->tokens;
    }
  }
  __Pyx_INCREF(__pyx_v_tokens);

  /* "cytimes/parser.py":560
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 560, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_27replace_utc)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_tokens};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 560, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":574
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_UTC
 * 
*/
  __pyx_t_6 = (__pyx_v_tokens == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":575
 *         # Reset to default
 *         if tokens is None:
 *             tokens = _DEFAULT_UTC             # <<<<<<<<<<<<<<
 * 
 *         # Cache tokens
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_UTC);
    __Pyx_DECREF_SET(__pyx_v_tokens, __pyx_v_7cytimes_6parser__DEFAULT_UTC);

    /* "cytimes/parser.py":574
 *         """
 *         # Reset to default
 *         if tokens is None:             # <<<<<<<<<<<<<<
 *             tokens = _DEFAULT_UTC
 * 
*/
  }

  /* "cytimes/parser.py":578
 * 
 *         # Cache tokens
 *         old: set = self._utc             # <<<<<<<<<<<<<<
 *         old_ext: set = self._utc_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_utc;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":579
 *         # Cache tokens
 *         old: set = self._utc
 *         old_ext: set = self._utc_ext             # <<<<<<<<<<<<<<
 * 
 *         # Add tokens
*/
  __pyx_t_1 = __pyx_v_self->_utc_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":582
 * 
 *         # Add tokens
 *         self._utc = set()             # <<<<<<<<<<<<<<
 *         self._utc_ext = set()
 *         try:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 582, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_utc);
  __Pyx_DECREF(__pyx_v_self->_utc);
  __pyx_v_self->_utc = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":583
 *         # Add tokens
 *         self._utc = set()
 *         self._utc_ext = set()             # <<<<<<<<<<<<<<
 *         try:
 *             for t in tokens:
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 583, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_utc_ext);
  __Pyx_DECREF(__pyx_v_self->_utc_ext);
  __pyx_v_self->_utc_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":584
 *         self._utc = set()
 *         self._utc_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_utc(self._ensure_str_token("utc", t))
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":585
 *         self._utc_ext = set()
 *         try:
 *             for t in tokens:             # <<<<<<<<<<<<<<
 *                 self.add_utc(self._ensure_str_token("utc", t))
 *         except Exception:
*/
      __pyx_t_10 = 0;
      __pyx_t_2 = __Pyx_set_iterator(__pyx_v_tokens, 1, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 585, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_set_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 585, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;

        /* "cytimes/parser.py":586
 *         try:
 *             for t in tokens:
 *                 self.add_utc(self._ensure_str_token("utc", t))             # <<<<<<<<<<<<<<
 *         except Exception:
 *             # Rollback
*/
        __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_utc, __pyx_v_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 586, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_utc(__pyx_v_self, ((PyObject*)__pyx_t_2), 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 586, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":584
 *         self._utc = set()
 *         self._utc_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_utc(self._ensure_str_token("utc", t))
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":587
 *             for t in tokens:
 *                 self.add_utc(self._ensure_str_token("utc", t))
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._utc = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_4) < 0) __PYX_ERR(0, 587, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_4);

      /* "cytimes/parser.py":589
 *         except Exception:
 *             # Rollback
 *             self._utc = old             # <<<<<<<<<<<<<<
 *             self._utc_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_utc);
      __Pyx_DECREF(__pyx_v_self->_utc);
      __pyx_v_self->_utc = __pyx_v_old;

      /* "cytimes/parser.py":590
 *             # Rollback
 *             self._utc = old
 *             self._utc_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_utc_ext);
      __Pyx_DECREF(__pyx_v_self->_utc_ext);
      __pyx_v_self->_utc_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":591
 *             self._utc = old
 *             self._utc_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_2, __pyx_t_4);
      __pyx_t_1 = 0;  __pyx_t_2 = 0;  __pyx_t_4 = 0; 
      __PYX_ERR(0, 591, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":584
 *         self._utc = set()
 *         self._utc_ext = set()
 *         try:             # <<<<<<<<<<<<<<
 *             for t in tokens:
 *                 self.add_utc(self._ensure_str_token("utc", t))
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":592
 *             self._utc_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":560
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_tokens);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_27replace_utc(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_26replace_utc, "Replace the set of `UTC` timezone tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `UTC` timezone tokens. Defaults to `None`.\n            If `None`, resets to the default `UTC` timezone set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_utc({\"utc\", \"gmt\", ...})\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_27replace_utc = {"replace_utc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_27replace_utc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_26replace_utc};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_27replace_utc(PyObject *__pyx_v_self, 
#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_tokens = 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("replace_utc (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_tokens,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, 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(0, 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, "replace_utc", 0) < (0)) __PYX_ERR(0, 560, __pyx_L3_error)

      /* "cytimes/parser.py":562
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the set of `UTC` timezone tokens `<'bool'>`.
 * 
*/
      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, 560, __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_tokens = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_utc", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 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("cytimes.parser.Configs.replace_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_tokens), (&PySet_Type), 1, "tokens", 2))) __PYX_ERR(0, 562, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_26replace_utc(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_tokens);

  /* "cytimes/parser.py":560
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_26replace_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_tokens) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_utc", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.tokens = __pyx_v_tokens;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_utc(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 560, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":594
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_utc(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_29is_utc(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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("is_utc", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_utc); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 594, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_29is_utc)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 594, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":603
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._utc_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":604
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return set_contains(self._utc_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":603
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return set_contains(self._utc_ext, token)
*/
  }

  /* "cytimes/parser.py":605
 *         if token is None:
 *             return False
 *         return set_contains(self._utc_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     # Timezone --------------------------------------------------------
*/
  __pyx_t_1 = __pyx_v_self->_utc_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_6 = PySet_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 605, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":594
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_utc(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_29is_utc(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_28is_utc, "Check if the `token` can be recognized as `UTC` timezone `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_29is_utc = {"is_utc", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_29is_utc, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_28is_utc};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_29is_utc(PyObject *__pyx_v_self, 
#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_token = 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_utc (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_token,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, 594, __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, 594, __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_utc", 0) < (0)) __PYX_ERR(0, 594, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_utc", 1, 1, 1, i); __PYX_ERR(0, 594, __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, 594, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_utc", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 594, __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("cytimes.parser.Configs.is_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 596, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_28is_utc(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_28is_utc(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_utc", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_utc(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 594, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_utc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":608
 * 
 *     # Timezone --------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def tz(self) -> dict[str, int]:
 *         """Map of tokens to recognize as a `timezone` `<'dict[str, int]'>`
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_2tz_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_2tz_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_7cytimes_6parser_7Configs_2tz___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_2tz___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":614
 *         - Keys are timezone names and values are UTC offsets in seconds.
 *         """
 *         return dict(self._tz)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_tz == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 614, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->_tz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":608
 * 
 *     # Timezone --------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def tz(self) -> dict[str, int]:
 *         """Map of tokens to recognize as a `timezone` `<'dict[str, int]'>`
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.tz.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":616
 *         return dict(self._tz)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_tz(
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_31add_tz(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz *__pyx_optional_args) {
  int __pyx_v_hours = ((int)0);
  int __pyx_v_minutes = ((int)0);
  int __pyx_v_seconds = ((int)0);
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tok = NULL;
  int __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_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_tz", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_hours = __pyx_optional_args->hours;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_minutes = __pyx_optional_args->minutes;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_seconds = __pyx_optional_args->seconds;
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_tz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_31add_tz)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_hours); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 616, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyLong_From_int(__pyx_v_minutes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 616, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyLong_From_int(__pyx_v_seconds); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 616, __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[5] = {__pyx_t_3, __pyx_v_token, __pyx_t_5, __pyx_t_6, __pyx_t_7};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_8, (5-__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_2)) __PYX_ERR(0, 616, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 616, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_9;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":643
 *         """
 *         # Validate token
 *         token = self._validate_token("tz", token)             # <<<<<<<<<<<<<<
 *         # Validate value
 *         value: object = self._validate_value(
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_tz, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":645
 *         token = self._validate_token("tz", token)
 *         # Validate value
 *         value: object = self._validate_value(             # <<<<<<<<<<<<<<
 *             "tz", hours * 3_600 + minutes * 60 + seconds, -86_400, 86_400
 *         )
*/
  __pyx_t_10 = __pyx_f_7cytimes_6parser_7Configs__validate_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_tz, (((__pyx_v_hours * 0xE10) + (__pyx_v_minutes * 60)) + __pyx_v_seconds), -86400, 0x15180); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 645, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 645, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":649
 *         )
 *         # Add to base namespace
 *         dict_setitem(self._tz, token, value)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_tz;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_10 = PyDict_SetItem(__pyx_t_1, __pyx_v_token, __pyx_v_value); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 649, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":651
 *         dict_setitem(self._tz, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._tz_ext, tok, value)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 651, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 651, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 651, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 651, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 651, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":652
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._tz_ext, tok, value)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_tz_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_10 = PyDict_SetItem(__pyx_t_1, __pyx_v_tok, __pyx_v_value); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 652, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":651
 *         dict_setitem(self._tz, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._tz_ext, tok, value)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":653
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._tz_ext, tok, value)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":616
 *         return dict(self._tz)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_tz(
*/

  /* 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("cytimes.parser.Configs.add_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_31add_tz(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_30add_tz, "Add token that should be recognized as `timezone`\n        with the corresponding UTC offset.\n\n        :param token `<'str'>`: The `timezone` token to add (case-insensitive).\n        :param hours `<'int'>`: UTC offset in hours. Defaults to `0`.\n        :param minutes `<'int'>`: UTC offset in minutes. Defaults to `0`.\n        :param seconds `<'int'>`: UTC offset in seconds. Defaults to `0`.\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the UTC offset (hours & minutes & seconds) is invalid.\n\n        ## UTC Offset\n        - offset = hours * 3600 + minutes * 60 + seconds\n\n        ## Example\n        >>> cfg.add_tz(\"est\", hours=-5)\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_31add_tz = {"add_tz", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_31add_tz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_30add_tz};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_31add_tz(PyObject *__pyx_v_self, 
#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_token = 0;
  int __pyx_v_hours;
  int __pyx_v_minutes;
  int __pyx_v_seconds;
  #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("add_tz (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_token,&__pyx_mstate_global->__pyx_n_u_hours,&__pyx_mstate_global->__pyx_n_u_minutes_2,&__pyx_mstate_global->__pyx_n_u_seconds,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, 616, __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, 616, __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, 616, __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, 616, __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, 616, __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_tz", 0) < (0)) __PYX_ERR(0, 616, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_tz", 0, 1, 4, i); __PYX_ERR(0, 616, __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, 616, __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, 616, __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, 616, __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, 616, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_token = ((PyObject*)values[0]);
    if (values[1]) {
      __pyx_v_hours = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_hours == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 621, __pyx_L3_error)
    } else {
      __pyx_v_hours = ((int)0);
    }
    if (values[2]) {
      __pyx_v_minutes = __Pyx_PyLong_As_int(values[2]); if (unlikely((__pyx_v_minutes == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 622, __pyx_L3_error)
    } else {
      __pyx_v_minutes = ((int)0);
    }
    if (values[3]) {
      __pyx_v_seconds = __Pyx_PyLong_As_int(values[3]); if (unlikely((__pyx_v_seconds == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 623, __pyx_L3_error)
    } else {
      __pyx_v_seconds = ((int)0);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_tz", 0, 1, 4, __pyx_nargs); __PYX_ERR(0, 616, __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("cytimes.parser.Configs.add_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 620, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_30add_tz(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token, __pyx_v_hours, __pyx_v_minutes, __pyx_v_seconds);

  /* 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_7cytimes_6parser_7Configs_30add_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_hours, int __pyx_v_minutes, int __pyx_v_seconds) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_tz", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 3;
  __pyx_t_2.hours = __pyx_v_hours;
  __pyx_t_2.minutes = __pyx_v_minutes;
  __pyx_t_2.seconds = __pyx_v_seconds;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->add_tz(__pyx_v_self, __pyx_v_token, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 616, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":655
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_tz(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_33remove_tz(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_tz", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_tz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 655, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_33remove_tz)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 655, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 655, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":668
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("tz", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         try:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_tz, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 668, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":670
 *         token = self._lowercase_token("tz", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._tz, token)
 *         except KeyError:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":671
 *         # Remove from base namespace
 *         try:
 *             dict_delitem(self._tz, token)             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             return False
*/
      __pyx_t_1 = __pyx_v_self->_tz;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 671, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":670
 *         token = self._lowercase_token("tz", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._tz, token)
 *         except KeyError:
*/
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":672
 *         try:
 *             dict_delitem(self._tz, token)
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             return False
 *         # Remove from extend namespace
*/
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);

      /* "cytimes/parser.py":673
 *             dict_delitem(self._tz, token)
 *         except KeyError:
 *             return False             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
      __pyx_r = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":670
 *         token = self._lowercase_token("tz", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._tz, token)
 *         except KeyError:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":675
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._tz_ext, tok)
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 675, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 675, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 675, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 675, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":676
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._tz_ext, tok)
 *             except KeyError:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "cytimes/parser.py":677
 *         for tok in self._gen_token_case_variants(token):
 *             try:
 *                 dict_delitem(self._tz_ext, tok)             # <<<<<<<<<<<<<<
 *             except KeyError:
 *                 pass
*/
        __pyx_t_1 = __pyx_v_self->_tz_ext;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 677, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "cytimes/parser.py":676
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._tz_ext, tok)
 *             except KeyError:
*/
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "cytimes/parser.py":678
 *             try:
 *                 dict_delitem(self._tz_ext, tok)
 *             except KeyError:             # <<<<<<<<<<<<<<
 *                 pass
 *         return True
*/
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;

      /* "cytimes/parser.py":676
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._tz_ext, tok)
 *             except KeyError:
*/
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L14_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      __pyx_L20_try_end:;
    }

    /* "cytimes/parser.py":675
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._tz_ext, tok)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":680
 *             except KeyError:
 *                 pass
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":655
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_tz(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_33remove_tz(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_32remove_tz, "Remove `timezone` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `timezone` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_tz(\"est\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_33remove_tz = {"remove_tz", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_33remove_tz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_32remove_tz};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_33remove_tz(PyObject *__pyx_v_self, 
#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_token = 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_tz (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_token,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, 655, __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, 655, __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_tz", 0) < (0)) __PYX_ERR(0, 655, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_tz", 1, 1, 1, i); __PYX_ERR(0, 655, __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, 655, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_tz", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 655, __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("cytimes.parser.Configs.remove_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 657, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_32remove_tz(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_32remove_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_tz", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_tz(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 655, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":682
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_35replace_tz(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz *__pyx_optional_args) {

  /* "cytimes/parser.py":684
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `timezone` mapping `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_mapping = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_v = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_tz", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_mapping = __pyx_optional_args->mapping;
    }
  }
  __Pyx_INCREF(__pyx_v_mapping);

  /* "cytimes/parser.py":682
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_tz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_35replace_tz)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mapping};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 682, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 682, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":701
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_TZ
 * 
*/
  __pyx_t_6 = (__pyx_v_mapping == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":702
 *         # Reset to default
 *         if mapping is None:
 *             mapping = _DEFAULT_TZ             # <<<<<<<<<<<<<<
 * 
 *         # Cache mappings
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_TZ);
    __Pyx_DECREF_SET(__pyx_v_mapping, __pyx_v_7cytimes_6parser__DEFAULT_TZ);

    /* "cytimes/parser.py":701
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_TZ
 * 
*/
  }

  /* "cytimes/parser.py":705
 * 
 *         # Cache mappings
 *         old: dict = self._tz             # <<<<<<<<<<<<<<
 *         old_ext: dict = self._tz_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_tz;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":706
 *         # Cache mappings
 *         old: dict = self._tz
 *         old_ext: dict = self._tz_ext             # <<<<<<<<<<<<<<
 * 
 *         # Set tokens & values
*/
  __pyx_t_1 = __pyx_v_self->_tz_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":709
 * 
 *         # Set tokens & values
 *         self._tz = dict()             # <<<<<<<<<<<<<<
 *         self._tz_ext = dict()
 *         try:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 709, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tz);
  __Pyx_DECREF(__pyx_v_self->_tz);
  __pyx_v_self->_tz = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":710
 *         # Set tokens & values
 *         self._tz = dict()
 *         self._tz_ext = dict()             # <<<<<<<<<<<<<<
 *         try:
 *             for t, v in mapping.items():
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 710, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tz_ext);
  __Pyx_DECREF(__pyx_v_self->_tz_ext);
  __pyx_v_self->_tz_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":711
 *         self._tz = dict()
 *         self._tz_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_tz(
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":712
 *         self._tz_ext = dict()
 *         try:
 *             for t, v in mapping.items():             # <<<<<<<<<<<<<<
 *                 self.add_tz(
 *                     self._ensure_str_token("tz", t),
*/
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_mapping == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 712, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_mapping, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 712, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 712, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":714
 *             for t, v in mapping.items():
 *                 self.add_tz(
 *                     self._ensure_str_token("tz", t),             # <<<<<<<<<<<<<<
 *                     0,
 *                     0,
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_tz, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);

        /* "cytimes/parser.py":717
 *                     0,
 *                     0,
 *                     self._ensure_int_value("tz", v),             # <<<<<<<<<<<<<<
 *                 )
 *         except Exception:
*/
        __pyx_t_13 = __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_tz, __pyx_v_v); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 717, __pyx_L4_error)

        /* "cytimes/parser.py":713
 *         try:
 *             for t, v in mapping.items():
 *                 self.add_tz(             # <<<<<<<<<<<<<<
 *                     self._ensure_str_token("tz", t),
 *                     0,
*/
        __pyx_t_14.__pyx_n = 3;
        __pyx_t_14.hours = 0;
        __pyx_t_14.minutes = 0;
        __pyx_t_14.seconds = __pyx_t_13;
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_tz(__pyx_v_self, ((PyObject*)__pyx_t_4), 0, &__pyx_t_14); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 713, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":711
 *         self._tz = dict()
 *         self._tz_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_tz(
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":719
 *                     self._ensure_int_value("tz", v),
 *                 )
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._tz = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 719, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);

      /* "cytimes/parser.py":721
 *         except Exception:
 *             # Rollback
 *             self._tz = old             # <<<<<<<<<<<<<<
 *             self._tz_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_tz);
      __Pyx_DECREF(__pyx_v_self->_tz);
      __pyx_v_self->_tz = __pyx_v_old;

      /* "cytimes/parser.py":722
 *             # Rollback
 *             self._tz = old
 *             self._tz_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_tz_ext);
      __Pyx_DECREF(__pyx_v_self->_tz_ext);
      __pyx_v_self->_tz_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":723
 *             self._tz = old
 *             self._tz_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_2);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 723, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":711
 *         self._tz = dict()
 *         self._tz_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_tz(
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":724
 *             self._tz_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":682
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_mapping);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_35replace_tz(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_34replace_tz, "Replace the `timezone` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `timezone` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `timezone` tokens\n              and values are UTC offsets in seconds.\n            - If `None`, resets to the default `timezone` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `timezone` token conflicts with\n            other namespaces or the UTC offset value is invalid.\n\n        ## Example\n        >>> cfg.replace_tz({\"est\": -18000, \"edt\": -14400, ... })\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_35replace_tz = {"replace_tz", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_35replace_tz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_34replace_tz};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_35replace_tz(PyObject *__pyx_v_self, 
#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_mapping = 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("replace_tz (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_mapping,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, 682, __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, 682, __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, "replace_tz", 0) < (0)) __PYX_ERR(0, 682, __pyx_L3_error)

      /* "cytimes/parser.py":684
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `timezone` mapping `<'bool'>`.
 * 
*/
      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, 682, __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_mapping = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_tz", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 682, __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("cytimes.parser.Configs.replace_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mapping), (&PyDict_Type), 1, "mapping", 2))) __PYX_ERR(0, 684, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_34replace_tz(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_mapping);

  /* "cytimes/parser.py":682
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_34replace_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_tz", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.mapping = __pyx_v_mapping;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_tz(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 682, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":726
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_tz(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_37is_tz(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_tz", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_tz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_37is_tz)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 726, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":735
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._tz_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":736
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return dict_contains(self._tz_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":735
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._tz_ext, token)
*/
  }

  /* "cytimes/parser.py":737
 *         if token is None:
 *             return False
 *         return dict_contains(self._tz_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_t_1 = __pyx_v_self->_tz_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 737, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "cytimes/parser.py":726
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_tz(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_37is_tz(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_36is_tz, "Check if the `token` can be recognized as `timezone` `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_37is_tz = {"is_tz", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_37is_tz, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_36is_tz};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_37is_tz(PyObject *__pyx_v_self, 
#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_token = 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_tz (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_token,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, 726, __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, 726, __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_tz", 0) < (0)) __PYX_ERR(0, 726, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_tz", 1, 1, 1, i); __PYX_ERR(0, 726, __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, 726, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_tz", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 726, __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("cytimes.parser.Configs.is_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 728, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_36is_tz(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_36is_tz(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_tz", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_tz(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 726, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_tz", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":739
 *         return dict_contains(self._tz_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-200_000, check=False)
 *     def get_tz_offset(self, token: str) -> cython.int:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_39get_tz_offset(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_get_tz_offset(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value;
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_tz_offset", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_get_tz_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_39get_tz_offset)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 739, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":750
 *             is not recognizible (-100_000 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return utils.NULL_TZOFFSET
 *         value = dict_getitem(self._tz_ext, token)
*/
  __pyx_t_7 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "cytimes/parser.py":751
 *         """
 *         if token is None:
 *             return utils.NULL_TZOFFSET             # <<<<<<<<<<<<<<
 *         value = dict_getitem(self._tz_ext, token)
 *         if value == cython.NULL:
*/
    __pyx_r = __pyx_v_7cytimes_5utils_NULL_TZOFFSET;
    goto __pyx_L0;

    /* "cytimes/parser.py":750
 *             is not recognizible (-100_000 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return utils.NULL_TZOFFSET
 *         value = dict_getitem(self._tz_ext, token)
*/
  }

  /* "cytimes/parser.py":752
 *         if token is None:
 *             return utils.NULL_TZOFFSET
 *         value = dict_getitem(self._tz_ext, token)             # <<<<<<<<<<<<<<
 *         if value == cython.NULL:
 *             return utils.NULL_TZOFFSET
*/
  __pyx_t_1 = __pyx_v_self->_tz_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_value = PyDict_GetItem(__pyx_t_1, __pyx_v_token);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":753
 *             return utils.NULL_TZOFFSET
 *         value = dict_getitem(self._tz_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return utils.NULL_TZOFFSET
 *         return cython.cast(object, value)
*/
  __pyx_t_7 = (__pyx_v_value == NULL);
  if (__pyx_t_7) {

    /* "cytimes/parser.py":754
 *         value = dict_getitem(self._tz_ext, token)
 *         if value == cython.NULL:
 *             return utils.NULL_TZOFFSET             # <<<<<<<<<<<<<<
 *         return cython.cast(object, value)
 * 
*/
    __pyx_r = __pyx_v_7cytimes_5utils_NULL_TZOFFSET;
    goto __pyx_L0;

    /* "cytimes/parser.py":753
 *             return utils.NULL_TZOFFSET
 *         value = dict_getitem(self._tz_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return utils.NULL_TZOFFSET
 *         return cython.cast(object, value)
*/
  }

  /* "cytimes/parser.py":755
 *         if value == cython.NULL:
 *             return utils.NULL_TZOFFSET
 *         return cython.cast(object, value)             # <<<<<<<<<<<<<<
 * 
 *     # Month -----------------------------------------------------------
*/
  __pyx_t_6 = __Pyx_PyLong_As_int(((PyObject *)__pyx_v_value)); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 755, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":739
 *         return dict_contains(self._tz_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-200_000, check=False)
 *     def get_tz_offset(self, token: str) -> cython.int:
*/

  /* 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("cytimes.parser.Configs.get_tz_offset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -200000;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_39get_tz_offset(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_38get_tz_offset, "Get the corresponding UTC offset if `token`\n        can be recognized as `timezone` `<'int'>`\n\n        :param token `<'str'>`: Candidate for `timezone` token.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'int'>`: UTC offset in seconds, or `-100_000` if the `token`\n            is not recognizible (-100_000 is the sentinel value for None).\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_39get_tz_offset = {"get_tz_offset", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_39get_tz_offset, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_38get_tz_offset};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_39get_tz_offset(PyObject *__pyx_v_self, 
#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_token = 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_tz_offset (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_token,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, 739, __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, 739, __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_tz_offset", 0) < (0)) __PYX_ERR(0, 739, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_tz_offset", 1, 1, 1, i); __PYX_ERR(0, 739, __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, 739, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_tz_offset", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 739, __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("cytimes.parser.Configs.get_tz_offset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 741, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_38get_tz_offset(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_38get_tz_offset(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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_tz_offset", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_get_tz_offset(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-200000))) __PYX_ERR(0, 739, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.get_tz_offset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":758
 * 
 *     # Month -----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def month(self) -> dict[str, int]:
 *         """Map of tokens to recognize as `month` `<'dict[str, int]'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_5month_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_5month_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_7cytimes_6parser_7Configs_5month___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_5month___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":764
 *         - Keys are month names and values are month numbers: 1(Jan)...12(Dec).
 *         """
 *         return dict(self._month)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_month == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 764, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":758
 * 
 *     # Month -----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def month(self) -> dict[str, int]:
 *         """Map of tokens to recognize as `month` `<'dict[str, int]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.month.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":766
 *         return dict(self._month)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_month(self, token: str, month: cython.int) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_41add_month(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_month, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  int __pyx_t_7;
  int __pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_month", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 766, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_41add_month)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_month); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __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[3] = {__pyx_t_3, __pyx_v_token, __pyx_t_5};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__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(0, 766, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 766, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":785
 *         """
 *         # Validate token
 *         token = self._validate_token("month", token)             # <<<<<<<<<<<<<<
 *         # Validate value
 *         value: object = self._validate_value("month", month, 1, 12)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_month, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":787
 *         token = self._validate_token("month", token)
 *         # Validate value
 *         value: object = self._validate_value("month", month, 1, 12)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         dict_setitem(self._month, token, value)
*/
  __pyx_t_8 = __pyx_f_7cytimes_6parser_7Configs__validate_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_month, __pyx_v_month, 1, 12); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 787, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 787, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":789
 *         value: object = self._validate_value("month", month, 1, 12)
 *         # Add to base namespace
 *         dict_setitem(self._month, token, value)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_month;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_token, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":791
 *         dict_setitem(self._month, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._month_ext, tok, value)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 791, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 791, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 791, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_9);
    #endif
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 791, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":792
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._month_ext, tok, value)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_month_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_tok, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 792, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":791
 *         dict_setitem(self._month, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._month_ext, tok, value)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":793
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._month_ext, tok, value)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":766
 *         return dict(self._month)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_month(self, token: str, month: cython.int) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_41add_month(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_40add_month, "Add token that should be recognized as `month`\n        with the corresponding month number.\n\n        :param token `<'str'>`: The `month` token to add (case-insensitive).\n        :param month `<'int'>`: The month number (1=Jan...12=Dec).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the month number is invalid.\n\n        ## Month Number\n        - month: 1=Jan...12=Dec\n\n        ## Example\n        >>> cfg.add_month(\"jan\", 1)\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_41add_month = {"add_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_41add_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_40add_month};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_41add_month(PyObject *__pyx_v_self, 
#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_token = 0;
  int __pyx_v_month;
  #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_month (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_token,&__pyx_mstate_global->__pyx_n_u_month,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, 766, __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, 766, __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, 766, __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_month", 0) < (0)) __PYX_ERR(0, 766, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_month", 1, 2, 2, i); __PYX_ERR(0, 766, __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, 766, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 766, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
    __pyx_v_month = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_month == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 768, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_month", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 766, __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("cytimes.parser.Configs.add_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 768, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_40add_month(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token, __pyx_v_month);

  /* 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_7cytimes_6parser_7Configs_40add_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_month) {
  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("add_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_month(__pyx_v_self, __pyx_v_token, __pyx_v_month, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 766, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":795
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_month(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_43remove_month(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_month", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_43remove_month)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":808
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("month", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         try:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_month, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 808, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":810
 *         token = self._lowercase_token("month", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._month, token)
 *         except KeyError:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":811
 *         # Remove from base namespace
 *         try:
 *             dict_delitem(self._month, token)             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             return False
*/
      __pyx_t_1 = __pyx_v_self->_month;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 811, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":810
 *         token = self._lowercase_token("month", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._month, token)
 *         except KeyError:
*/
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":812
 *         try:
 *             dict_delitem(self._month, token)
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             return False
 *         # Remove from extend namespace
*/
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);

      /* "cytimes/parser.py":813
 *             dict_delitem(self._month, token)
 *         except KeyError:
 *             return False             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
      __pyx_r = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":810
 *         token = self._lowercase_token("month", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._month, token)
 *         except KeyError:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":815
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._month_ext, tok)
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 815, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 815, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 815, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":816
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._month_ext, tok)
 *             except KeyError:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "cytimes/parser.py":817
 *         for tok in self._gen_token_case_variants(token):
 *             try:
 *                 dict_delitem(self._month_ext, tok)             # <<<<<<<<<<<<<<
 *             except KeyError:
 *                 pass
*/
        __pyx_t_1 = __pyx_v_self->_month_ext;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 817, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "cytimes/parser.py":816
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._month_ext, tok)
 *             except KeyError:
*/
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "cytimes/parser.py":818
 *             try:
 *                 dict_delitem(self._month_ext, tok)
 *             except KeyError:             # <<<<<<<<<<<<<<
 *                 pass
 *         return True
*/
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;

      /* "cytimes/parser.py":816
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._month_ext, tok)
 *             except KeyError:
*/
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L14_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      __pyx_L20_try_end:;
    }

    /* "cytimes/parser.py":815
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._month_ext, tok)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":820
 *             except KeyError:
 *                 pass
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":795
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_month(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_43remove_month(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_42remove_month, "Remove `month` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `month` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_month(\"jan\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_43remove_month = {"remove_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_43remove_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_42remove_month};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_43remove_month(PyObject *__pyx_v_self, 
#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_token = 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_month (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_token,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, 795, __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, 795, __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_month", 0) < (0)) __PYX_ERR(0, 795, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_month", 1, 1, 1, i); __PYX_ERR(0, 795, __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, 795, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_month", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 795, __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("cytimes.parser.Configs.remove_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 797, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_42remove_month(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_42remove_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_month(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 795, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":822
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_45replace_month(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month *__pyx_optional_args) {

  /* "cytimes/parser.py":824
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `month` mapping `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_mapping = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_v = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_month", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_mapping = __pyx_optional_args->mapping;
    }
  }
  __Pyx_INCREF(__pyx_v_mapping);

  /* "cytimes/parser.py":822
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_45replace_month)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mapping};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 822, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":841
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_MONTH
 * 
*/
  __pyx_t_6 = (__pyx_v_mapping == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":842
 *         # Reset to default
 *         if mapping is None:
 *             mapping = _DEFAULT_MONTH             # <<<<<<<<<<<<<<
 * 
 *         # Cache mappings
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_MONTH);
    __Pyx_DECREF_SET(__pyx_v_mapping, __pyx_v_7cytimes_6parser__DEFAULT_MONTH);

    /* "cytimes/parser.py":841
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_MONTH
 * 
*/
  }

  /* "cytimes/parser.py":845
 * 
 *         # Cache mappings
 *         old: dict = self._month             # <<<<<<<<<<<<<<
 *         old_ext: dict = self._month_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_month;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":846
 *         # Cache mappings
 *         old: dict = self._month
 *         old_ext: dict = self._month_ext             # <<<<<<<<<<<<<<
 * 
 *         # Set tokens & values
*/
  __pyx_t_1 = __pyx_v_self->_month_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":849
 * 
 *         # Set tokens & values
 *         self._month = dict()             # <<<<<<<<<<<<<<
 *         self._month_ext = dict()
 *         try:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 849, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_month);
  __Pyx_DECREF(__pyx_v_self->_month);
  __pyx_v_self->_month = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":850
 *         # Set tokens & values
 *         self._month = dict()
 *         self._month_ext = dict()             # <<<<<<<<<<<<<<
 *         try:
 *             for t, v in mapping.items():
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 850, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_month_ext);
  __Pyx_DECREF(__pyx_v_self->_month_ext);
  __pyx_v_self->_month_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":851
 *         self._month = dict()
 *         self._month_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_month(
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":852
 *         self._month_ext = dict()
 *         try:
 *             for t, v in mapping.items():             # <<<<<<<<<<<<<<
 *                 self.add_month(
 *                     self._ensure_str_token("month", t),
*/
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_mapping == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 852, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_mapping, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 852, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 852, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":854
 *             for t, v in mapping.items():
 *                 self.add_month(
 *                     self._ensure_str_token("month", t),             # <<<<<<<<<<<<<<
 *                     self._ensure_int_value("month", v),
 *                 )
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_month, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 854, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);

        /* "cytimes/parser.py":855
 *                 self.add_month(
 *                     self._ensure_str_token("month", t),
 *                     self._ensure_int_value("month", v),             # <<<<<<<<<<<<<<
 *                 )
 *         except Exception:
*/
        __pyx_t_13 = __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_month, __pyx_v_v); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 855, __pyx_L4_error)

        /* "cytimes/parser.py":853
 *         try:
 *             for t, v in mapping.items():
 *                 self.add_month(             # <<<<<<<<<<<<<<
 *                     self._ensure_str_token("month", t),
 *                     self._ensure_int_value("month", v),
*/
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_month(__pyx_v_self, ((PyObject*)__pyx_t_4), __pyx_t_13, 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 853, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":851
 *         self._month = dict()
 *         self._month_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_month(
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":857
 *                     self._ensure_int_value("month", v),
 *                 )
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._month = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 857, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);

      /* "cytimes/parser.py":859
 *         except Exception:
 *             # Rollback
 *             self._month = old             # <<<<<<<<<<<<<<
 *             self._month_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_month);
      __Pyx_DECREF(__pyx_v_self->_month);
      __pyx_v_self->_month = __pyx_v_old;

      /* "cytimes/parser.py":860
 *             # Rollback
 *             self._month = old
 *             self._month_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_month_ext);
      __Pyx_DECREF(__pyx_v_self->_month_ext);
      __pyx_v_self->_month_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":861
 *             self._month = old
 *             self._month_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_2);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 861, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":851
 *         self._month = dict()
 *         self._month_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_month(
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":862
 *             self._month_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":822
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_mapping);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_45replace_month(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_44replace_month, "Replace the `month` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `month` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `month` tokens\n              and values are month numbers (1=Jan...12=Dec).\n            - If `None`, resets to the default `month` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `month` token conflicts with\n            other namespaces or the month number is invalid.\n\n        ## Example\n        >>> cfg.replace_month({\"jan\": 1, \"feb\": 2, ... })\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_45replace_month = {"replace_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_45replace_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_44replace_month};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_45replace_month(PyObject *__pyx_v_self, 
#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_mapping = 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("replace_month (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_mapping,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, 822, __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, 822, __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, "replace_month", 0) < (0)) __PYX_ERR(0, 822, __pyx_L3_error)

      /* "cytimes/parser.py":824
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `month` mapping `<'bool'>`.
 * 
*/
      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, 822, __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_mapping = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_month", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 822, __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("cytimes.parser.Configs.replace_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mapping), (&PyDict_Type), 1, "mapping", 2))) __PYX_ERR(0, 824, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_44replace_month(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_mapping);

  /* "cytimes/parser.py":822
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_44replace_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.mapping = __pyx_v_mapping;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_month(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 822, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":864
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_month(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_47is_month(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_month", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 864, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_47is_month)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 864, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":873
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._month_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":874
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return dict_contains(self._month_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":873
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._month_ext, token)
*/
  }

  /* "cytimes/parser.py":875
 *         if token is None:
 *             return False
 *         return dict_contains(self._month_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_t_1 = __pyx_v_self->_month_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 875, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "cytimes/parser.py":864
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_month(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_47is_month(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_46is_month, "Check if the `token` can be recognized as `month` `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_47is_month = {"is_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_47is_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_46is_month};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_47is_month(PyObject *__pyx_v_self, 
#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_token = 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_month (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_token,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, 864, __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, 864, __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_month", 0) < (0)) __PYX_ERR(0, 864, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_month", 1, 1, 1, i); __PYX_ERR(0, 864, __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, 864, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_month", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 864, __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("cytimes.parser.Configs.is_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 866, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_46is_month(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_46is_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_month(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 864, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":877
 *         return dict_contains(self._month_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_month(self, token: str) -> cython.int:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_49get_month(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_get_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value;
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_month", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_get_month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 877, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_49get_month)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 877, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":888
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._month_ext, token)
*/
  __pyx_t_7 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "cytimes/parser.py":889
 *         """
 *         if token is None:
 *             return -1             # <<<<<<<<<<<<<<
 *         value = dict_getitem(self._month_ext, token)
 *         if value == cython.NULL:
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":888
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._month_ext, token)
*/
  }

  /* "cytimes/parser.py":890
 *         if token is None:
 *             return -1
 *         value = dict_getitem(self._month_ext, token)             # <<<<<<<<<<<<<<
 *         if value == cython.NULL:
 *             return -1
*/
  __pyx_t_1 = __pyx_v_self->_month_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_value = PyDict_GetItem(__pyx_t_1, __pyx_v_token);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":891
 *             return -1
 *         value = dict_getitem(self._month_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  __pyx_t_7 = (__pyx_v_value == NULL);
  if (__pyx_t_7) {

    /* "cytimes/parser.py":892
 *         value = dict_getitem(self._month_ext, token)
 *         if value == cython.NULL:
 *             return -1             # <<<<<<<<<<<<<<
 *         return cython.cast(object, value)
 * 
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":891
 *             return -1
 *         value = dict_getitem(self._month_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  }

  /* "cytimes/parser.py":893
 *         if value == cython.NULL:
 *             return -1
 *         return cython.cast(object, value)             # <<<<<<<<<<<<<<
 * 
 *     # Weekday ---------------------------------------------------------
*/
  __pyx_t_6 = __Pyx_PyLong_As_int(((PyObject *)__pyx_v_value)); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 893, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":877
 *         return dict_contains(self._month_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_month(self, token: str) -> cython.int:
*/

  /* 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("cytimes.parser.Configs.get_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_49get_month(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_48get_month, "Get the corresponding month number if `token`\n        can be recognized as `month` `<'int'>`\n\n        :param token `<'str'>`: Candidate for `month` token.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'int'>`: Month number (1=Jan...12=Dec), or `-1` if the\n            token is not recognizable (-1 is the sentinel value for None).\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_49get_month = {"get_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_49get_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_48get_month};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_49get_month(PyObject *__pyx_v_self, 
#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_token = 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_month (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_token,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, 877, __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, 877, __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_month", 0) < (0)) __PYX_ERR(0, 877, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_month", 1, 1, 1, i); __PYX_ERR(0, 877, __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, 877, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_month", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 877, __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("cytimes.parser.Configs.get_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 879, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_48get_month(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_48get_month(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_get_month(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 877, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.get_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":896
 * 
 *     # Weekday ---------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def weekday(self) -> dict[str, int]:
 *         """Map of tokens to recognize as `weekday` `<'dict[str, int]'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7weekday_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_7weekday_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_7cytimes_6parser_7Configs_7weekday___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_7weekday___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":902
 *         - Keys are weekday names and values are weekday numbers: 0=Mon...6=Sun.
 *         """
 *         return dict(self._weekday)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_weekday == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 902, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":896
 * 
 *     # Weekday ---------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def weekday(self) -> dict[str, int]:
 *         """Map of tokens to recognize as `weekday` `<'dict[str, int]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.weekday.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":904
 *         return dict(self._weekday)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_weekday(self, token: str, weekday: cython.int) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_51add_weekday(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_weekday, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  int __pyx_t_7;
  int __pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_weekday", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 904, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_51add_weekday)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_weekday); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __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[3] = {__pyx_t_3, __pyx_v_token, __pyx_t_5};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__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(0, 904, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 904, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":923
 *         """
 *         # Validate token
 *         token = self._validate_token("weekday", token)             # <<<<<<<<<<<<<<
 *         # Validate value
 *         value: object = self._validate_value("weekday", weekday, 0, 6)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 923, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":925
 *         token = self._validate_token("weekday", token)
 *         # Validate value
 *         value: object = self._validate_value("weekday", weekday, 0, 6)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         dict_setitem(self._weekday, token, value)
*/
  __pyx_t_8 = __pyx_f_7cytimes_6parser_7Configs__validate_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_v_weekday, 0, 6); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 925, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 925, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":927
 *         value: object = self._validate_value("weekday", weekday, 0, 6)
 *         # Add to base namespace
 *         dict_setitem(self._weekday, token, value)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_weekday;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_token, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":929
 *         dict_setitem(self._weekday, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._weekday_ext, tok, value)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 929, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 929, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 929, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_9);
    #endif
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":930
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._weekday_ext, tok, value)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_weekday_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_tok, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 930, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":929
 *         dict_setitem(self._weekday, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._weekday_ext, tok, value)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":931
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._weekday_ext, tok, value)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":904
 *         return dict(self._weekday)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_weekday(self, token: str, weekday: cython.int) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_51add_weekday(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_50add_weekday, "Add token that should be recognized as `weekday`\n        with the corresponding weekday number.\n\n        :param token `<'str'>`: The `weekday` token to add (case-insensitive).\n        :param weekday `<'int'>`: The weekday number (0=Mon...6=Sun).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the weekday number is invalid.\n\n        ## Weekday Number\n        - weekday: 0=Mon...6=Sun\n\n        ## Example\n        >>> cfg.add_weekday(\"mon\", 0)\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_51add_weekday = {"add_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_51add_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_50add_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_51add_weekday(PyObject *__pyx_v_self, 
#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_token = 0;
  int __pyx_v_weekday;
  #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_weekday (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_token,&__pyx_mstate_global->__pyx_n_u_weekday,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, 904, __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, 904, __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, 904, __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_weekday", 0) < (0)) __PYX_ERR(0, 904, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_weekday", 1, 2, 2, i); __PYX_ERR(0, 904, __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, 904, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 904, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
    __pyx_v_weekday = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_weekday == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 906, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_weekday", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 904, __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("cytimes.parser.Configs.add_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 906, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_50add_weekday(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token, __pyx_v_weekday);

  /* 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_7cytimes_6parser_7Configs_50add_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_weekday) {
  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("add_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_weekday(__pyx_v_self, __pyx_v_token, __pyx_v_weekday, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 904, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":933
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_weekday(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_53remove_weekday(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_weekday", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 933, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_53remove_weekday)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 933, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":946
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("weekday", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         try:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 946, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":948
 *         token = self._lowercase_token("weekday", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._weekday, token)
 *         except KeyError:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":949
 *         # Remove from base namespace
 *         try:
 *             dict_delitem(self._weekday, token)             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             return False
*/
      __pyx_t_1 = __pyx_v_self->_weekday;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 949, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":948
 *         token = self._lowercase_token("weekday", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._weekday, token)
 *         except KeyError:
*/
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":950
 *         try:
 *             dict_delitem(self._weekday, token)
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             return False
 *         # Remove from extend namespace
*/
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);

      /* "cytimes/parser.py":951
 *             dict_delitem(self._weekday, token)
 *         except KeyError:
 *             return False             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
      __pyx_r = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":948
 *         token = self._lowercase_token("weekday", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._weekday, token)
 *         except KeyError:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":953
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._weekday_ext, tok)
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 953, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 953, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 953, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 953, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":954
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._weekday_ext, tok)
 *             except KeyError:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "cytimes/parser.py":955
 *         for tok in self._gen_token_case_variants(token):
 *             try:
 *                 dict_delitem(self._weekday_ext, tok)             # <<<<<<<<<<<<<<
 *             except KeyError:
 *                 pass
*/
        __pyx_t_1 = __pyx_v_self->_weekday_ext;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 955, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "cytimes/parser.py":954
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._weekday_ext, tok)
 *             except KeyError:
*/
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "cytimes/parser.py":956
 *             try:
 *                 dict_delitem(self._weekday_ext, tok)
 *             except KeyError:             # <<<<<<<<<<<<<<
 *                 pass
 *         return True
*/
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;

      /* "cytimes/parser.py":954
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._weekday_ext, tok)
 *             except KeyError:
*/
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L14_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      __pyx_L20_try_end:;
    }

    /* "cytimes/parser.py":953
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._weekday_ext, tok)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":958
 *             except KeyError:
 *                 pass
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":933
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_weekday(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_53remove_weekday(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_52remove_weekday, "Remove `weekday` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `weekday` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_weekday(\"mon\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_53remove_weekday = {"remove_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_53remove_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_52remove_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_53remove_weekday(PyObject *__pyx_v_self, 
#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_token = 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_weekday (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_token,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, 933, __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, 933, __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_weekday", 0) < (0)) __PYX_ERR(0, 933, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_weekday", 1, 1, 1, i); __PYX_ERR(0, 933, __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, 933, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_weekday", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 933, __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("cytimes.parser.Configs.remove_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 935, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_52remove_weekday(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_52remove_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_weekday(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 933, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":960
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_55replace_weekday(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday *__pyx_optional_args) {

  /* "cytimes/parser.py":962
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `weekday` mapping `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_mapping = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_v = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_weekday", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_mapping = __pyx_optional_args->mapping;
    }
  }
  __Pyx_INCREF(__pyx_v_mapping);

  /* "cytimes/parser.py":960
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 960, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_55replace_weekday)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mapping};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 960, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 960, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":979
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_WEEKDAY
 * 
*/
  __pyx_t_6 = (__pyx_v_mapping == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":980
 *         # Reset to default
 *         if mapping is None:
 *             mapping = _DEFAULT_WEEKDAY             # <<<<<<<<<<<<<<
 * 
 *         # Cache mappings
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY);
    __Pyx_DECREF_SET(__pyx_v_mapping, __pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY);

    /* "cytimes/parser.py":979
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_WEEKDAY
 * 
*/
  }

  /* "cytimes/parser.py":983
 * 
 *         # Cache mappings
 *         old: dict = self._weekday             # <<<<<<<<<<<<<<
 *         old_ext: dict = self._weekday_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_weekday;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":984
 *         # Cache mappings
 *         old: dict = self._weekday
 *         old_ext: dict = self._weekday_ext             # <<<<<<<<<<<<<<
 * 
 *         # Set tokens & values
*/
  __pyx_t_1 = __pyx_v_self->_weekday_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":987
 * 
 *         # Set tokens & values
 *         self._weekday = dict()             # <<<<<<<<<<<<<<
 *         self._weekday_ext = dict()
 *         try:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 987, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_weekday);
  __Pyx_DECREF(__pyx_v_self->_weekday);
  __pyx_v_self->_weekday = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":988
 *         # Set tokens & values
 *         self._weekday = dict()
 *         self._weekday_ext = dict()             # <<<<<<<<<<<<<<
 *         try:
 *             for t, v in mapping.items():
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_weekday_ext);
  __Pyx_DECREF(__pyx_v_self->_weekday_ext);
  __pyx_v_self->_weekday_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":989
 *         self._weekday = dict()
 *         self._weekday_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_weekday(
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":990
 *         self._weekday_ext = dict()
 *         try:
 *             for t, v in mapping.items():             # <<<<<<<<<<<<<<
 *                 self.add_weekday(
 *                     self._ensure_str_token("weekday", t),
*/
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_mapping == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 990, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_mapping, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 990, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 990, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":992
 *             for t, v in mapping.items():
 *                 self.add_weekday(
 *                     self._ensure_str_token("weekday", t),             # <<<<<<<<<<<<<<
 *                     self._ensure_int_value("weekday", v),
 *                 )
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 992, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);

        /* "cytimes/parser.py":993
 *                 self.add_weekday(
 *                     self._ensure_str_token("weekday", t),
 *                     self._ensure_int_value("weekday", v),             # <<<<<<<<<<<<<<
 *                 )
 *         except Exception:
*/
        __pyx_t_13 = __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_v_v); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 993, __pyx_L4_error)

        /* "cytimes/parser.py":991
 *         try:
 *             for t, v in mapping.items():
 *                 self.add_weekday(             # <<<<<<<<<<<<<<
 *                     self._ensure_str_token("weekday", t),
 *                     self._ensure_int_value("weekday", v),
*/
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_weekday(__pyx_v_self, ((PyObject*)__pyx_t_4), __pyx_t_13, 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 991, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":989
 *         self._weekday = dict()
 *         self._weekday_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_weekday(
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":995
 *                     self._ensure_int_value("weekday", v),
 *                 )
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._weekday = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 995, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);

      /* "cytimes/parser.py":997
 *         except Exception:
 *             # Rollback
 *             self._weekday = old             # <<<<<<<<<<<<<<
 *             self._weekday_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_weekday);
      __Pyx_DECREF(__pyx_v_self->_weekday);
      __pyx_v_self->_weekday = __pyx_v_old;

      /* "cytimes/parser.py":998
 *             # Rollback
 *             self._weekday = old
 *             self._weekday_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_weekday_ext);
      __Pyx_DECREF(__pyx_v_self->_weekday_ext);
      __pyx_v_self->_weekday_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":999
 *             self._weekday = old
 *             self._weekday_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_2);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 999, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":989
 *         self._weekday = dict()
 *         self._weekday_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_weekday(
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":1000
 *             self._weekday_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":960
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_mapping);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_55replace_weekday(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_54replace_weekday, "Replace the `weekday` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `weekday` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `weekday` tokens\n              and values are weekday numbers (0=Mon...6=Sun).\n            - If `None`, resets to the default `weekday` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `weekday` token conflicts with\n            other namespaces or the weekday number is invalid.\n\n        ## Example\n        >>> cfg.replace_weekday({\"mon\": 0, \"tue\": 1, ... })\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_55replace_weekday = {"replace_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_55replace_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_54replace_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_55replace_weekday(PyObject *__pyx_v_self, 
#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_mapping = 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("replace_weekday (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_mapping,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, 960, __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, 960, __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, "replace_weekday", 0) < (0)) __PYX_ERR(0, 960, __pyx_L3_error)

      /* "cytimes/parser.py":962
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `weekday` mapping `<'bool'>`.
 * 
*/
      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, 960, __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_mapping = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_weekday", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 960, __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("cytimes.parser.Configs.replace_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mapping), (&PyDict_Type), 1, "mapping", 2))) __PYX_ERR(0, 962, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_54replace_weekday(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_mapping);

  /* "cytimes/parser.py":960
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_54replace_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.mapping = __pyx_v_mapping;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_weekday(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 960, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1002
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_weekday(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_57is_weekday(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_weekday", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_57is_weekday)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1002, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1011
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._weekday_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":1012
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return dict_contains(self._weekday_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1011
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._weekday_ext, token)
*/
  }

  /* "cytimes/parser.py":1013
 *         if token is None:
 *             return False
 *         return dict_contains(self._weekday_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_t_1 = __pyx_v_self->_weekday_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1013, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "cytimes/parser.py":1002
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_weekday(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_57is_weekday(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_56is_weekday, "Check if the `token` can be recognized as `weekday` `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_57is_weekday = {"is_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_57is_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_56is_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_57is_weekday(PyObject *__pyx_v_self, 
#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_token = 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_weekday (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_token,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, 1002, __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, 1002, __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_weekday", 0) < (0)) __PYX_ERR(0, 1002, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_weekday", 1, 1, 1, i); __PYX_ERR(0, 1002, __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, 1002, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_weekday", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1002, __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("cytimes.parser.Configs.is_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1004, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_56is_weekday(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_56is_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_weekday(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1002, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1015
 *         return dict_contains(self._weekday_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_weekday(self, token: str) -> cython.int:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_59get_weekday(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_get_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value;
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_weekday", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_get_weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1015, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_59get_weekday)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1015, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1026
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._weekday_ext, token)
*/
  __pyx_t_7 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1027
 *         """
 *         if token is None:
 *             return -1             # <<<<<<<<<<<<<<
 *         value = dict_getitem(self._weekday_ext, token)
 *         if value == cython.NULL:
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1026
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._weekday_ext, token)
*/
  }

  /* "cytimes/parser.py":1028
 *         if token is None:
 *             return -1
 *         value = dict_getitem(self._weekday_ext, token)             # <<<<<<<<<<<<<<
 *         if value == cython.NULL:
 *             return -1
*/
  __pyx_t_1 = __pyx_v_self->_weekday_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_value = PyDict_GetItem(__pyx_t_1, __pyx_v_token);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":1029
 *             return -1
 *         value = dict_getitem(self._weekday_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  __pyx_t_7 = (__pyx_v_value == NULL);
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1030
 *         value = dict_getitem(self._weekday_ext, token)
 *         if value == cython.NULL:
 *             return -1             # <<<<<<<<<<<<<<
 *         return cython.cast(object, value)
 * 
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1029
 *             return -1
 *         value = dict_getitem(self._weekday_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  }

  /* "cytimes/parser.py":1031
 *         if value == cython.NULL:
 *             return -1
 *         return cython.cast(object, value)             # <<<<<<<<<<<<<<
 * 
 *     # HMS ------------------------------------------------------------
*/
  __pyx_t_6 = __Pyx_PyLong_As_int(((PyObject *)__pyx_v_value)); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1031, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":1015
 *         return dict_contains(self._weekday_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_weekday(self, token: str) -> cython.int:
*/

  /* 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("cytimes.parser.Configs.get_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_59get_weekday(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_58get_weekday, "Get the corresponding weekday number if `token`\n        can be recognized as `weekday` `<'int'>`\n\n        :param token `<'str'>`: Candidate for `weekday` token.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'int'>`: Weekday number (0=Mon...6=Sun), or `-1` if the\n            token is not recognizable (-1 is the sentinel value for None).\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_59get_weekday = {"get_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_59get_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_58get_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_59get_weekday(PyObject *__pyx_v_self, 
#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_token = 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_weekday (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_token,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, 1015, __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, 1015, __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_weekday", 0) < (0)) __PYX_ERR(0, 1015, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_weekday", 1, 1, 1, i); __PYX_ERR(0, 1015, __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, 1015, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_weekday", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1015, __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("cytimes.parser.Configs.get_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1017, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_58get_weekday(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_58get_weekday(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_get_weekday(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 1015, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.get_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1034
 * 
 *     # HMS ------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def hms(self) -> dict[str, int]:
 *         """Map of tokens to recognize as H/M/S flag `<'dict[str, int]'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_3hms_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_3hms_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_7cytimes_6parser_7Configs_3hms___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_3hms___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":1041
 *         flag numbers: 0=hour; 1=minute; 2=second.
 *         """
 *         return dict(self._hms)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_hms == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 1041, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1041, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1034
 * 
 *     # HMS ------------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def hms(self) -> dict[str, int]:
 *         """Map of tokens to recognize as H/M/S flag `<'dict[str, int]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.hms.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1043
 *         return dict(self._hms)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_hms(self, token: str, flag: cython.int) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_61add_hms(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  int __pyx_t_7;
  int __pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_hms", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1043, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_61add_hms)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1043, __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[3] = {__pyx_t_3, __pyx_v_token, __pyx_t_5};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__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(0, 1043, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1043, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1062
 *         """
 *         # Validate token
 *         token = self._validate_token("hms", token)             # <<<<<<<<<<<<<<
 *         # Validate value
 *         value: object = self._validate_value("hms", flag, 0, 2)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_hms, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1064
 *         token = self._validate_token("hms", token)
 *         # Validate value
 *         value: object = self._validate_value("hms", flag, 0, 2)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         dict_setitem(self._hms, token, value)
*/
  __pyx_t_8 = __pyx_f_7cytimes_6parser_7Configs__validate_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_hms, __pyx_v_flag, 0, 2); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1064, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1064, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1066
 *         value: object = self._validate_value("hms", flag, 0, 2)
 *         # Add to base namespace
 *         dict_setitem(self._hms, token, value)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_hms;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_token, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1066, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":1068
 *         dict_setitem(self._hms, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._hms_ext, tok, value)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 1068, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1068, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1068, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1068, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_9);
    #endif
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1068, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":1069
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._hms_ext, tok, value)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_hms_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_tok, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1069, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":1068
 *         dict_setitem(self._hms, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._hms_ext, tok, value)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1070
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._hms_ext, tok, value)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1043
 *         return dict(self._hms)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_hms(self, token: str, flag: cython.int) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_61add_hms(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_60add_hms, "Add token that should be recognized as `H/M/S` flag\n        with the corresponding flag number.\n\n        :param token `<'str'>`: The `H/M/S` token to add (case-insensitive).\n        :param month `<'int'>`: The H/M/S flag number (0=hour; 1=minute; 2=second).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the H/M/S flag number is invalid.\n\n        ## H/M/S Flag Number\n        - flag: 0=hour; 1=minute; 2=second\n\n        ## Example\n        >>> cfg.add_hms(\"hour\", 0)\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_61add_hms = {"add_hms", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_61add_hms, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_60add_hms};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_61add_hms(PyObject *__pyx_v_self, 
#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_token = 0;
  int __pyx_v_flag;
  #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_hms (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_token,&__pyx_mstate_global->__pyx_n_u_flag,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, 1043, __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, 1043, __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, 1043, __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_hms", 0) < (0)) __PYX_ERR(0, 1043, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_hms", 1, 2, 2, i); __PYX_ERR(0, 1043, __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, 1043, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1043, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
    __pyx_v_flag = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1045, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_hms", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1043, __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("cytimes.parser.Configs.add_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1045, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_60add_hms(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token, __pyx_v_flag);

  /* 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_7cytimes_6parser_7Configs_60add_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag) {
  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("add_hms", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_hms(__pyx_v_self, __pyx_v_token, __pyx_v_flag, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1043, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1072
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_hms(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_63remove_hms(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_hms", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_63remove_hms)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1072, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1085
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("hms", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         try:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_hms, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1087
 *         token = self._lowercase_token("hms", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._hms, token)
 *         except KeyError:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":1088
 *         # Remove from base namespace
 *         try:
 *             dict_delitem(self._hms, token)             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             return False
*/
      __pyx_t_1 = __pyx_v_self->_hms;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1088, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":1087
 *         token = self._lowercase_token("hms", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._hms, token)
 *         except KeyError:
*/
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1089
 *         try:
 *             dict_delitem(self._hms, token)
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             return False
 *         # Remove from extend namespace
*/
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);

      /* "cytimes/parser.py":1090
 *             dict_delitem(self._hms, token)
 *         except KeyError:
 *             return False             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
      __pyx_r = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":1087
 *         token = self._lowercase_token("hms", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._hms, token)
 *         except KeyError:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":1092
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._hms_ext, tok)
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 1092, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1092, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1092, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1092, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":1093
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._hms_ext, tok)
 *             except KeyError:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "cytimes/parser.py":1094
 *         for tok in self._gen_token_case_variants(token):
 *             try:
 *                 dict_delitem(self._hms_ext, tok)             # <<<<<<<<<<<<<<
 *             except KeyError:
 *                 pass
*/
        __pyx_t_1 = __pyx_v_self->_hms_ext;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1094, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "cytimes/parser.py":1093
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._hms_ext, tok)
 *             except KeyError:
*/
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "cytimes/parser.py":1095
 *             try:
 *                 dict_delitem(self._hms_ext, tok)
 *             except KeyError:             # <<<<<<<<<<<<<<
 *                 pass
 *         return True
*/
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;

      /* "cytimes/parser.py":1093
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._hms_ext, tok)
 *             except KeyError:
*/
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L14_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      __pyx_L20_try_end:;
    }

    /* "cytimes/parser.py":1092
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._hms_ext, tok)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1097
 *             except KeyError:
 *                 pass
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1072
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_hms(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_63remove_hms(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_62remove_hms, "Remove `H/M/S` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `H/M/S` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_hms(\"hour\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_63remove_hms = {"remove_hms", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_63remove_hms, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_62remove_hms};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_63remove_hms(PyObject *__pyx_v_self, 
#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_token = 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_hms (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_token,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, 1072, __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, 1072, __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_hms", 0) < (0)) __PYX_ERR(0, 1072, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_hms", 1, 1, 1, i); __PYX_ERR(0, 1072, __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, 1072, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_hms", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1072, __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("cytimes.parser.Configs.remove_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1074, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_62remove_hms(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_62remove_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_hms", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_hms(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1072, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1099
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_65replace_hms(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms *__pyx_optional_args) {

  /* "cytimes/parser.py":1101
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `H/M/S` mapping `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_mapping = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_v = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_hms", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_mapping = __pyx_optional_args->mapping;
    }
  }
  __Pyx_INCREF(__pyx_v_mapping);

  /* "cytimes/parser.py":1099
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_65replace_hms)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mapping};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1099, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1099, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1118
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_HMS
 * 
*/
  __pyx_t_6 = (__pyx_v_mapping == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":1119
 *         # Reset to default
 *         if mapping is None:
 *             mapping = _DEFAULT_HMS             # <<<<<<<<<<<<<<
 * 
 *         # Cache mappings
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_HMS);
    __Pyx_DECREF_SET(__pyx_v_mapping, __pyx_v_7cytimes_6parser__DEFAULT_HMS);

    /* "cytimes/parser.py":1118
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_HMS
 * 
*/
  }

  /* "cytimes/parser.py":1122
 * 
 *         # Cache mappings
 *         old: dict = self._hms             # <<<<<<<<<<<<<<
 *         old_ext: dict = self._hms_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_hms;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1123
 *         # Cache mappings
 *         old: dict = self._hms
 *         old_ext: dict = self._hms_ext             # <<<<<<<<<<<<<<
 * 
 *         # Set tokens & values
*/
  __pyx_t_1 = __pyx_v_self->_hms_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1126
 * 
 *         # Set tokens & values
 *         self._hms = dict()             # <<<<<<<<<<<<<<
 *         self._hms_ext = dict()
 *         try:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1126, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_hms);
  __Pyx_DECREF(__pyx_v_self->_hms);
  __pyx_v_self->_hms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1127
 *         # Set tokens & values
 *         self._hms = dict()
 *         self._hms_ext = dict()             # <<<<<<<<<<<<<<
 *         try:
 *             for t, v in mapping.items():
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1127, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_hms_ext);
  __Pyx_DECREF(__pyx_v_self->_hms_ext);
  __pyx_v_self->_hms_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1128
 *         self._hms = dict()
 *         self._hms_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_hms(
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":1129
 *         self._hms_ext = dict()
 *         try:
 *             for t, v in mapping.items():             # <<<<<<<<<<<<<<
 *                 self.add_hms(
 *                     self._ensure_str_token("hms", t),
*/
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_mapping == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 1129, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_mapping, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1129, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1129, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":1131
 *             for t, v in mapping.items():
 *                 self.add_hms(
 *                     self._ensure_str_token("hms", t),             # <<<<<<<<<<<<<<
 *                     self._ensure_int_value("hms", v),
 *                 )
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_hms, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1131, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);

        /* "cytimes/parser.py":1132
 *                 self.add_hms(
 *                     self._ensure_str_token("hms", t),
 *                     self._ensure_int_value("hms", v),             # <<<<<<<<<<<<<<
 *                 )
 *         except Exception:
*/
        __pyx_t_13 = __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_hms, __pyx_v_v); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1132, __pyx_L4_error)

        /* "cytimes/parser.py":1130
 *         try:
 *             for t, v in mapping.items():
 *                 self.add_hms(             # <<<<<<<<<<<<<<
 *                     self._ensure_str_token("hms", t),
 *                     self._ensure_int_value("hms", v),
*/
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_hms(__pyx_v_self, ((PyObject*)__pyx_t_4), __pyx_t_13, 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1130, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":1128
 *         self._hms = dict()
 *         self._hms_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_hms(
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1134
 *                     self._ensure_int_value("hms", v),
 *                 )
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._hms = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 1134, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);

      /* "cytimes/parser.py":1136
 *         except Exception:
 *             # Rollback
 *             self._hms = old             # <<<<<<<<<<<<<<
 *             self._hms_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_hms);
      __Pyx_DECREF(__pyx_v_self->_hms);
      __pyx_v_self->_hms = __pyx_v_old;

      /* "cytimes/parser.py":1137
 *             # Rollback
 *             self._hms = old
 *             self._hms_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_hms_ext);
      __Pyx_DECREF(__pyx_v_self->_hms_ext);
      __pyx_v_self->_hms_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":1138
 *             self._hms = old
 *             self._hms_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_2);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 1138, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":1128
 *         self._hms = dict()
 *         self._hms_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_hms(
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":1139
 *             self._hms_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1099
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_mapping);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_65replace_hms(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_64replace_hms, "Replace the `H/M/S` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `H/M/S` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `H/M/S` tokens\n              and values are H/M/S flag numbers (0=hour; 1=minute; 2=second).\n            - If `None`, resets to the default `H/M/S` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `H/M/S` token conflicts with\n            other namespaces or the H/M/S flag number is invalid.\n\n        ## Example\n        >>> cfg.replace_hms({\"hour\": 0, \"minute\": 1, \"second\": 2, ...})\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_65replace_hms = {"replace_hms", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_65replace_hms, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_64replace_hms};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_65replace_hms(PyObject *__pyx_v_self, 
#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_mapping = 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("replace_hms (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_mapping,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, 1099, __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, 1099, __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, "replace_hms", 0) < (0)) __PYX_ERR(0, 1099, __pyx_L3_error)

      /* "cytimes/parser.py":1101
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `H/M/S` mapping `<'bool'>`.
 * 
*/
      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, 1099, __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_mapping = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_hms", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1099, __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("cytimes.parser.Configs.replace_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mapping), (&PyDict_Type), 1, "mapping", 2))) __PYX_ERR(0, 1101, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_64replace_hms(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_mapping);

  /* "cytimes/parser.py":1099
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_64replace_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_hms", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.mapping = __pyx_v_mapping;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_hms(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1099, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1099, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1141
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_hms(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_67is_hms(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_hms", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1141, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_67is_hms)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1141, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1141, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1150
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._hms_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":1151
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return dict_contains(self._hms_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1150
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._hms_ext, token)
*/
  }

  /* "cytimes/parser.py":1152
 *         if token is None:
 *             return False
 *         return dict_contains(self._hms_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_t_1 = __pyx_v_self->_hms_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "cytimes/parser.py":1141
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_hms(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_67is_hms(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_66is_hms, "Check if the `token` can be recognized as `H/M/S` flag `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_67is_hms = {"is_hms", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_67is_hms, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_66is_hms};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_67is_hms(PyObject *__pyx_v_self, 
#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_token = 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_hms (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_token,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, 1141, __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, 1141, __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_hms", 0) < (0)) __PYX_ERR(0, 1141, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_hms", 1, 1, 1, i); __PYX_ERR(0, 1141, __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, 1141, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_hms", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1141, __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("cytimes.parser.Configs.is_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1143, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_66is_hms(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_66is_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_hms", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_hms(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1141, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1154
 *         return dict_contains(self._hms_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_hms(self, token: str) -> cython.int:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_69get_hms(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_get_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value;
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_hms", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_get_hms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1154, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_69get_hms)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1154, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1165
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._hms_ext, token)
*/
  __pyx_t_7 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1166
 *         """
 *         if token is None:
 *             return -1             # <<<<<<<<<<<<<<
 *         value = dict_getitem(self._hms_ext, token)
 *         if value == cython.NULL:
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1165
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._hms_ext, token)
*/
  }

  /* "cytimes/parser.py":1167
 *         if token is None:
 *             return -1
 *         value = dict_getitem(self._hms_ext, token)             # <<<<<<<<<<<<<<
 *         if value == cython.NULL:
 *             return -1
*/
  __pyx_t_1 = __pyx_v_self->_hms_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_value = PyDict_GetItem(__pyx_t_1, __pyx_v_token);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":1168
 *             return -1
 *         value = dict_getitem(self._hms_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  __pyx_t_7 = (__pyx_v_value == NULL);
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1169
 *         value = dict_getitem(self._hms_ext, token)
 *         if value == cython.NULL:
 *             return -1             # <<<<<<<<<<<<<<
 *         return cython.cast(object, value)
 * 
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1168
 *             return -1
 *         value = dict_getitem(self._hms_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  }

  /* "cytimes/parser.py":1170
 *         if value == cython.NULL:
 *             return -1
 *         return cython.cast(object, value)             # <<<<<<<<<<<<<<
 * 
 *     # AM/PM ----------------------------------------------------------
*/
  __pyx_t_6 = __Pyx_PyLong_As_int(((PyObject *)__pyx_v_value)); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1170, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":1154
 *         return dict_contains(self._hms_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_hms(self, token: str) -> cython.int:
*/

  /* 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("cytimes.parser.Configs.get_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_69get_hms(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_68get_hms, "Get the corresponding H/M/S flag number if `token`\n        can be recognized as `H/M/S` `<'int'>`\n\n        :param token `<'str'>`: Candidate for `H/M/S` token.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'int'>`: H/M/S flag number (0=hour; 1=minute; 2=second), or `-1` if the\n            token is not recognizable (-1 is the sentinel value for None).\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_69get_hms = {"get_hms", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_69get_hms, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_68get_hms};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_69get_hms(PyObject *__pyx_v_self, 
#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_token = 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_hms (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_token,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, 1154, __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, 1154, __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_hms", 0) < (0)) __PYX_ERR(0, 1154, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_hms", 1, 1, 1, i); __PYX_ERR(0, 1154, __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, 1154, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_hms", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1154, __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("cytimes.parser.Configs.get_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1156, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_68get_hms(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_68get_hms(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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_hms", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_get_hms(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 1154, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.get_hms", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1173
 * 
 *     # AM/PM ----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def ampm(self) -> dict[str, int]:
 *         """Map of tokens to recognize as AM/PM flag `<'dict[str, int]'>`.
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_4ampm_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_4ampm_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_7cytimes_6parser_7Configs_4ampm___get__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_4ampm___get__(struct __pyx_obj_7cytimes_6parser_Configs *__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);

  /* "cytimes/parser.py":1180
 *           flag numbers: 0=AM; 1=PM.
 *         """
 *         return dict(self._ampm)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __Pyx_XDECREF(__pyx_r);
  if (unlikely(__pyx_v_self->_ampm == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 1180, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_self->_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1180, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1173
 * 
 *     # AM/PM ----------------------------------------------------------
 *     @property             # <<<<<<<<<<<<<<
 *     def ampm(self) -> dict[str, int]:
 *         """Map of tokens to recognize as AM/PM flag `<'dict[str, int]'>`.
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Configs.ampm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1182
 *         return dict(self._ampm)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_ampm(self, token: str, flag: cython.int) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_71add_ampm(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_add_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value = 0;
  PyObject *__pyx_v_tok = NULL;
  int __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;
  int __pyx_t_7;
  int __pyx_t_8;
  Py_ssize_t __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("add_ampm", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_add_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1182, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_71add_ampm)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1182, __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[3] = {__pyx_t_3, __pyx_v_token, __pyx_t_5};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_6, (3-__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(0, 1182, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1182, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_7;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1201
 *         """
 *         # Validate token
 *         token = self._validate_token("ampm", token)             # <<<<<<<<<<<<<<
 *         # Validate value
 *         value: object = self._validate_value("ampm", flag, 0, 1)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__validate_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_ampm, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1203
 *         token = self._validate_token("ampm", token)
 *         # Validate value
 *         value: object = self._validate_value("ampm", flag, 0, 1)             # <<<<<<<<<<<<<<
 *         # Add to base namespace
 *         dict_setitem(self._ampm, token, value)
*/
  __pyx_t_8 = __pyx_f_7cytimes_6parser_7Configs__validate_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_ampm, __pyx_v_flag, 0, 1); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1203, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1203, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_value = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1205
 *         value: object = self._validate_value("ampm", flag, 0, 1)
 *         # Add to base namespace
 *         dict_setitem(self._ampm, token, value)             # <<<<<<<<<<<<<<
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
  __pyx_t_1 = __pyx_v_self->_ampm;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_token, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":1207
 *         dict_setitem(self._ampm, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._ampm_ext, tok, value)
 *         return True
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 1207, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1207, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1207, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1207, __pyx_L1_error)
      #endif
      if (__pyx_t_9 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_9));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_9);
    #endif
    ++__pyx_t_9;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1207, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":1208
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._ampm_ext, tok, value)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
    __pyx_t_1 = __pyx_v_self->_ampm_ext;
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = PyDict_SetItem(__pyx_t_1, __pyx_v_tok, __pyx_v_value); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1208, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":1207
 *         dict_setitem(self._ampm, token, value)
 *         # Add to extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             dict_setitem(self._ampm_ext, tok, value)
 *         return True
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1209
 *         for tok in self._gen_token_case_variants(token):
 *             dict_setitem(self._ampm_ext, tok, value)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1182
 *         return dict(self._ampm)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_ampm(self, token: str, flag: cython.int) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.add_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_value);
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_71add_ampm(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_70add_ampm, "Add token that should be recognized as `AM/PM` flag\n        with the corresponding flag number.\n\n        :param token `<'str'>`: The `AM/PM` token to add (case-insensitive).\n        :param month `<'int'>`: The AM/PM flag number (0=AM; 1=PM).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the AM/PM flag number is invalid.\n\n        ## AM/PM Flag Number\n        - flag: 0=AM; 1=PM\n\n        ## Example\n        >>> cfg.add_ampm(\"am\", 0)\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_71add_ampm = {"add_ampm", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_71add_ampm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_70add_ampm};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_71add_ampm(PyObject *__pyx_v_self, 
#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_token = 0;
  int __pyx_v_flag;
  #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_ampm (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_token,&__pyx_mstate_global->__pyx_n_u_flag,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, 1182, __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, 1182, __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, 1182, __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_ampm", 0) < (0)) __PYX_ERR(0, 1182, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 2; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("add_ampm", 1, 2, 2, i); __PYX_ERR(0, 1182, __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, 1182, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(0, 1182, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
    __pyx_v_flag = __Pyx_PyLong_As_int(values[1]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1184, __pyx_L3_error)
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("add_ampm", 1, 2, 2, __pyx_nargs); __PYX_ERR(0, 1182, __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("cytimes.parser.Configs.add_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1184, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_70add_ampm(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token, __pyx_v_flag);

  /* 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_7cytimes_6parser_7Configs_70add_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_v_flag) {
  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("add_ampm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_add_ampm(__pyx_v_self, __pyx_v_token, __pyx_v_flag, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1182, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.add_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1211
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_ampm(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_73remove_ampm(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_remove_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_tok = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("remove_ampm", 0);
  __Pyx_INCREF(__pyx_v_token);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_remove_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1211, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_73remove_ampm)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1211, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1211, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1224
 *         """
 *         # Lowercase token
 *         token = self._lowercase_token("ampm", token)             # <<<<<<<<<<<<<<
 *         # Remove from base namespace
 *         try:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_ampm, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1224, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1226
 *         token = self._lowercase_token("ampm", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._ampm, token)
 *         except KeyError:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":1227
 *         # Remove from base namespace
 *         try:
 *             dict_delitem(self._ampm, token)             # <<<<<<<<<<<<<<
 *         except KeyError:
 *             return False
*/
      __pyx_t_1 = __pyx_v_self->_ampm;
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1227, __pyx_L3_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":1226
 *         token = self._lowercase_token("ampm", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._ampm, token)
 *         except KeyError:
*/
    }
    __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;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1228
 *         try:
 *             dict_delitem(self._ampm, token)
 *         except KeyError:             # <<<<<<<<<<<<<<
 *             return False
 *         # Remove from extend namespace
*/
    __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
    if (__pyx_t_10) {
      __Pyx_ErrRestore(0,0,0);

      /* "cytimes/parser.py":1229
 *             dict_delitem(self._ampm, token)
 *         except KeyError:
 *             return False             # <<<<<<<<<<<<<<
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
*/
      __pyx_r = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":1226
 *         token = self._lowercase_token("ampm", token)
 *         # Remove from base namespace
 *         try:             # <<<<<<<<<<<<<<
 *             dict_delitem(self._ampm, token)
 *         except KeyError:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L0;
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":1231
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._ampm_ext, tok)
*/
  if (unlikely(__pyx_v_token == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(0, 1231, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(__pyx_v_self, __pyx_v_token); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1231, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2);
  __pyx_t_11 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    {
      Py_ssize_t __pyx_temp = __Pyx_PyTuple_GET_SIZE(__pyx_t_2);
      #if !CYTHON_ASSUME_SAFE_SIZE
      if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 1231, __pyx_L1_error)
      #endif
      if (__pyx_t_11 >= __pyx_temp) break;
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = __Pyx_NewRef(PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_11));
    #else
    __pyx_t_1 = __Pyx_PySequence_ITEM(__pyx_t_2, __pyx_t_11);
    #endif
    ++__pyx_t_11;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1231, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_tok, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":1232
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._ampm_ext, tok)
 *             except KeyError:
*/
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      /*try:*/ {

        /* "cytimes/parser.py":1233
 *         for tok in self._gen_token_case_variants(token):
 *             try:
 *                 dict_delitem(self._ampm_ext, tok)             # <<<<<<<<<<<<<<
 *             except KeyError:
 *                 pass
*/
        __pyx_t_1 = __pyx_v_self->_ampm_ext;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_10 = PyDict_DelItem(__pyx_t_1, __pyx_v_tok); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(0, 1233, __pyx_L13_error)
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "cytimes/parser.py":1232
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._ampm_ext, tok)
 *             except KeyError:
*/
      }
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L20_try_end;
      __pyx_L13_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

      /* "cytimes/parser.py":1234
 *             try:
 *                 dict_delitem(self._ampm_ext, tok)
 *             except KeyError:             # <<<<<<<<<<<<<<
 *                 pass
 *         return True
*/
      __pyx_t_10 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_KeyError))));
      if (__pyx_t_10) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L14_exception_handled;
      }
      goto __pyx_L15_except_error;

      /* "cytimes/parser.py":1232
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):
 *             try:             # <<<<<<<<<<<<<<
 *                 dict_delitem(self._ampm_ext, tok)
 *             except KeyError:
*/
      __pyx_L15_except_error:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L14_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_8, __pyx_t_7);
      __pyx_L20_try_end:;
    }

    /* "cytimes/parser.py":1231
 *             return False
 *         # Remove from extend namespace
 *         for tok in self._gen_token_case_variants(token):             # <<<<<<<<<<<<<<
 *             try:
 *                 dict_delitem(self._ampm_ext, tok)
*/
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1236
 *             except KeyError:
 *                 pass
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1211
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_ampm(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.remove_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tok);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_73remove_ampm(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_72remove_ampm, "Remove `AM/PM` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `AM/PM` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_ampm(\"am\")\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_73remove_ampm = {"remove_ampm", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_73remove_ampm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_72remove_ampm};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_73remove_ampm(PyObject *__pyx_v_self, 
#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_token = 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_ampm (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_token,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, 1211, __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, 1211, __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_ampm", 0) < (0)) __PYX_ERR(0, 1211, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("remove_ampm", 1, 1, 1, i); __PYX_ERR(0, 1211, __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, 1211, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("remove_ampm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1211, __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("cytimes.parser.Configs.remove_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1213, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_72remove_ampm(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_72remove_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("remove_ampm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_remove_ampm(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1211, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.remove_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1238
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_75replace_ampm(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_replace_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm *__pyx_optional_args) {

  /* "cytimes/parser.py":1240
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `AM/PM` mapping `<'bool'>`.
 * 
*/
  PyObject *__pyx_v_mapping = ((PyObject*)Py_None);
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_old_ext = 0;
  PyObject *__pyx_v_t = NULL;
  PyObject *__pyx_v_v = NULL;
  int __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;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  Py_ssize_t __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  int __pyx_t_12;
  int __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_ampm", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_mapping = __pyx_optional_args->mapping;
    }
  }
  __Pyx_INCREF(__pyx_v_mapping);

  /* "cytimes/parser.py":1238
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_replace_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1238, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_75replace_ampm)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_mapping};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1238, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1238, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1257
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_AMPM
 * 
*/
  __pyx_t_6 = (__pyx_v_mapping == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":1258
 *         # Reset to default
 *         if mapping is None:
 *             mapping = _DEFAULT_AMPM             # <<<<<<<<<<<<<<
 * 
 *         # Cache mappings
*/
    __Pyx_INCREF(__pyx_v_7cytimes_6parser__DEFAULT_AMPM);
    __Pyx_DECREF_SET(__pyx_v_mapping, __pyx_v_7cytimes_6parser__DEFAULT_AMPM);

    /* "cytimes/parser.py":1257
 *         """
 *         # Reset to default
 *         if mapping is None:             # <<<<<<<<<<<<<<
 *             mapping = _DEFAULT_AMPM
 * 
*/
  }

  /* "cytimes/parser.py":1261
 * 
 *         # Cache mappings
 *         old: dict = self._ampm             # <<<<<<<<<<<<<<
 *         old_ext: dict = self._ampm_ext
 * 
*/
  __pyx_t_1 = __pyx_v_self->_ampm;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1262
 *         # Cache mappings
 *         old: dict = self._ampm
 *         old_ext: dict = self._ampm_ext             # <<<<<<<<<<<<<<
 * 
 *         # Set tokens & values
*/
  __pyx_t_1 = __pyx_v_self->_ampm_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_old_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1265
 * 
 *         # Set tokens & values
 *         self._ampm = dict()             # <<<<<<<<<<<<<<
 *         self._ampm_ext = dict()
 *         try:
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_ampm);
  __Pyx_DECREF(__pyx_v_self->_ampm);
  __pyx_v_self->_ampm = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1266
 *         # Set tokens & values
 *         self._ampm = dict()
 *         self._ampm_ext = dict()             # <<<<<<<<<<<<<<
 *         try:
 *             for t, v in mapping.items():
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1266, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_ampm_ext);
  __Pyx_DECREF(__pyx_v_self->_ampm_ext);
  __pyx_v_self->_ampm_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1267
 *         self._ampm = dict()
 *         self._ampm_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_ampm(
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
    __Pyx_XGOTREF(__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_8);
    __Pyx_XGOTREF(__pyx_t_9);
    /*try:*/ {

      /* "cytimes/parser.py":1268
 *         self._ampm_ext = dict()
 *         try:
 *             for t, v in mapping.items():             # <<<<<<<<<<<<<<
 *                 self.add_ampm(
 *                     self._ensure_str_token("ampm", t),
*/
      __pyx_t_10 = 0;
      if (unlikely(__pyx_v_mapping == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
        __PYX_ERR(0, 1268, __pyx_L4_error)
      }
      __pyx_t_2 = __Pyx_dict_iterator(__pyx_v_mapping, 1, __pyx_mstate_global->__pyx_n_u_items, (&__pyx_t_11), (&__pyx_t_12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1268, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_XDECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_2;
      __pyx_t_2 = 0;
      while (1) {
        __pyx_t_13 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_11, &__pyx_t_10, &__pyx_t_2, &__pyx_t_4, NULL, __pyx_t_12);
        if (unlikely(__pyx_t_13 == 0)) break;
        if (unlikely(__pyx_t_13 == -1)) __PYX_ERR(0, 1268, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_4);
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":1270
 *             for t, v in mapping.items():
 *                 self.add_ampm(
 *                     self._ensure_str_token("ampm", t),             # <<<<<<<<<<<<<<
 *                     self._ensure_int_value("ampm", v),
 *                 )
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_7Configs__ensure_str_token(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_ampm, __pyx_v_t); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1270, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_4);

        /* "cytimes/parser.py":1271
 *                 self.add_ampm(
 *                     self._ensure_str_token("ampm", t),
 *                     self._ensure_int_value("ampm", v),             # <<<<<<<<<<<<<<
 *                 )
 *         except Exception:
*/
        __pyx_t_13 = __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(__pyx_v_self, __pyx_mstate_global->__pyx_n_u_ampm, __pyx_v_v); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1271, __pyx_L4_error)

        /* "cytimes/parser.py":1269
 *         try:
 *             for t, v in mapping.items():
 *                 self.add_ampm(             # <<<<<<<<<<<<<<
 *                     self._ensure_str_token("ampm", t),
 *                     self._ensure_int_value("ampm", v),
*/
        __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->add_ampm(__pyx_v_self, ((PyObject*)__pyx_t_4), __pyx_t_13, 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1269, __pyx_L4_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      }
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "cytimes/parser.py":1267
 *         self._ampm = dict()
 *         self._ampm_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_ampm(
*/
    }
    __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;
    goto __pyx_L9_try_end;
    __pyx_L4_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1273
 *                     self._ensure_int_value("ampm", v),
 *                 )
 *         except Exception:             # <<<<<<<<<<<<<<
 *             # Rollback
 *             self._ampm = old
*/
    __pyx_t_12 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_12) {
      __Pyx_AddTraceback("cytimes.parser.Configs.replace_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 1273, __pyx_L6_except_error)
      __Pyx_XGOTREF(__pyx_t_1);
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_2);

      /* "cytimes/parser.py":1275
 *         except Exception:
 *             # Rollback
 *             self._ampm = old             # <<<<<<<<<<<<<<
 *             self._ampm_ext = old_ext
 *             raise
*/
      __Pyx_INCREF(__pyx_v_old);
      __Pyx_GIVEREF(__pyx_v_old);
      __Pyx_GOTREF(__pyx_v_self->_ampm);
      __Pyx_DECREF(__pyx_v_self->_ampm);
      __pyx_v_self->_ampm = __pyx_v_old;

      /* "cytimes/parser.py":1276
 *             # Rollback
 *             self._ampm = old
 *             self._ampm_ext = old_ext             # <<<<<<<<<<<<<<
 *             raise
 *         return True
*/
      __Pyx_INCREF(__pyx_v_old_ext);
      __Pyx_GIVEREF(__pyx_v_old_ext);
      __Pyx_GOTREF(__pyx_v_self->_ampm_ext);
      __Pyx_DECREF(__pyx_v_self->_ampm_ext);
      __pyx_v_self->_ampm_ext = __pyx_v_old_ext;

      /* "cytimes/parser.py":1277
 *             self._ampm = old
 *             self._ampm_ext = old_ext
 *             raise             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
      __Pyx_GIVEREF(__pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_2);
      __Pyx_ErrRestoreWithState(__pyx_t_1, __pyx_t_4, __pyx_t_2);
      __pyx_t_1 = 0;  __pyx_t_4 = 0;  __pyx_t_2 = 0; 
      __PYX_ERR(0, 1277, __pyx_L6_except_error)
    }
    goto __pyx_L6_except_error;

    /* "cytimes/parser.py":1267
 *         self._ampm = dict()
 *         self._ampm_ext = dict()
 *         try:             # <<<<<<<<<<<<<<
 *             for t, v in mapping.items():
 *                 self.add_ampm(
*/
    __pyx_L6_except_error:;
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L9_try_end:;
  }

  /* "cytimes/parser.py":1278
 *             self._ampm_ext = old_ext
 *             raise
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1238
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.replace_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old);
  __Pyx_XDECREF(__pyx_v_old_ext);
  __Pyx_XDECREF(__pyx_v_t);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_mapping);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_75replace_ampm(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_74replace_ampm, "Replace the `AM/PM` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `AM/PM` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `AM/PM` tokens\n              and values are AM/PM flag numbers (0=AM; 1=PM).\n            - If `None`, resets to the default `AM/PM` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `AM/PM` token conflicts with\n            other namespaces or the AM/PM flag number is invalid.\n\n        ## Example\n        >>> cfg.replace_ampm({\"am\": 0, \"pm\": 1, ... })\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_75replace_ampm = {"replace_ampm", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_75replace_ampm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_74replace_ampm};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_75replace_ampm(PyObject *__pyx_v_self, 
#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_mapping = 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("replace_ampm (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_mapping,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, 1238, __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, 1238, __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, "replace_ampm", 0) < (0)) __PYX_ERR(0, 1238, __pyx_L3_error)

      /* "cytimes/parser.py":1240
 *     @cython.ccall
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:             # <<<<<<<<<<<<<<
 *         """Replace the `AM/PM` mapping `<'bool'>`.
 * 
*/
      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, 1238, __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_mapping = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("replace_ampm", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 1238, __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("cytimes.parser.Configs.replace_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mapping), (&PyDict_Type), 1, "mapping", 2))) __PYX_ERR(0, 1240, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_74replace_ampm(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_mapping);

  /* "cytimes/parser.py":1238
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:
*/

  /* 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_7cytimes_6parser_7Configs_74replace_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_mapping) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("replace_ampm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.mapping = __pyx_v_mapping;
  __pyx_t_1 = __pyx_vtabptr_7cytimes_6parser_Configs->replace_ampm(__pyx_v_self, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1238, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.replace_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1280
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_ampm(self, token: str) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_77is_ampm(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_is_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_ampm", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_is_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1280, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_77is_ampm)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1280, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1289
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._ampm_ext, token)
*/
  __pyx_t_6 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_6) {

    /* "cytimes/parser.py":1290
 *         """
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         return dict_contains(self._ampm_ext, token)
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1289
 *         :return `<'bool'>`: True if the token can be recognized, otherwise False.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         return dict_contains(self._ampm_ext, token)
*/
  }

  /* "cytimes/parser.py":1291
 *         if token is None:
 *             return False
 *         return dict_contains(self._ampm_ext, token)             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_t_1 = __pyx_v_self->_ampm_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_t_7 = PyDict_Contains(__pyx_t_1, __pyx_v_token); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(0, 1291, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_7;
  goto __pyx_L0;

  /* "cytimes/parser.py":1280
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_ampm(self, token: str) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.is_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_77is_ampm(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_76is_ampm, "Check if the `token` can be recognized as `AM/PM` flag `<'bool'>`.\n\n        :param token `<'str'>`: The token to check against.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'bool'>`: True if the token can be recognized, otherwise False.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_77is_ampm = {"is_ampm", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_77is_ampm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_76is_ampm};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_77is_ampm(PyObject *__pyx_v_self, 
#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_token = 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_ampm (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_token,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, 1280, __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, 1280, __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_ampm", 0) < (0)) __PYX_ERR(0, 1280, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("is_ampm", 1, 1, 1, i); __PYX_ERR(0, 1280, __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, 1280, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_ampm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1280, __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("cytimes.parser.Configs.is_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1282, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_76is_ampm(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_76is_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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("is_ampm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_is_ampm(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1280, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.is_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1293
 *         return dict_contains(self._ampm_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_ampm(self, token: str) -> cython.int:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_79get_ampm(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_get_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token, int __pyx_skip_dispatch) {
  PyObject *__pyx_v_value;
  int __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_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_ampm", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_get_ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1293, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_79get_ampm)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v_token};
          __pyx_t_2 = __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_3); __pyx_t_3 = 0;
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1293, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1304
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._ampm_ext, token)
*/
  __pyx_t_7 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1305
 *         """
 *         if token is None:
 *             return -1             # <<<<<<<<<<<<<<
 *         value = dict_getitem(self._ampm_ext, token)
 *         if value == cython.NULL:
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1304
 *             token is not recognizable (-1 is the sentinel value for None).
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return -1
 *         value = dict_getitem(self._ampm_ext, token)
*/
  }

  /* "cytimes/parser.py":1306
 *         if token is None:
 *             return -1
 *         value = dict_getitem(self._ampm_ext, token)             # <<<<<<<<<<<<<<
 *         if value == cython.NULL:
 *             return -1
*/
  __pyx_t_1 = __pyx_v_self->_ampm_ext;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_value = PyDict_GetItem(__pyx_t_1, __pyx_v_token);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":1307
 *             return -1
 *         value = dict_getitem(self._ampm_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  __pyx_t_7 = (__pyx_v_value == NULL);
  if (__pyx_t_7) {

    /* "cytimes/parser.py":1308
 *         value = dict_getitem(self._ampm_ext, token)
 *         if value == cython.NULL:
 *             return -1             # <<<<<<<<<<<<<<
 *         return cython.cast(object, value)
 * 
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":1307
 *             return -1
 *         value = dict_getitem(self._ampm_ext, token)
 *         if value == cython.NULL:             # <<<<<<<<<<<<<<
 *             return -1
 *         return cython.cast(object, value)
*/
  }

  /* "cytimes/parser.py":1309
 *         if value == cython.NULL:
 *             return -1
 *         return cython.cast(object, value)             # <<<<<<<<<<<<<<
 * 
 *     # Clear & Reset ------------------------------------------------
*/
  __pyx_t_6 = __Pyx_PyLong_As_int(((PyObject *)__pyx_v_value)); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1309, __pyx_L1_error)
  __pyx_r = __pyx_t_6;
  goto __pyx_L0;

  /* "cytimes/parser.py":1293
 *         return dict_contains(self._ampm_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_ampm(self, token: str) -> cython.int:
*/

  /* 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("cytimes.parser.Configs.get_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_79get_ampm(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_78get_ampm, "Get the corresponding AM/PM flag number if `token`\n        can be recognized as `AM/PM` `<'int'>`\n\n        :param token `<'str'>`: Candidate for `AM/PM` token.\n            Only recognize in `lowercase`, `uppercase` and `titlecase`.\n        :return `<'int'>`: AM/PM flag number (0=AM; 1=PM), or `-1` if the\n            token is not recognizable (-1 is the sentinel value for None).\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_79get_ampm = {"get_ampm", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_79get_ampm, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_78get_ampm};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_79get_ampm(PyObject *__pyx_v_self, 
#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_token = 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_ampm (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_token,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, 1293, __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, 1293, __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_ampm", 0) < (0)) __PYX_ERR(0, 1293, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("get_ampm", 1, 1, 1, i); __PYX_ERR(0, 1293, __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, 1293, __pyx_L3_error)
    }
    __pyx_v_token = ((PyObject*)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("get_ampm", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 1293, __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("cytimes.parser.Configs.get_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_token), (&PyUnicode_Type), 0, "token", 2))) __PYX_ERR(0, 1295, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_78get_ampm(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self), __pyx_v_token);

  /* 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_7cytimes_6parser_7Configs_78get_ampm(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  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_ampm", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_get_ampm(__pyx_v_self, __pyx_v_token, 1); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 1293, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.get_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1312
 * 
 *     # Clear & Reset ------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def clear_settings(self) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_81clear_settings(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_clear_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch) {
  int __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("clear_settings", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_clear_settings); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_81clear_settings)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__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_2)) __PYX_ERR(0, 1312, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1312, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1323
 *         """
 *         # . jump
 *         self._jump = set()             # <<<<<<<<<<<<<<
 *         self._jump_ext = set()
 *         # . pertain
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_jump);
  __Pyx_DECREF(__pyx_v_self->_jump);
  __pyx_v_self->_jump = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1324
 *         # . jump
 *         self._jump = set()
 *         self._jump_ext = set()             # <<<<<<<<<<<<<<
 *         # . pertain
 *         self._pertain = set()
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_jump_ext);
  __Pyx_DECREF(__pyx_v_self->_jump_ext);
  __pyx_v_self->_jump_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1326
 *         self._jump_ext = set()
 *         # . pertain
 *         self._pertain = set()             # <<<<<<<<<<<<<<
 *         self._pertain_ext = set()
 *         # . utc
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1326, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_pertain);
  __Pyx_DECREF(__pyx_v_self->_pertain);
  __pyx_v_self->_pertain = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1327
 *         # . pertain
 *         self._pertain = set()
 *         self._pertain_ext = set()             # <<<<<<<<<<<<<<
 *         # . utc
 *         self._utc = set()
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1327, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_pertain_ext);
  __Pyx_DECREF(__pyx_v_self->_pertain_ext);
  __pyx_v_self->_pertain_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1329
 *         self._pertain_ext = set()
 *         # . utc
 *         self._utc = set()             # <<<<<<<<<<<<<<
 *         self._utc_ext = set()
 *         # . tz
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_utc);
  __Pyx_DECREF(__pyx_v_self->_utc);
  __pyx_v_self->_utc = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1330
 *         # . utc
 *         self._utc = set()
 *         self._utc_ext = set()             # <<<<<<<<<<<<<<
 *         # . tz
 *         self._tz = dict()
*/
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_utc_ext);
  __Pyx_DECREF(__pyx_v_self->_utc_ext);
  __pyx_v_self->_utc_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1332
 *         self._utc_ext = set()
 *         # . tz
 *         self._tz = dict()             # <<<<<<<<<<<<<<
 *         self._tz_ext = dict()
 *         # . month
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tz);
  __Pyx_DECREF(__pyx_v_self->_tz);
  __pyx_v_self->_tz = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1333
 *         # . tz
 *         self._tz = dict()
 *         self._tz_ext = dict()             # <<<<<<<<<<<<<<
 *         # . month
 *         self._month = dict()
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1333, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tz_ext);
  __Pyx_DECREF(__pyx_v_self->_tz_ext);
  __pyx_v_self->_tz_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1335
 *         self._tz_ext = dict()
 *         # . month
 *         self._month = dict()             # <<<<<<<<<<<<<<
 *         self._month_ext = dict()
 *         # . weekday
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1335, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_month);
  __Pyx_DECREF(__pyx_v_self->_month);
  __pyx_v_self->_month = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1336
 *         # . month
 *         self._month = dict()
 *         self._month_ext = dict()             # <<<<<<<<<<<<<<
 *         # . weekday
 *         self._weekday = dict()
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_month_ext);
  __Pyx_DECREF(__pyx_v_self->_month_ext);
  __pyx_v_self->_month_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1338
 *         self._month_ext = dict()
 *         # . weekday
 *         self._weekday = dict()             # <<<<<<<<<<<<<<
 *         self._weekday_ext = dict()
 *         # . hms
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_weekday);
  __Pyx_DECREF(__pyx_v_self->_weekday);
  __pyx_v_self->_weekday = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1339
 *         # . weekday
 *         self._weekday = dict()
 *         self._weekday_ext = dict()             # <<<<<<<<<<<<<<
 *         # . hms
 *         self._hms = dict()
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1339, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_weekday_ext);
  __Pyx_DECREF(__pyx_v_self->_weekday_ext);
  __pyx_v_self->_weekday_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1341
 *         self._weekday_ext = dict()
 *         # . hms
 *         self._hms = dict()             # <<<<<<<<<<<<<<
 *         self._hms_ext = dict()
 *         # . ampm
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_hms);
  __Pyx_DECREF(__pyx_v_self->_hms);
  __pyx_v_self->_hms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1342
 *         # . hms
 *         self._hms = dict()
 *         self._hms_ext = dict()             # <<<<<<<<<<<<<<
 *         # . ampm
 *         self._ampm = dict()
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_hms_ext);
  __Pyx_DECREF(__pyx_v_self->_hms_ext);
  __pyx_v_self->_hms_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1344
 *         self._hms_ext = dict()
 *         # . ampm
 *         self._ampm = dict()             # <<<<<<<<<<<<<<
 *         self._ampm_ext = dict()
 *         return True
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1344, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_ampm);
  __Pyx_DECREF(__pyx_v_self->_ampm);
  __pyx_v_self->_ampm = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1345
 *         # . ampm
 *         self._ampm = dict()
 *         self._ampm_ext = dict()             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1345, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_ampm_ext);
  __Pyx_DECREF(__pyx_v_self->_ampm_ext);
  __pyx_v_self->_ampm_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":1346
 *         self._ampm = dict()
 *         self._ampm_ext = dict()
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.ccall
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1312
 * 
 *     # Clear & Reset ------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def clear_settings(self) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.clear_settings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_81clear_settings(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_80clear_settings, "Clear all token settings.\n\n        - Remove all tokens in namespaces:\n            `jump`, `pertain`, `utc`.\n        - Remove all tokens and corresponding values in namespaces:\n            `tz`, `month`, `weekday`, `hms`, `ampm`.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_81clear_settings = {"clear_settings", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_81clear_settings, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_80clear_settings};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_81clear_settings(PyObject *__pyx_v_self, 
#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_settings (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_settings", 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_settings", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_80clear_settings(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_80clear_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self) {
  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("clear_settings", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_clear_settings(__pyx_v_self, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1312, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.clear_settings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1348
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def reset_settings(self) -> cython.bint:
*/

static PyObject *__pyx_pw_7cytimes_6parser_7Configs_83reset_settings(PyObject *__pyx_v_self, 
#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 int __pyx_f_7cytimes_6parser_7Configs_reset_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, int __pyx_skip_dispatch) {
  int __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;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump __pyx_t_7;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain __pyx_t_8;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc __pyx_t_9;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz __pyx_t_10;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month __pyx_t_11;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday __pyx_t_12;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms __pyx_t_13;
  struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("reset_settings", 0);
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_reset_settings); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1348, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_7Configs_83reset_settings)) {
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = 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_5 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_5, (1-__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_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1348, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_r = __pyx_t_6;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":1358
 *             `tz`, `month`, `weekday`, `hms`, `ampm`.
 *         """
 *         self.clear_settings()             # <<<<<<<<<<<<<<
 *         self.replace_jump(None)
 *         self.replace_pertain(None)
*/
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->clear_settings(__pyx_v_self, 0); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1358, __pyx_L1_error)

  /* "cytimes/parser.py":1359
 *         """
 *         self.clear_settings()
 *         self.replace_jump(None)             # <<<<<<<<<<<<<<
 *         self.replace_pertain(None)
 *         self.replace_utc(None)
*/
  __pyx_t_7.__pyx_n = 1;
  __pyx_t_7.tokens = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_jump(__pyx_v_self, 0, &__pyx_t_7); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1359, __pyx_L1_error)

  /* "cytimes/parser.py":1360
 *         self.clear_settings()
 *         self.replace_jump(None)
 *         self.replace_pertain(None)             # <<<<<<<<<<<<<<
 *         self.replace_utc(None)
 *         self.replace_tz(None)
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.tokens = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_pertain(__pyx_v_self, 0, &__pyx_t_8); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1360, __pyx_L1_error)

  /* "cytimes/parser.py":1361
 *         self.replace_jump(None)
 *         self.replace_pertain(None)
 *         self.replace_utc(None)             # <<<<<<<<<<<<<<
 *         self.replace_tz(None)
 *         self.replace_month(None)
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.tokens = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_utc(__pyx_v_self, 0, &__pyx_t_9); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1361, __pyx_L1_error)

  /* "cytimes/parser.py":1362
 *         self.replace_pertain(None)
 *         self.replace_utc(None)
 *         self.replace_tz(None)             # <<<<<<<<<<<<<<
 *         self.replace_month(None)
 *         self.replace_weekday(None)
*/
  __pyx_t_10.__pyx_n = 1;
  __pyx_t_10.mapping = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_tz(__pyx_v_self, 0, &__pyx_t_10); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1362, __pyx_L1_error)

  /* "cytimes/parser.py":1363
 *         self.replace_utc(None)
 *         self.replace_tz(None)
 *         self.replace_month(None)             # <<<<<<<<<<<<<<
 *         self.replace_weekday(None)
 *         self.replace_hms(None)
*/
  __pyx_t_11.__pyx_n = 1;
  __pyx_t_11.mapping = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_month(__pyx_v_self, 0, &__pyx_t_11); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1363, __pyx_L1_error)

  /* "cytimes/parser.py":1364
 *         self.replace_tz(None)
 *         self.replace_month(None)
 *         self.replace_weekday(None)             # <<<<<<<<<<<<<<
 *         self.replace_hms(None)
 *         self.replace_ampm(None)
*/
  __pyx_t_12.__pyx_n = 1;
  __pyx_t_12.mapping = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_weekday(__pyx_v_self, 0, &__pyx_t_12); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1364, __pyx_L1_error)

  /* "cytimes/parser.py":1365
 *         self.replace_month(None)
 *         self.replace_weekday(None)
 *         self.replace_hms(None)             # <<<<<<<<<<<<<<
 *         self.replace_ampm(None)
 *         return True
*/
  __pyx_t_13.__pyx_n = 1;
  __pyx_t_13.mapping = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_hms(__pyx_v_self, 0, &__pyx_t_13); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1365, __pyx_L1_error)

  /* "cytimes/parser.py":1366
 *         self.replace_weekday(None)
 *         self.replace_hms(None)
 *         self.replace_ampm(None)             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __pyx_t_14.__pyx_n = 1;
  __pyx_t_14.mapping = ((PyObject*)Py_None);
  __pyx_t_6 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->replace_ampm(__pyx_v_self, 0, &__pyx_t_14); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 1366, __pyx_L1_error)

  /* "cytimes/parser.py":1367
 *         self.replace_hms(None)
 *         self.replace_ampm(None)
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # Internal --------------------------------------------------------
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":1348
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def reset_settings(self) -> cython.bint:
*/

  /* 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("cytimes.parser.Configs.reset_settings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_83reset_settings(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_7Configs_82reset_settings, "Reset all token settings to `default`.\n\n        - Reset all tokens to default in namespaces:\n            `jump`, `pertain`, `utc`.\n        - Reset all tokens and corresponding values to default in namespaces:\n            `tz`, `month`, `weekday`, `hms`, `ampm`.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7Configs_83reset_settings = {"reset_settings", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_83reset_settings, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_82reset_settings};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_83reset_settings(PyObject *__pyx_v_self, 
#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_settings (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_settings", 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_settings", __pyx_kwds); return NULL;}
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_82reset_settings(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_82reset_settings(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self) {
  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("reset_settings", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs_reset_settings(__pyx_v_self, 1); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1348, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs.reset_settings", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1371
 *     # Internal --------------------------------------------------------
 *     # . token
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _ensure_str_token(self, namespace: str, token: object) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__ensure_str_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5[5];
  PyObject *__pyx_t_6 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_ensure_str_token", 0);

  /* "cytimes/parser.py":1382
 *         :raises `<'InvalidConfigsValue'>`: If the token is not a string.
 *         """
 *         if not isinstance(token, str):             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  __pyx_t_1 = PyUnicode_Check(__pyx_v_token); 
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1384
 *         if not isinstance(token, str):
 *             errors.raise_configs_token_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Token for 'Configs.%s' must be a string, instead got %s."
 *                 % (namespace, type(token)),
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1384, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1386
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got %s."
 *                 % (namespace, type(token)),             # <<<<<<<<<<<<<<
 *             )
 *         return token
*/
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_token))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1386, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5[0] = __pyx_mstate_global->__pyx_kp_u_Token_for_Configs;
    __pyx_t_5[1] = __pyx_v_namespace;
    __pyx_t_5[2] = __pyx_mstate_global->__pyx_kp_u_must_be_a_string_instead_got;
    __pyx_t_5[3] = __pyx_t_4;
    __pyx_t_5[4] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "cytimes/parser.py":1385
 *             errors.raise_configs_token_error(
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got %s."             # <<<<<<<<<<<<<<
 *                 % (namespace, type(token)),
 *             )
*/
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_namespace) + 32 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_namespace) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1385, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1383
 *         """
 *         if not isinstance(token, str):
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got %s."
*/
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.cls = __pyx_t_3;
    __pyx_t_7.error_msg = ((PyObject*)__pyx_t_6);
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1383, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "cytimes/parser.py":1382
 *         :raises `<'InvalidConfigsValue'>`: If the token is not a string.
 *         """
 *         if not isinstance(token, str):             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1388
 *                 % (namespace, type(token)),
 *             )
 *         return token             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_6 = __pyx_v_token;
  __Pyx_INCREF(__pyx_t_6);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_6))) __PYX_ERR(0, 1388, __pyx_L1_error)
  __pyx_r = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1371
 *     # Internal --------------------------------------------------------
 *     # . token
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _ensure_str_token(self, namespace: str, token: object) -> str:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.parser.Configs._ensure_str_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1390
 *         return token
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _validate_token(self, namespace: str, token: str) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__validate_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token) {
  PyObject *__pyx_v_overlap = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7[7];
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_validate_token", 0);
  __Pyx_INCREF(__pyx_v_token);

  /* "cytimes/parser.py":1406
 *         """
 *         # Validate token
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1408
 *         if token is None:
 *             errors.raise_configs_token_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Token for 'Configs.%s' must be a string, instead got None."
 *                 % namespace,
*/
    __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1408, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "cytimes/parser.py":1410
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got None."
 *                 % namespace,             # <<<<<<<<<<<<<<
 *             )
 *         token: str = self._lowercase_token(namespace, token)
*/
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Token_for_Configs_s_must_be_a_st, __pyx_v_namespace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1410, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1407
 *         # Validate token
 *         if token is None:
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got None."
*/
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.cls = __pyx_t_2;
    __pyx_t_4.error_msg = ((PyObject*)__pyx_t_3);
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1407, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":1406
 *         """
 *         # Validate token
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1412
 *                 % namespace,
 *             )
 *         token: str = self._lowercase_token(namespace, token)             # <<<<<<<<<<<<<<
 * 
 *         # Cross-namespace check
*/
  __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__lowercase_token(__pyx_v_self, __pyx_v_namespace, __pyx_v_token); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1412, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_3));
  __pyx_t_3 = 0;

  /* "cytimes/parser.py":1416
 *         # Cross-namespace check
 *         # . jump: lowest priority  accept overlap
 *         if namespace == "jump":             # <<<<<<<<<<<<<<
 *             return token
 *         overlap: str = None
*/
  __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_jump, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1416, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1417
 *         # . jump: lowest priority  accept overlap
 *         if namespace == "jump":
 *             return token             # <<<<<<<<<<<<<<
 *         overlap: str = None
 *         # . pertain
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_token);
    __pyx_r = __pyx_v_token;
    goto __pyx_L0;

    /* "cytimes/parser.py":1416
 *         # Cross-namespace check
 *         # . jump: lowest priority  accept overlap
 *         if namespace == "jump":             # <<<<<<<<<<<<<<
 *             return token
 *         overlap: str = None
*/
  }

  /* "cytimes/parser.py":1418
 *         if namespace == "jump":
 *             return token
 *         overlap: str = None             # <<<<<<<<<<<<<<
 *         # . pertain
 *         if set_contains(self._pertain, token):
*/
  __Pyx_INCREF(Py_None);
  __pyx_v_overlap = ((PyObject*)Py_None);

  /* "cytimes/parser.py":1420
 *         overlap: str = None
 *         # . pertain
 *         if set_contains(self._pertain, token):             # <<<<<<<<<<<<<<
 *             if namespace != "pertain":
 *                 overlap = "pertain"
*/
  __pyx_t_3 = __pyx_v_self->_pertain;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = PySet_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1421
 *         # . pertain
 *         if set_contains(self._pertain, token):
 *             if namespace != "pertain":             # <<<<<<<<<<<<<<
 *                 overlap = "pertain"
 *         # . utc
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_pertain, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1421, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1422
 *         if set_contains(self._pertain, token):
 *             if namespace != "pertain":
 *                 overlap = "pertain"             # <<<<<<<<<<<<<<
 *         # . utc
 *         elif set_contains(self._utc, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_pertain);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_pertain);

      /* "cytimes/parser.py":1421
 *         # . pertain
 *         if set_contains(self._pertain, token):
 *             if namespace != "pertain":             # <<<<<<<<<<<<<<
 *                 overlap = "pertain"
 *         # . utc
*/
    }

    /* "cytimes/parser.py":1420
 *         overlap: str = None
 *         # . pertain
 *         if set_contains(self._pertain, token):             # <<<<<<<<<<<<<<
 *             if namespace != "pertain":
 *                 overlap = "pertain"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1424
 *                 overlap = "pertain"
 *         # . utc
 *         elif set_contains(self._utc, token):             # <<<<<<<<<<<<<<
 *             if namespace != "utc":
 *                 overlap = "utc"
*/
  __pyx_t_3 = __pyx_v_self->_utc;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_1 = PySet_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1424, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1425
 *         # . utc
 *         elif set_contains(self._utc, token):
 *             if namespace != "utc":             # <<<<<<<<<<<<<<
 *                 overlap = "utc"
 *         # . tz
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_utc, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1425, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1426
 *         elif set_contains(self._utc, token):
 *             if namespace != "utc":
 *                 overlap = "utc"             # <<<<<<<<<<<<<<
 *         # . tz
 *         elif dict_contains(self._tz, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_utc);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_utc);

      /* "cytimes/parser.py":1425
 *         # . utc
 *         elif set_contains(self._utc, token):
 *             if namespace != "utc":             # <<<<<<<<<<<<<<
 *                 overlap = "utc"
 *         # . tz
*/
    }

    /* "cytimes/parser.py":1424
 *                 overlap = "pertain"
 *         # . utc
 *         elif set_contains(self._utc, token):             # <<<<<<<<<<<<<<
 *             if namespace != "utc":
 *                 overlap = "utc"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1428
 *                 overlap = "utc"
 *         # . tz
 *         elif dict_contains(self._tz, token):             # <<<<<<<<<<<<<<
 *             if namespace != "tz":
 *                 overlap = "tz"
*/
  __pyx_t_3 = __pyx_v_self->_tz;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyDict_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1428, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_5 != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1429
 *         # . tz
 *         elif dict_contains(self._tz, token):
 *             if namespace != "tz":             # <<<<<<<<<<<<<<
 *                 overlap = "tz"
 *         # . month
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_tz, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1429, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1430
 *         elif dict_contains(self._tz, token):
 *             if namespace != "tz":
 *                 overlap = "tz"             # <<<<<<<<<<<<<<
 *         # . month
 *         elif dict_contains(self._month, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_tz);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_tz);

      /* "cytimes/parser.py":1429
 *         # . tz
 *         elif dict_contains(self._tz, token):
 *             if namespace != "tz":             # <<<<<<<<<<<<<<
 *                 overlap = "tz"
 *         # . month
*/
    }

    /* "cytimes/parser.py":1428
 *                 overlap = "utc"
 *         # . tz
 *         elif dict_contains(self._tz, token):             # <<<<<<<<<<<<<<
 *             if namespace != "tz":
 *                 overlap = "tz"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1432
 *                 overlap = "tz"
 *         # . month
 *         elif dict_contains(self._month, token):             # <<<<<<<<<<<<<<
 *             if namespace != "month":
 *                 overlap = "month"
*/
  __pyx_t_3 = __pyx_v_self->_month;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyDict_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1432, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_5 != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1433
 *         # . month
 *         elif dict_contains(self._month, token):
 *             if namespace != "month":             # <<<<<<<<<<<<<<
 *                 overlap = "month"
 *         # . weekday
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_month, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1433, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1434
 *         elif dict_contains(self._month, token):
 *             if namespace != "month":
 *                 overlap = "month"             # <<<<<<<<<<<<<<
 *         # . weekday
 *         elif dict_contains(self._weekday, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_month);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_month);

      /* "cytimes/parser.py":1433
 *         # . month
 *         elif dict_contains(self._month, token):
 *             if namespace != "month":             # <<<<<<<<<<<<<<
 *                 overlap = "month"
 *         # . weekday
*/
    }

    /* "cytimes/parser.py":1432
 *                 overlap = "tz"
 *         # . month
 *         elif dict_contains(self._month, token):             # <<<<<<<<<<<<<<
 *             if namespace != "month":
 *                 overlap = "month"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1436
 *                 overlap = "month"
 *         # . weekday
 *         elif dict_contains(self._weekday, token):             # <<<<<<<<<<<<<<
 *             if namespace != "weekday":
 *                 overlap = "weekday"
*/
  __pyx_t_3 = __pyx_v_self->_weekday;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyDict_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_5 != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1437
 *         # . weekday
 *         elif dict_contains(self._weekday, token):
 *             if namespace != "weekday":             # <<<<<<<<<<<<<<
 *                 overlap = "weekday"
 *         # . hms flag
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_weekday, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1437, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1438
 *         elif dict_contains(self._weekday, token):
 *             if namespace != "weekday":
 *                 overlap = "weekday"             # <<<<<<<<<<<<<<
 *         # . hms flag
 *         elif dict_contains(self._hms, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_weekday);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_weekday);

      /* "cytimes/parser.py":1437
 *         # . weekday
 *         elif dict_contains(self._weekday, token):
 *             if namespace != "weekday":             # <<<<<<<<<<<<<<
 *                 overlap = "weekday"
 *         # . hms flag
*/
    }

    /* "cytimes/parser.py":1436
 *                 overlap = "month"
 *         # . weekday
 *         elif dict_contains(self._weekday, token):             # <<<<<<<<<<<<<<
 *             if namespace != "weekday":
 *                 overlap = "weekday"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1440
 *                 overlap = "weekday"
 *         # . hms flag
 *         elif dict_contains(self._hms, token):             # <<<<<<<<<<<<<<
 *             if namespace != "hms":
 *                 overlap = "hms"
*/
  __pyx_t_3 = __pyx_v_self->_hms;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyDict_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1440, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_5 != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1441
 *         # . hms flag
 *         elif dict_contains(self._hms, token):
 *             if namespace != "hms":             # <<<<<<<<<<<<<<
 *                 overlap = "hms"
 *         # . ampm flag
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_hms, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1441, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1442
 *         elif dict_contains(self._hms, token):
 *             if namespace != "hms":
 *                 overlap = "hms"             # <<<<<<<<<<<<<<
 *         # . ampm flag
 *         elif dict_contains(self._ampm, token):
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_hms);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_hms);

      /* "cytimes/parser.py":1441
 *         # . hms flag
 *         elif dict_contains(self._hms, token):
 *             if namespace != "hms":             # <<<<<<<<<<<<<<
 *                 overlap = "hms"
 *         # . ampm flag
*/
    }

    /* "cytimes/parser.py":1440
 *                 overlap = "weekday"
 *         # . hms flag
 *         elif dict_contains(self._hms, token):             # <<<<<<<<<<<<<<
 *             if namespace != "hms":
 *                 overlap = "hms"
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":1444
 *                 overlap = "hms"
 *         # . ampm flag
 *         elif dict_contains(self._ampm, token):             # <<<<<<<<<<<<<<
 *             if namespace != "ampm":
 *                 overlap = "ampm"
*/
  __pyx_t_3 = __pyx_v_self->_ampm;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_5 = PyDict_Contains(__pyx_t_3, __pyx_v_token); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1444, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_5 != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1445
 *         # . ampm flag
 *         elif dict_contains(self._ampm, token):
 *             if namespace != "ampm":             # <<<<<<<<<<<<<<
 *                 overlap = "ampm"
 * 
*/
    __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_namespace, __pyx_mstate_global->__pyx_n_u_ampm, Py_NE)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 1445, __pyx_L1_error)
    if (__pyx_t_1) {

      /* "cytimes/parser.py":1446
 *         elif dict_contains(self._ampm, token):
 *             if namespace != "ampm":
 *                 overlap = "ampm"             # <<<<<<<<<<<<<<
 * 
 *         # Raise error
*/
      __Pyx_INCREF(__pyx_mstate_global->__pyx_n_u_ampm);
      __Pyx_DECREF_SET(__pyx_v_overlap, __pyx_mstate_global->__pyx_n_u_ampm);

      /* "cytimes/parser.py":1445
 *         # . ampm flag
 *         elif dict_contains(self._ampm, token):
 *             if namespace != "ampm":             # <<<<<<<<<<<<<<
 *                 overlap = "ampm"
 * 
*/
    }

    /* "cytimes/parser.py":1444
 *                 overlap = "hms"
 *         # . ampm flag
 *         elif dict_contains(self._ampm, token):             # <<<<<<<<<<<<<<
 *             if namespace != "ampm":
 *                 overlap = "ampm"
*/
  }
  __pyx_L5:;

  /* "cytimes/parser.py":1449
 * 
 *         # Raise error
 *         if overlap:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  if (__pyx_v_overlap == Py_None) __pyx_t_1 = 0;
  else
  {
    Py_ssize_t __pyx_temp = __Pyx_PyUnicode_IS_TRUE(__pyx_v_overlap);
    if (unlikely(((!CYTHON_ASSUME_SAFE_SIZE) && __pyx_temp < 0))) __PYX_ERR(0, 1449, __pyx_L1_error)
    __pyx_t_1 = (__pyx_temp != 0);
  }

  if (__pyx_t_1) {

    /* "cytimes/parser.py":1451
 *         if overlap:
 *             errors.raise_configs_token_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Token '%s' for 'Configs.%s' conflicts with existing tokens in 'Configs.%s'."
 *                 % (token, namespace, overlap),
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1451, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1453
 *                 self._cls(),
 *                 "Token '%s' for 'Configs.%s' conflicts with existing tokens in 'Configs.%s'."
 *                 % (token, namespace, overlap),             # <<<<<<<<<<<<<<
 *             )
 * 
*/
    __pyx_t_2 = __Pyx_PyUnicode_Unicode(__pyx_v_token); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyUnicode_Unicode(__pyx_v_overlap); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1453, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Token;
    __pyx_t_7[1] = __pyx_t_2;
    __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_for_Configs;
    __pyx_t_7[3] = __pyx_v_namespace;
    __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u_conflicts_with_existing_tokens;
    __pyx_t_7[5] = __pyx_t_6;
    __pyx_t_7[6] = __pyx_mstate_global->__pyx_kp_u__13;

    /* "cytimes/parser.py":1452
 *             errors.raise_configs_token_error(
 *                 self._cls(),
 *                 "Token '%s' for 'Configs.%s' conflicts with existing tokens in 'Configs.%s'."             # <<<<<<<<<<<<<<
 *                 % (token, namespace, overlap),
 *             )
*/
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 7, 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_namespace) + 45 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 2, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_namespace) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1452, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "cytimes/parser.py":1450
 *         # Raise error
 *         if overlap:
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Token '%s' for 'Configs.%s' conflicts with existing tokens in 'Configs.%s'."
*/
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.cls = __pyx_t_3;
    __pyx_t_4.error_msg = ((PyObject*)__pyx_t_8);
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1450, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "cytimes/parser.py":1449
 * 
 *         # Raise error
 *         if overlap:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1457
 * 
 *         # Return the token in lowercase
 *         return token             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_token);
  __pyx_r = __pyx_v_token;
  goto __pyx_L0;

  /* "cytimes/parser.py":1390
 *         return token
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _validate_token(self, namespace: str, token: str) -> str:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cytimes.parser.Configs._validate_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_overlap);
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1459
 *         return token
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _lowercase_token(self, namespace: str, token: str) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__lowercase_token(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_token) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_lowercase_token", 0);

  /* "cytimes/parser.py":1469
 *         :returns `<'str'>`: The lowercase variant of the token.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1471
 *         if token is None:
 *             errors.raise_configs_token_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Token for 'Configs.%s' must be a string, instead got None."
 *                 % namespace,
*/
    __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1471, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "cytimes/parser.py":1473
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got None."
 *                 % namespace,             # <<<<<<<<<<<<<<
 *             )
 *         if str_len(token) == 0:
*/
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Token_for_Configs_s_must_be_a_st, __pyx_v_namespace); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1473, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1470
 *         """
 *         if token is None:
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Token for 'Configs.%s' must be a string, instead got None."
*/
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.cls = __pyx_t_2;
    __pyx_t_4.error_msg = ((PyObject*)__pyx_t_3);
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1470, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":1469
 *         :returns `<'str'>`: The lowercase variant of the token.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1475
 *                 % namespace,
 *             )
 *         if str_len(token) == 0:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  __pyx_t_1 = (PyUnicode_GET_LENGTH(__pyx_v_token) == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1477
 *         if str_len(token) == 0:
 *             errors.raise_configs_token_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Token for 'Configs.%s' cannot be an empty string." % namespace,
 *             )
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1477, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1478
 *             errors.raise_configs_token_error(
 *                 self._cls(),
 *                 "Token for 'Configs.%s' cannot be an empty string." % namespace,             # <<<<<<<<<<<<<<
 *             )
 *         return token.lower()
*/
    __pyx_t_2 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Token_for_Configs_s_cannot_be_an, __pyx_v_namespace); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1478, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "cytimes/parser.py":1476
 *             )
 *         if str_len(token) == 0:
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Token for 'Configs.%s' cannot be an empty string." % namespace,
*/
    __pyx_t_4.__pyx_n = 2;
    __pyx_t_4.cls = __pyx_t_3;
    __pyx_t_4.error_msg = ((PyObject*)__pyx_t_2);
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_4); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1476, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":1475
 *                 % namespace,
 *             )
 *         if str_len(token) == 0:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1480
 *                 "Token for 'Configs.%s' cannot be an empty string." % namespace,
 *             )
 *         return token.lower()             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__lower, __pyx_v_token); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1459
 *         return token
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _lowercase_token(self, namespace: str, token: str) -> str:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs._lowercase_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1482
 *         return token.lower()
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _gen_token_case_variants(self, token: str) -> tuple[str, str, str]:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_token) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error __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("_gen_token_case_variants", 0);

  /* "cytimes/parser.py":1491
 *             the lowercase, uppercase, and titlecase variants of the token.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(), "Namespace `token` cannot be None."
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1493
 *         if token is None:
 *             errors.raise_configs_token_error(
 *                 self._cls(), "Namespace `token` cannot be None."             # <<<<<<<<<<<<<<
 *             )
 *         return (token.lower(), token.upper(), token.title())
*/
    __pyx_t_2 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);

    /* "cytimes/parser.py":1492
 *         """
 *         if token is None:
 *             errors.raise_configs_token_error(             # <<<<<<<<<<<<<<
 *                 self._cls(), "Namespace `token` cannot be None."
 *             )
*/
    __pyx_t_3.__pyx_n = 2;
    __pyx_t_3.cls = __pyx_t_2;
    __pyx_t_3.error_msg = __pyx_mstate_global->__pyx_kp_u_Namespace_token_cannot_be_None;
    __pyx_f_7cytimes_6errors_raise_configs_token_error(0, &__pyx_t_3); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1492, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":1491
 *             the lowercase, uppercase, and titlecase variants of the token.
 *         """
 *         if token is None:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_token_error(
 *                 self._cls(), "Namespace `token` cannot be None."
*/
  }

  /* "cytimes/parser.py":1495
 *                 self._cls(), "Namespace `token` cannot be None."
 *             )
 *         return (token.lower(), token.upper(), token.title())             # <<<<<<<<<<<<<<
 * 
 *     # . value
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__lower, __pyx_v_token); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__upper, __pyx_v_token); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_CallUnboundCMethod0(&__pyx_mstate_global->__pyx_umethod_PyUnicode_Type__title, __pyx_v_token); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1495, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2) != (0)) __PYX_ERR(0, 1495, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_4);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_4) != (0)) __PYX_ERR(0, 1495, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_5);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_5) != (0)) __PYX_ERR(0, 1495, __pyx_L1_error);
  __pyx_t_2 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_r = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1482
 *         return token.lower()
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _gen_token_case_variants(self, token: str) -> tuple[str, str, str]:
*/

  /* 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("cytimes.parser.Configs._gen_token_case_variants", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1498
 * 
 *     # . value
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _ensure_int_value(self, namespace: str, value: object) -> cython.int:
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__ensure_int_value(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5[5];
  PyObject *__pyx_t_6 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error __pyx_t_7;
  int __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_ensure_int_value", 0);

  /* "cytimes/parser.py":1509
 *         :raises `<'InvalidConfigsValue'>`: If the value is not an integer.
 *         """
 *         if not isinstance(value, int):             # <<<<<<<<<<<<<<
 *             errors.raise_configs_value_error(
 *                 self._cls(),
*/
  __pyx_t_1 = PyLong_Check(__pyx_v_value); 
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1511
 *         if not isinstance(value, int):
 *             errors.raise_configs_value_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Value for 'Configs.%s' must be an integer, instead got %s."
 *                 % (namespace, type(value)),
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1513
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer, instead got %s."
 *                 % (namespace, type(value)),             # <<<<<<<<<<<<<<
 *             )
 *         return value
*/
    __pyx_t_4 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_value))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1513, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5[0] = __pyx_mstate_global->__pyx_kp_u_Value_for_Configs;
    __pyx_t_5[1] = __pyx_v_namespace;
    __pyx_t_5[2] = __pyx_mstate_global->__pyx_kp_u_must_be_an_integer_instead_got;
    __pyx_t_5[3] = __pyx_t_4;
    __pyx_t_5[4] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "cytimes/parser.py":1512
 *             errors.raise_configs_value_error(
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer, instead got %s."             # <<<<<<<<<<<<<<
 *                 % (namespace, type(value)),
 *             )
*/
    __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_namespace) + 34 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_namespace) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4));
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1512, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":1510
 *         """
 *         if not isinstance(value, int):
 *             errors.raise_configs_value_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer, instead got %s."
*/
    __pyx_t_7.__pyx_n = 2;
    __pyx_t_7.cls = __pyx_t_3;
    __pyx_t_7.error_msg = ((PyObject*)__pyx_t_6);
    __pyx_f_7cytimes_6errors_raise_configs_value_error(0, &__pyx_t_7); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1510, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

    /* "cytimes/parser.py":1509
 *         :raises `<'InvalidConfigsValue'>`: If the value is not an integer.
 *         """
 *         if not isinstance(value, int):             # <<<<<<<<<<<<<<
 *             errors.raise_configs_value_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1515
 *                 % (namespace, type(value)),
 *             )
 *         return value             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_8 = __Pyx_PyLong_As_int(__pyx_v_value); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1515, __pyx_L1_error)
  __pyx_r = __pyx_t_8;
  goto __pyx_L0;

  /* "cytimes/parser.py":1498
 * 
 *     # . value
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _ensure_int_value(self, namespace: str, value: object) -> cython.int:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.parser.Configs._ensure_int_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1517
 *         return value
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _validate_value(
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_7Configs__validate_value(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v_namespace, int __pyx_v_value, int __pyx_v_minimum, int __pyx_v_maximum) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __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[9];
  PyObject *__pyx_t_8 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_validate_value", 0);

  /* "cytimes/parser.py":1536
 *         :raises `<'InvalidConfigsValue'>`: If the value is out of range.
 *         """
 *         if not minimum <= value <= maximum:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_value_error(
 *                 self._cls(),
*/
  __pyx_t_1 = (__pyx_v_minimum <= __pyx_v_value);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_value <= __pyx_v_maximum);
  }
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1538
 *         if not minimum <= value <= maximum:
 *             errors.raise_configs_value_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Value for 'Configs.%s' must be an integer between %d..%d, instead got %d."
 *                 % (namespace, minimum, maximum, value),
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);

    /* "cytimes/parser.py":1540
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer between %d..%d, instead got %d."
 *                 % (namespace, minimum, maximum, value),             # <<<<<<<<<<<<<<
 *             )
 *         return value
*/
    __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_minimum, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyUnicode_From_int(__pyx_v_maximum, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_value, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1540, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7[0] = __pyx_mstate_global->__pyx_kp_u_Value_for_Configs;
    __pyx_t_7[1] = __pyx_v_namespace;
    __pyx_t_7[2] = __pyx_mstate_global->__pyx_kp_u_must_be_an_integer_between;
    __pyx_t_7[3] = __pyx_t_4;
    __pyx_t_7[4] = __pyx_mstate_global->__pyx_kp_u__14;
    __pyx_t_7[5] = __pyx_t_5;
    __pyx_t_7[6] = __pyx_mstate_global->__pyx_kp_u_instead_got;
    __pyx_t_7[7] = __pyx_t_6;
    __pyx_t_7[8] = __pyx_mstate_global->__pyx_kp_u__2;

    /* "cytimes/parser.py":1539
 *             errors.raise_configs_value_error(
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer between %d..%d, instead got %d."             # <<<<<<<<<<<<<<
 *                 % (namespace, minimum, maximum, value),
 *             )
*/
    __pyx_t_8 = __Pyx_PyUnicode_Join(__pyx_t_7, 9, 19 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_namespace) + 29 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 14 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_namespace));
    if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1539, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __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;

    /* "cytimes/parser.py":1537
 *         """
 *         if not minimum <= value <= maximum:
 *             errors.raise_configs_value_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Value for 'Configs.%s' must be an integer between %d..%d, instead got %d."
*/
    __pyx_t_9.__pyx_n = 2;
    __pyx_t_9.cls = __pyx_t_3;
    __pyx_t_9.error_msg = ((PyObject*)__pyx_t_8);
    __pyx_f_7cytimes_6errors_raise_configs_value_error(0, &__pyx_t_9); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1537, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "cytimes/parser.py":1536
 *         :raises `<'InvalidConfigsValue'>`: If the value is out of range.
 *         """
 *         if not minimum <= value <= maximum:             # <<<<<<<<<<<<<<
 *             errors.raise_configs_value_error(
 *                 self._cls(),
*/
  }

  /* "cytimes/parser.py":1542
 *                 % (namespace, minimum, maximum, value),
 *             )
 *         return value             # <<<<<<<<<<<<<<
 * 
 *     # . class
*/
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;

  /* "cytimes/parser.py":1517
 *         return value
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _validate_value(
*/

  /* 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_8);
  __Pyx_AddTraceback("cytimes.parser.Configs._validate_value", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1545
 * 
 *     # . class
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _cls(self) -> object:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_7Configs__cls(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self) {
  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("_cls", 0);

  /* "cytimes/parser.py":1549
 *     def _cls(self) -> object:
 *         """(internal) Access the class object of the current instance `<'type[Configs]'>`."""
 *         if self.__cls is None:             # <<<<<<<<<<<<<<
 *             self.__cls = self.__class__
 *         return self.__cls
*/
  __pyx_t_1 = (__pyx_v_self->_Configs__cls == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1550
 *         """(internal) Access the class object of the current instance `<'type[Configs]'>`."""
 *         if self.__cls is None:
 *             self.__cls = self.__class__             # <<<<<<<<<<<<<<
 *         return self.__cls
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1550, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_Configs__cls);
    __Pyx_DECREF(__pyx_v_self->_Configs__cls);
    __pyx_v_self->_Configs__cls = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":1549
 *     def _cls(self) -> object:
 *         """(internal) Access the class object of the current instance `<'type[Configs]'>`."""
 *         if self.__cls is None:             # <<<<<<<<<<<<<<
 *             self.__cls = self.__class__
 *         return self.__cls
*/
  }

  /* "cytimes/parser.py":1551
 *         if self.__cls is None:
 *             self.__cls = self.__class__
 *         return self.__cls             # <<<<<<<<<<<<<<
 * 
 *     # Special methods -------------------------------------------------
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_Configs__cls);
  __pyx_r = __pyx_v_self->_Configs__cls;
  goto __pyx_L0;

  /* "cytimes/parser.py":1545
 * 
 *     # . class
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _cls(self) -> object:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Configs._cls", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1554
 * 
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:             # <<<<<<<<<<<<<<
 *         return (
 *             "<'%s' (%s: yearfirst=%s dayfirst=%s | "
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_85__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_85__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_7cytimes_6parser_7Configs_84__repr__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_84__repr__(struct __pyx_obj_7cytimes_6parser_Configs *__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;
  Py_ssize_t __pyx_t_6;
  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[25];
  PyObject *__pyx_t_15 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "cytimes/parser.py":1555
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:
 *         return (             # <<<<<<<<<<<<<<
 *             "<'%s' (%s: yearfirst=%s dayfirst=%s | "
 *             "sizes: jump=%d pertain=%d utc=%d tz=%d month=%d weekday=%d hms=%d ampm=%d)>"
*/
  __Pyx_XDECREF(__pyx_r);

  /* "cytimes/parser.py":1559
 *             "sizes: jump=%d pertain=%d utc=%d tz=%d month=%d weekday=%d hms=%d ampm=%d)>"
 *             % (
 *                 self._cls().__name__,             # <<<<<<<<<<<<<<
 *                 self.order_hint(),
 *                 self._yearfirst,
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_7Configs__cls(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_t_2), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1560
 *             % (
 *                 self._cls().__name__,
 *                 self.order_hint(),             # <<<<<<<<<<<<<<
 *                 self._yearfirst,
 *                 self._dayfirst,
*/
  __pyx_t_2 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->__pyx_vtab)->order_hint(__pyx_v_self, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyUnicode_Unicode(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1561
 *                 self._cls().__name__,
 *                 self.order_hint(),
 *                 self._yearfirst,             # <<<<<<<<<<<<<<
 *                 self._dayfirst,
 *                 set_len(self._jump),
*/
  __pyx_t_2 = __Pyx_PyUnicode_FromBInt_bint(__pyx_v_self->_yearfirst); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1561, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);

  /* "cytimes/parser.py":1562
 *                 self.order_hint(),
 *                 self._yearfirst,
 *                 self._dayfirst,             # <<<<<<<<<<<<<<
 *                 set_len(self._jump),
 *                 set_len(self._pertain),
*/
  __pyx_t_4 = __Pyx_PyUnicode_FromBInt_bint(__pyx_v_self->_dayfirst); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "cytimes/parser.py":1563
 *                 self._yearfirst,
 *                 self._dayfirst,
 *                 set_len(self._jump),             # <<<<<<<<<<<<<<
 *                 set_len(self._pertain),
 *                 set_len(self._utc),
*/
  __pyx_t_5 = __pyx_v_self->_jump;
  __Pyx_INCREF(__pyx_t_5);
  __pyx_t_6 = PySet_Size(__pyx_t_5); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1563, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "cytimes/parser.py":1564
 *                 self._dayfirst,
 *                 set_len(self._jump),
 *                 set_len(self._pertain),             # <<<<<<<<<<<<<<
 *                 set_len(self._utc),
 *                 dict_len(self._tz),
*/
  __pyx_t_7 = __pyx_v_self->_pertain;
  __Pyx_INCREF(__pyx_t_7);
  __pyx_t_6 = PySet_Size(__pyx_t_7); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1564, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1564, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);

  /* "cytimes/parser.py":1565
 *                 set_len(self._jump),
 *                 set_len(self._pertain),
 *                 set_len(self._utc),             # <<<<<<<<<<<<<<
 *                 dict_len(self._tz),
 *                 dict_len(self._month),
*/
  __pyx_t_8 = __pyx_v_self->_utc;
  __Pyx_INCREF(__pyx_t_8);
  __pyx_t_6 = PySet_Size(__pyx_t_8); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1565, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);

  /* "cytimes/parser.py":1566
 *                 set_len(self._pertain),
 *                 set_len(self._utc),
 *                 dict_len(self._tz),             # <<<<<<<<<<<<<<
 *                 dict_len(self._month),
 *                 dict_len(self._weekday),
*/
  __pyx_t_9 = __pyx_v_self->_tz;
  __Pyx_INCREF(__pyx_t_9);
  __pyx_t_6 = PyDict_Size(__pyx_t_9); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);

  /* "cytimes/parser.py":1567
 *                 set_len(self._utc),
 *                 dict_len(self._tz),
 *                 dict_len(self._month),             # <<<<<<<<<<<<<<
 *                 dict_len(self._weekday),
 *                 dict_len(self._hms),
*/
  __pyx_t_10 = __pyx_v_self->_month;
  __Pyx_INCREF(__pyx_t_10);
  __pyx_t_6 = PyDict_Size(__pyx_t_10); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1567, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_10 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1567, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);

  /* "cytimes/parser.py":1568
 *                 dict_len(self._tz),
 *                 dict_len(self._month),
 *                 dict_len(self._weekday),             # <<<<<<<<<<<<<<
 *                 dict_len(self._hms),
 *                 dict_len(self._ampm),
*/
  __pyx_t_11 = __pyx_v_self->_weekday;
  __Pyx_INCREF(__pyx_t_11);
  __pyx_t_6 = PyDict_Size(__pyx_t_11); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1568, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1568, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);

  /* "cytimes/parser.py":1569
 *                 dict_len(self._month),
 *                 dict_len(self._weekday),
 *                 dict_len(self._hms),             # <<<<<<<<<<<<<<
 *                 dict_len(self._ampm),
 *             )
*/
  __pyx_t_12 = __pyx_v_self->_hms;
  __Pyx_INCREF(__pyx_t_12);
  __pyx_t_6 = PyDict_Size(__pyx_t_12); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1569, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
  __pyx_t_12 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1569, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);

  /* "cytimes/parser.py":1570
 *                 dict_len(self._weekday),
 *                 dict_len(self._hms),
 *                 dict_len(self._ampm),             # <<<<<<<<<<<<<<
 *             )
 *         )
*/
  __pyx_t_13 = __pyx_v_self->_ampm;
  __Pyx_INCREF(__pyx_t_13);
  __pyx_t_6 = PyDict_Size(__pyx_t_13); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 1570, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
  __pyx_t_13 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_t_6, 0, ' ', 'd'); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1570, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14[0] = __pyx_mstate_global->__pyx_kp_u__15;
  __pyx_t_14[1] = __pyx_t_1;
  __pyx_t_14[2] = __pyx_mstate_global->__pyx_kp_u__16;
  __pyx_t_14[3] = __pyx_t_3;
  __pyx_t_14[4] = __pyx_mstate_global->__pyx_kp_u_yearfirst_2;
  __pyx_t_14[5] = __pyx_t_2;
  __pyx_t_14[6] = __pyx_mstate_global->__pyx_kp_u_dayfirst_2;
  __pyx_t_14[7] = __pyx_t_4;
  __pyx_t_14[8] = __pyx_mstate_global->__pyx_kp_u_sizes_jump;
  __pyx_t_14[9] = __pyx_t_5;
  __pyx_t_14[10] = __pyx_mstate_global->__pyx_kp_u_pertain_2;
  __pyx_t_14[11] = __pyx_t_7;
  __pyx_t_14[12] = __pyx_mstate_global->__pyx_kp_u_utc_2;
  __pyx_t_14[13] = __pyx_t_8;
  __pyx_t_14[14] = __pyx_mstate_global->__pyx_kp_u_tz_2;
  __pyx_t_14[15] = __pyx_t_9;
  __pyx_t_14[16] = __pyx_mstate_global->__pyx_kp_u_month_2;
  __pyx_t_14[17] = __pyx_t_10;
  __pyx_t_14[18] = __pyx_mstate_global->__pyx_kp_u_weekday_2;
  __pyx_t_14[19] = __pyx_t_11;
  __pyx_t_14[20] = __pyx_mstate_global->__pyx_kp_u_hms_2;
  __pyx_t_14[21] = __pyx_t_12;
  __pyx_t_14[22] = __pyx_mstate_global->__pyx_kp_u_ampm_2;
  __pyx_t_14[23] = __pyx_t_13;
  __pyx_t_14[24] = __pyx_mstate_global->__pyx_kp_u__17;

  /* "cytimes/parser.py":1556
 *     def __repr__(self) -> str:
 *         return (
 *             "<'%s' (%s: yearfirst=%s dayfirst=%s | "             # <<<<<<<<<<<<<<
 *             "sizes: jump=%d pertain=%d utc=%d tz=%d month=%d weekday=%d hms=%d ampm=%d)>"
 *             % (
*/
  __pyx_t_15 = __Pyx_PyUnicode_Join(__pyx_t_14, 25, 2 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 10 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4) + 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5) + 9 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7) + 5 * 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 4 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_9) + 7 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12) + 6 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_13), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
  if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_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_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_r = __pyx_t_15;
  __pyx_t_15 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":1554
 * 
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:             # <<<<<<<<<<<<<<
 *         return (
 *             "<'%s' (%s: yearfirst=%s dayfirst=%s | "
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_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_15);
  __Pyx_AddTraceback("cytimes.parser.Configs.__repr__", __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):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_87__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_7cytimes_6parser_7Configs_87__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_87__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_87__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_7cytimes_6parser_7Configs_86__reduce_cython__(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_7Configs_86__reduce_cython__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self._Configs__cls, self._ampm, self._ampm_ext, self._dayfirst, self._hms, self._hms_ext, self._jump, self._jump_ext, self._month, self._month_ext, self._pertain, self._pertain_ext, self._tz, self._tz_ext, self._utc, self._utc_ext, self._weekday, self._weekday_ext, self._yearfirst)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_dayfirst); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->_yearfirst); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(19); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_INCREF(__pyx_v_self->_Configs__cls);
  __Pyx_GIVEREF(__pyx_v_self->_Configs__cls);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_self->_Configs__cls) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_ampm);
  __Pyx_GIVEREF(__pyx_v_self->_ampm);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_self->_ampm) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_ampm_ext);
  __Pyx_GIVEREF(__pyx_v_self->_ampm_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_self->_ampm_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_1) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_hms);
  __Pyx_GIVEREF(__pyx_v_self->_hms);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 4, __pyx_v_self->_hms) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_hms_ext);
  __Pyx_GIVEREF(__pyx_v_self->_hms_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_v_self->_hms_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_jump);
  __Pyx_GIVEREF(__pyx_v_self->_jump);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 6, __pyx_v_self->_jump) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_jump_ext);
  __Pyx_GIVEREF(__pyx_v_self->_jump_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 7, __pyx_v_self->_jump_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_month);
  __Pyx_GIVEREF(__pyx_v_self->_month);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 8, __pyx_v_self->_month) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_month_ext);
  __Pyx_GIVEREF(__pyx_v_self->_month_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 9, __pyx_v_self->_month_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_pertain);
  __Pyx_GIVEREF(__pyx_v_self->_pertain);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 10, __pyx_v_self->_pertain) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_pertain_ext);
  __Pyx_GIVEREF(__pyx_v_self->_pertain_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 11, __pyx_v_self->_pertain_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_tz);
  __Pyx_GIVEREF(__pyx_v_self->_tz);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 12, __pyx_v_self->_tz) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_tz_ext);
  __Pyx_GIVEREF(__pyx_v_self->_tz_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 13, __pyx_v_self->_tz_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_utc);
  __Pyx_GIVEREF(__pyx_v_self->_utc);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 14, __pyx_v_self->_utc) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_utc_ext);
  __Pyx_GIVEREF(__pyx_v_self->_utc_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 15, __pyx_v_self->_utc_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_weekday);
  __Pyx_GIVEREF(__pyx_v_self->_weekday);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 16, __pyx_v_self->_weekday) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_weekday_ext);
  __Pyx_GIVEREF(__pyx_v_self->_weekday_ext);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 17, __pyx_v_self->_weekday_ext) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 18, __pyx_t_2) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self._Configs__cls, self._ampm, self._ampm_ext, self._dayfirst, self._hms, self._hms_ext, self._jump, self._jump_ext, self._month, self._month_ext, self._pertain, self._pertain_ext, self._tz, self._tz_ext, self._utc, self._utc_ext, self._weekday, self._weekday_ext, self._yearfirst)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_3 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_dict, Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v__dict = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":7
 *     state = (self._Configs__cls, self._ampm, self._ampm_ext, self._dayfirst, self._hms, self._hms_ext, self._jump, self._jump_ext, self._month, self._month_ext, self._pertain, self._pertain_ext, self._tz, self._tz_ext, self._utc, self._utc_ext, self._weekday, self._weekday_ext, self._yearfirst)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_5 = (__pyx_v__dict != Py_None);
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_5 < 0))) __PYX_ERR(7, 7, __pyx_L1_error)
  __pyx_t_4 = __pyx_t_5;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_4) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
*/
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__dict) != (0)) __PYX_ERR(7, 8, __pyx_L1_error);
    __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)
*/
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self._Configs__cls, self._ampm, self._ampm_ext, self._dayfirst, self._hms, self._hms_ext, self._jump, self._jump_ext, self._month, self._month_ext, self._pertain, self._pertain_ext, self._tz, self._tz_ext, self._utc, self._utc_ext, self._weekday, self._weekday_ext, self._yearfirst)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state
*/
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[0]); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_4;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Configs); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_31358320);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_31358320);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_mstate_global->__pyx_int_31358320) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, Py_None) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_2);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __pyx_t_2 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state
 *     else:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Configs__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Configs); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_31358320);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_31358320);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_mstate_global->__pyx_int_31358320) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_v_state) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_1);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __pyx_t_1 = 0;
    __pyx_t_3 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Configs.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Configs__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_89__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_7cytimes_6parser_7Configs_89__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_89__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_7Configs_89__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
) {
  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(7, 16, __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, 16, __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(7, 16, __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(7, 16, __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, 16, __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(7, 16, __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("cytimes.parser.Configs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7cytimes_6parser_7Configs_88__setstate_cython__(((struct __pyx_obj_7cytimes_6parser_Configs *)__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_7cytimes_6parser_7Configs_88__setstate_cython__(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Configs__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(7, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(7, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_7cytimes_6parser___pyx_unpickle_Configs__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Configs__set_state(self, __pyx_state)
*/

  /* 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("cytimes.parser.Configs.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1621
 *     century_specified: cython.bint
 * 
 *     def __cinit__(self) -> None:             # <<<<<<<<<<<<<<
 *         """The datetime result from the Parser."""
 *         self._reset()
*/

/* Python wrapper */
static int __pyx_pw_7cytimes_6parser_6Result_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_7cytimes_6parser_6Result_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_7cytimes_6parser_6Result___cinit__(((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_v_self));

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

static int __pyx_pf_7cytimes_6parser_6Result___cinit__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":1623
 *     def __cinit__(self) -> None:
 *         """The datetime result from the Parser."""
 *         self._reset()             # <<<<<<<<<<<<<<
 * 
 *     # Y/M/D -----------------------------------------------------------
*/
  (void)(__pyx_f_7cytimes_6parser_6Result__reset(__pyx_v_self));

  /* "cytimes/parser.py":1621
 *     century_specified: cython.bint
 * 
 *     def __cinit__(self) -> None:             # <<<<<<<<<<<<<<
 *         """The datetime result from the Parser."""
 *         self._reset()
*/

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

/* "cytimes/parser.py":1626
 * 
 *     # Y/M/D -----------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_int(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, PY_LONG_LONG __pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __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;
  size_t __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_ymd_int", 0);

  /* "cytimes/parser.py":1652
 *         """
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_idx >= 2);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1653
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Range check
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1652
 *         """
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1656
 * 
 *         # Range check
 *         if not 0 <= value <= 9_999:             # <<<<<<<<<<<<<<
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)
 * 
*/
  __pyx_t_1 = (0 <= __pyx_v_value);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_value <= 0x270F);
  }
  __pyx_t_2 = (!__pyx_t_1);
  if (unlikely(__pyx_t_2)) {

    /* "cytimes/parser.py":1657
 *         # Range check
 *         if not 0 <= value <= 9_999:
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)             # <<<<<<<<<<<<<<
 * 
 *         # Unknown flag
*/
    __pyx_t_4 = NULL;
    __pyx_t_5 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_Y_M_D_value_d_must_be_in, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1657, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1657, __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(0, 1657, __pyx_L1_error)

    /* "cytimes/parser.py":1656
 * 
 *         # Range check
 *         if not 0 <= value <= 9_999:             # <<<<<<<<<<<<<<
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)
 * 
*/
  }

  /* "cytimes/parser.py":1660
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             # . definitely a year
 *             if value > 31:
*/
  switch (__pyx_v_flag) {
    case 0:

    /* "cytimes/parser.py":1662
 *         if flag == 0:
 *             # . definitely a year
 *             if value > 31:             # <<<<<<<<<<<<<<
 *                 if value > 99 and not self.is_year_set():
 *                     self.century_specified = True
*/
    __pyx_t_2 = (__pyx_v_value > 31);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1663
 *             # . definitely a year
 *             if value > 31:
 *                 if value > 99 and not self.is_year_set():             # <<<<<<<<<<<<<<
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR
*/
      __pyx_t_1 = (__pyx_v_value > 99);
      if (__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_1 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self));
      __pyx_t_2 = __pyx_t_1;
      __pyx_L7_bool_binop_done:;
      if (__pyx_t_2) {

        /* "cytimes/parser.py":1664
 *             if value > 31:
 *                 if value > 99 and not self.is_year_set():
 *                     self.century_specified = True             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
*/
        __pyx_v_self->century_specified = 1;

        /* "cytimes/parser.py":1663
 *             # . definitely a year
 *             if value > 31:
 *                 if value > 99 and not self.is_year_set():             # <<<<<<<<<<<<<<
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR
*/
      }

      /* "cytimes/parser.py":1665
 *                 if value > 99 and not self.is_year_set():
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR             # <<<<<<<<<<<<<<
 *             # . definitely a year (0)
 *             elif value == 0:
*/
      __pyx_v_flag = 1;

      /* "cytimes/parser.py":1662
 *         if flag == 0:
 *             # . definitely a year
 *             if value > 31:             # <<<<<<<<<<<<<<
 *                 if value > 99 and not self.is_year_set():
 *                     self.century_specified = True
*/
      goto __pyx_L5;
    }

    /* "cytimes/parser.py":1667
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
 *             elif value == 0:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 * 
*/
    __pyx_t_2 = (__pyx_v_value == 0);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1668
 *             # . definitely a year (0)
 *             elif value == 0:
 *                 flag = 1  # set to YEAR             # <<<<<<<<<<<<<<
 * 
 *         # YEAR flag
*/
      __pyx_v_flag = 1;

      /* "cytimes/parser.py":1667
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
 *             elif value == 0:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 * 
*/
    }
    __pyx_L5:;

    /* "cytimes/parser.py":1660
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             # . definitely a year
 *             if value > 31:
*/
    break;
    case 1:

    /* "cytimes/parser.py":1672
 *         # YEAR flag
 *         elif flag == 1:
 *             if value > 99 and not self.is_year_set():             # <<<<<<<<<<<<<<
 *                 self.century_specified = True
 * 
*/
    __pyx_t_1 = (__pyx_v_value > 99);
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_1 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self));
    __pyx_t_2 = __pyx_t_1;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1673
 *         elif flag == 1:
 *             if value > 99 and not self.is_year_set():
 *                 self.century_specified = True             # <<<<<<<<<<<<<<
 * 
 *         # MONTH flag
*/
      __pyx_v_self->century_specified = 1;

      /* "cytimes/parser.py":1672
 *         # YEAR flag
 *         elif flag == 1:
 *             if value > 99 and not self.is_year_set():             # <<<<<<<<<<<<<<
 *                 self.century_specified = True
 * 
*/
    }

    /* "cytimes/parser.py":1671
 * 
 *         # YEAR flag
 *         elif flag == 1:             # <<<<<<<<<<<<<<
 *             if value > 99 and not self.is_year_set():
 *                 self.century_specified = True
*/
    break;
    case 2:

    /* "cytimes/parser.py":1677
 *         # MONTH flag
 *         elif flag == 2:
 *             if not 1 <= value <= 12:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
 * 
*/
    __pyx_t_2 = (1 <= __pyx_v_value);
    if (__pyx_t_2) {
      __pyx_t_2 = (__pyx_v_value <= 12);
    }
    __pyx_t_1 = (!__pyx_t_2);
    if (unlikely(__pyx_t_1)) {

      /* "cytimes/parser.py":1678
 *         elif flag == 2:
 *             if not 1 <= value <= 12:
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)             # <<<<<<<<<<<<<<
 * 
 *         # DAY flag
*/
      __pyx_t_6 = NULL;
      __pyx_t_4 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_month_value_d_must_be_in, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1678, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_5};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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_3)) __PYX_ERR(0, 1678, __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(0, 1678, __pyx_L1_error)

      /* "cytimes/parser.py":1677
 *         # MONTH flag
 *         elif flag == 2:
 *             if not 1 <= value <= 12:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
 * 
*/
    }

    /* "cytimes/parser.py":1676
 * 
 *         # MONTH flag
 *         elif flag == 2:             # <<<<<<<<<<<<<<
 *             if not 1 <= value <= 12:
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
*/
    break;
    case 3:

    /* "cytimes/parser.py":1682
 *         # DAY flag
 *         elif flag == 3:
 *             if not 1 <= value <= 31:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
 * 
*/
    __pyx_t_1 = (1 <= __pyx_v_value);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_value <= 31);
    }
    __pyx_t_2 = (!__pyx_t_1);
    if (unlikely(__pyx_t_2)) {

      /* "cytimes/parser.py":1683
 *         elif flag == 3:
 *             if not 1 <= value <= 31:
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)             # <<<<<<<<<<<<<<
 * 
 *         # Invalid flag
*/
      __pyx_t_5 = NULL;
      __pyx_t_6 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_4 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_day_value_d_must_be_in_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1683, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_4};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__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_3)) __PYX_ERR(0, 1683, __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(0, 1683, __pyx_L1_error)

      /* "cytimes/parser.py":1682
 *         # DAY flag
 *         elif flag == 3:
 *             if not 1 <= value <= 31:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
 * 
*/
    }

    /* "cytimes/parser.py":1681
 * 
 *         # DAY flag
 *         elif flag == 3:             # <<<<<<<<<<<<<<
 *             if not 1 <= value <= 31:
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
*/
    break;
    default:

    /* "cytimes/parser.py":1687
 *         # Invalid flag
 *         else:
 *             raise AssertionError(             # <<<<<<<<<<<<<<
 *                 "Invalid Y/M/D flag value '%d', must be in 0..2" % flag
 *             )
*/
    __pyx_t_4 = NULL;

    /* "cytimes/parser.py":1688
 *         else:
 *             raise AssertionError(
 *                 "Invalid Y/M/D flag value '%d', must be in 0..2" % flag             # <<<<<<<<<<<<<<
 *             )
 * 
*/
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_Y_M_D_flag_value_d_must, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1688, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_t_6};
      __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1687, __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(0, 1687, __pyx_L1_error)
    break;
  }

  /* "cytimes/parser.py":1692
 * 
 *         # Record Y/M/D value
 *         return self._record_ymd(flag, value)             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = __pyx_f_7cytimes_6parser_6Result__record_ymd(__pyx_v_self, __pyx_v_flag, __pyx_v_value);
  goto __pyx_L0;

  /* "cytimes/parser.py":1626
 * 
 *     # Y/M/D -----------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* 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_AddTraceback("cytimes.parser.Result.set_ymd_int", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1694
 *         return self._record_ymd(flag, value)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_set_ymd_str(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, PyObject *__pyx_v_token, struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str *__pyx_optional_args) {
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  unsigned PY_LONG_LONG __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  size_t __pyx_t_7;
  unsigned PY_LONG_LONG __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_ymd_str", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token_len = __pyx_optional_args->token_len;
    }
  }

  /* "cytimes/parser.py":1732
 *         """
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_idx >= 2);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1733
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Parse to value integer
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1732
 *         """
 *         # Full: 3 slots already set (idx is 0-based)
 *         if self._idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1736
 * 
 *         # Parse to value integer
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if not utils.is_str_ascii_digits(token, token_len):
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1737
 *         # Parse to value integer
 *         if token_len <= 0:
 *             token_len = str_len(token)             # <<<<<<<<<<<<<<
 *         if not utils.is_str_ascii_digits(token, token_len):
 *             raise ValueError(
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "cytimes/parser.py":1736
 * 
 *         # Parse to value integer
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if not utils.is_str_ascii_digits(token, token_len):
*/
  }

  /* "cytimes/parser.py":1738
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if not utils.is_str_ascii_digits(token, token_len):             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 "Invalid Y/M/D value '%s', cannot be converted to an integer" % token
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.token_len = __pyx_v_token_len;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_digits(__pyx_v_token, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1738, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);
  if (unlikely(__pyx_t_3)) {

    /* "cytimes/parser.py":1739
 *             token_len = str_len(token)
 *         if not utils.is_str_ascii_digits(token, token_len):
 *             raise ValueError(             # <<<<<<<<<<<<<<
 *                 "Invalid Y/M/D value '%s', cannot be converted to an integer" % token
 *             )
*/
    __pyx_t_5 = NULL;

    /* "cytimes/parser.py":1740
 *         if not utils.is_str_ascii_digits(token, token_len):
 *             raise ValueError(
 *                 "Invalid Y/M/D value '%s', cannot be converted to an integer" % token             # <<<<<<<<<<<<<<
 *             )
 *         value: cython.ulonglong = utils.slice_to_uint(token, 0, token_len, token_len)
*/
    __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_Y_M_D_value_s_cannot_be, __pyx_v_token); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1740, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__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_4)) __PYX_ERR(0, 1739, __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(0, 1739, __pyx_L1_error)

    /* "cytimes/parser.py":1738
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if not utils.is_str_ascii_digits(token, token_len):             # <<<<<<<<<<<<<<
 *             raise ValueError(
 *                 "Invalid Y/M/D value '%s', cannot be converted to an integer" % token
*/
  }

  /* "cytimes/parser.py":1742
 *                 "Invalid Y/M/D value '%s', cannot be converted to an integer" % token
 *             )
 *         value: cython.ulonglong = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 * 
 *         # Range check
*/
  __pyx_t_9.__pyx_n = 1;
  __pyx_t_9.token_len = __pyx_v_token_len;
  __pyx_t_8 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 1742, __pyx_L1_error)
  __pyx_v_value = __pyx_t_8;

  /* "cytimes/parser.py":1745
 * 
 *         # Range check
 *         if value > 9_999:             # <<<<<<<<<<<<<<
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)
 * 
*/
  __pyx_t_3 = (__pyx_v_value > 0x270F);
  if (unlikely(__pyx_t_3)) {

    /* "cytimes/parser.py":1746
 *         # Range check
 *         if value > 9_999:
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)             # <<<<<<<<<<<<<<
 * 
 *         # Unknown flag
*/
    __pyx_t_6 = NULL;
    __pyx_t_5 = __Pyx_PyLong_From_unsigned_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_Y_M_D_value_d_must_be_in, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1746, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1746, __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(0, 1746, __pyx_L1_error)

    /* "cytimes/parser.py":1745
 * 
 *         # Range check
 *         if value > 9_999:             # <<<<<<<<<<<<<<
 *             raise ValueError("Invalid Y/M/D value '%d', must be in 0..9999." % value)
 * 
*/
  }

  /* "cytimes/parser.py":1749
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:
*/
  switch (__pyx_v_flag) {
    case 0:

    /* "cytimes/parser.py":1751
 *         if flag == 0:
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:             # <<<<<<<<<<<<<<
 *                 if not self.is_year_set():
 *                     self.century_specified = True
*/
    __pyx_t_3 = (__pyx_v_token_len > 2);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":1752
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:
 *                 if not self.is_year_set():             # <<<<<<<<<<<<<<
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR
*/
      __pyx_t_3 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self));
      if (__pyx_t_3) {

        /* "cytimes/parser.py":1753
 *             if token_len > 2:
 *                 if not self.is_year_set():
 *                     self.century_specified = True             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (100..9999)
*/
        __pyx_v_self->century_specified = 1;

        /* "cytimes/parser.py":1752
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:
 *                 if not self.is_year_set():             # <<<<<<<<<<<<<<
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR
*/
      }

      /* "cytimes/parser.py":1754
 *                 if not self.is_year_set():
 *                     self.century_specified = True
 *                 flag = 1  # set to YEAR             # <<<<<<<<<<<<<<
 *             # . definitely a year (100..9999)
 *             elif value > 31:
*/
      __pyx_v_flag = 1;

      /* "cytimes/parser.py":1751
 *         if flag == 0:
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:             # <<<<<<<<<<<<<<
 *                 if not self.is_year_set():
 *                     self.century_specified = True
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1756
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (100..9999)
 *             elif value > 31:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
*/
    __pyx_t_3 = (__pyx_v_value > 31);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":1757
 *             # . definitely a year (100..9999)
 *             elif value > 31:
 *                 flag = 1  # set to YEAR             # <<<<<<<<<<<<<<
 *             # . definitely a year (0)
 *             elif value == 0:
*/
      __pyx_v_flag = 1;

      /* "cytimes/parser.py":1756
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (100..9999)
 *             elif value > 31:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1759
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
 *             elif value == 0:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 * 
*/
    __pyx_t_3 = (__pyx_v_value == 0);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":1760
 *             # . definitely a year (0)
 *             elif value == 0:
 *                 flag = 1  # set to YEAR             # <<<<<<<<<<<<<<
 * 
 *         # YEAR flag
*/
      __pyx_v_flag = 1;

      /* "cytimes/parser.py":1759
 *                 flag = 1  # set to YEAR
 *             # . definitely a year (0)
 *             elif value == 0:             # <<<<<<<<<<<<<<
 *                 flag = 1  # set to YEAR
 * 
*/
    }
    __pyx_L7:;

    /* "cytimes/parser.py":1749
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             # . definitely a year (length > 2: '0001')
 *             if token_len > 2:
*/
    break;
    case 1:

    /* "cytimes/parser.py":1764
 *         # YEAR flag
 *         elif flag == 1:
 *             if token_len > 2 and not self.is_year_set():  # e.g '0001'             # <<<<<<<<<<<<<<
 *                 self.century_specified = True
 * 
*/
    __pyx_t_1 = (__pyx_v_token_len > 2);
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_1 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self));
    __pyx_t_3 = __pyx_t_1;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_3) {

      /* "cytimes/parser.py":1765
 *         elif flag == 1:
 *             if token_len > 2 and not self.is_year_set():  # e.g '0001'
 *                 self.century_specified = True             # <<<<<<<<<<<<<<
 * 
 *         # MONTH flag
*/
      __pyx_v_self->century_specified = 1;

      /* "cytimes/parser.py":1764
 *         # YEAR flag
 *         elif flag == 1:
 *             if token_len > 2 and not self.is_year_set():  # e.g '0001'             # <<<<<<<<<<<<<<
 *                 self.century_specified = True
 * 
*/
    }

    /* "cytimes/parser.py":1763
 * 
 *         # YEAR flag
 *         elif flag == 1:             # <<<<<<<<<<<<<<
 *             if token_len > 2 and not self.is_year_set():  # e.g '0001'
 *                 self.century_specified = True
*/
    break;
    case 2:

    /* "cytimes/parser.py":1769
 *         # MONTH flag
 *         elif flag == 2:
 *             if not 1 <= value <= 12:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
 * 
*/
    __pyx_t_3 = (1 <= __pyx_v_value);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_value <= 12);
    }
    __pyx_t_1 = (!__pyx_t_3);
    if (unlikely(__pyx_t_1)) {

      /* "cytimes/parser.py":1770
 *         elif flag == 2:
 *             if not 1 <= value <= 12:
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)             # <<<<<<<<<<<<<<
 * 
 *         # DAY flag
*/
      __pyx_t_10 = NULL;
      __pyx_t_6 = __Pyx_PyLong_From_unsigned_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_t_5 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_month_value_d_must_be_in, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1770, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_5};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1770, __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(0, 1770, __pyx_L1_error)

      /* "cytimes/parser.py":1769
 *         # MONTH flag
 *         elif flag == 2:
 *             if not 1 <= value <= 12:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
 * 
*/
    }

    /* "cytimes/parser.py":1768
 * 
 *         # MONTH flag
 *         elif flag == 2:             # <<<<<<<<<<<<<<
 *             if not 1 <= value <= 12:
 *                 raise ValueError("Invalid month value '%d', must be in 1..12." % value)
*/
    break;
    case 3:

    /* "cytimes/parser.py":1774
 *         # DAY flag
 *         elif flag == 3:
 *             if not 1 <= value <= 31:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
 * 
*/
    __pyx_t_1 = (1 <= __pyx_v_value);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_value <= 31);
    }
    __pyx_t_3 = (!__pyx_t_1);
    if (unlikely(__pyx_t_3)) {

      /* "cytimes/parser.py":1775
 *         elif flag == 3:
 *             if not 1 <= value <= 31:
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)             # <<<<<<<<<<<<<<
 * 
 *         # Invalid flag
*/
      __pyx_t_5 = NULL;
      __pyx_t_10 = __Pyx_PyLong_From_unsigned_PY_LONG_LONG(__pyx_v_value); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_6 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_day_value_d_must_be_in_1, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1775, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_7 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_6};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_7, (2-__pyx_t_7) | (__pyx_t_7*__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_4)) __PYX_ERR(0, 1775, __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(0, 1775, __pyx_L1_error)

      /* "cytimes/parser.py":1774
 *         # DAY flag
 *         elif flag == 3:
 *             if not 1 <= value <= 31:             # <<<<<<<<<<<<<<
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
 * 
*/
    }

    /* "cytimes/parser.py":1773
 * 
 *         # DAY flag
 *         elif flag == 3:             # <<<<<<<<<<<<<<
 *             if not 1 <= value <= 31:
 *                 raise ValueError("Invalid day value '%d', must be in 1..31." % value)
*/
    break;
    default:

    /* "cytimes/parser.py":1779
 *         # Invalid flag
 *         else:
 *             raise AssertionError(             # <<<<<<<<<<<<<<
 *                 "Invalid Y/M/D flag value '%d', must be in 0..2" % flag
 *             )
*/
    __pyx_t_6 = NULL;

    /* "cytimes/parser.py":1780
 *         else:
 *             raise AssertionError(
 *                 "Invalid Y/M/D flag value '%d', must be in 0..2" % flag             # <<<<<<<<<<<<<<
 *             )
 * 
*/
    __pyx_t_5 = __Pyx_PyLong_From_int(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_10 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_Y_M_D_flag_value_d_must, __pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1780, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_t_10};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_AssertionError)), __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_10); __pyx_t_10 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1779, __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(0, 1779, __pyx_L1_error)
    break;
  }

  /* "cytimes/parser.py":1784
 * 
 *         # Record Y/M/D value
 *         return self._record_ymd(flag, value)             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = __pyx_f_7cytimes_6parser_6Result__record_ymd(__pyx_v_self, __pyx_v_flag, __pyx_v_value);
  goto __pyx_L0;

  /* "cytimes/parser.py":1694
 *         return self._record_ymd(flag, value)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* 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_10);
  __Pyx_AddTraceback("cytimes.parser.Result.set_ymd_str", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":1786
 *         return self._record_ymd(flag, value)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":1791
 *     def ymd_slots_filled(self) -> cython.int:
 *         """(cfunc) Return the number of Y/M/D slots are recorded so far (0..3) `<'int'>`."""
 *         return self._idx + 1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->_idx + 1);
  goto __pyx_L0;

  /* "cytimes/parser.py":1786
 *         return self._record_ymd(flag, value)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":1793
 *         return self._idx + 1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_ymd_roles_resolved(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":1798
 *     def ymd_roles_resolved(self) -> cython.int:
 *         """(cfunc) Return how many Y/M/D roles are known so far (0..3) `<'int'>`."""
 *         return (self._yidx != -1) + (self._midx != -1) + (self._didx != -1)             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (((__pyx_v_self->_yidx != -1L) + (__pyx_v_self->_midx != -1L)) + (__pyx_v_self->_didx != -1L));
  goto __pyx_L0;

  /* "cytimes/parser.py":1793
 *         return self._idx + 1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":1800
 *         return (self._yidx != -1) + (self._midx != -1) + (self._didx != -1)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_day(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, PY_LONG_LONG __pyx_v_value) {
  int __pyx_v_month;
  int __pyx_v_year;
  int __pyx_r;
  int __pyx_t_1;

  /* "cytimes/parser.py":1812
 *         """
 *         # Day slot already assigned
 *         if self._didx != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_self->_didx != -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1813
 *         # Day slot already assigned
 *         if self._didx != -1:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Day is 1-based
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1812
 *         """
 *         # Day slot already assigned
 *         if self._didx != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1816
 * 
 *         # Day is 1-based
 *         if value < 1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_value < 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1817
 *         # Day is 1-based
 *         if value < 1:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Month unknown  any 1..31 could be a day
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1816
 * 
 *         # Day is 1-based
 *         if value < 1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1820
 * 
 *         # Month unknown  any 1..31 could be a day
 *         if self._midx == -1:             # <<<<<<<<<<<<<<
 *             return value <= 31
 *         month: cython.int = self._ymd[self._midx]
*/
  __pyx_t_1 = (__pyx_v_self->_midx == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1821
 *         # Month unknown  any 1..31 could be a day
 *         if self._midx == -1:
 *             return value <= 31             # <<<<<<<<<<<<<<
 *         month: cython.int = self._ymd[self._midx]
 * 
*/
    __pyx_r = (__pyx_v_value <= 31);
    goto __pyx_L0;

    /* "cytimes/parser.py":1820
 * 
 *         # Month unknown  any 1..31 could be a day
 *         if self._midx == -1:             # <<<<<<<<<<<<<<
 *             return value <= 31
 *         month: cython.int = self._ymd[self._midx]
*/
  }

  /* "cytimes/parser.py":1822
 *         if self._midx == -1:
 *             return value <= 31
 *         month: cython.int = self._ymd[self._midx]             # <<<<<<<<<<<<<<
 * 
 *         # Month known but year unknown -> check with a leap year (2000)
*/
  __pyx_v_month = (__pyx_v_self->_ymd[__pyx_v_self->_midx]);

  /* "cytimes/parser.py":1825
 * 
 *         # Month known but year unknown -> check with a leap year (2000)
 *         if self._yidx == -1:             # <<<<<<<<<<<<<<
 *             return value <= utils.days_in_month(2000, month)
 *         year: cython.int = self._ymd[self._yidx]
*/
  __pyx_t_1 = (__pyx_v_self->_yidx == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1826
 *         # Month known but year unknown -> check with a leap year (2000)
 *         if self._yidx == -1:
 *             return value <= utils.days_in_month(2000, month)             # <<<<<<<<<<<<<<
 *         year: cython.int = self._ymd[self._yidx]
 * 
*/
    __pyx_r = (__pyx_v_value <= __pyx_f_7cytimes_5utils_days_in_month(0x7D0, __pyx_v_month));
    goto __pyx_L0;

    /* "cytimes/parser.py":1825
 * 
 *         # Month known but year unknown -> check with a leap year (2000)
 *         if self._yidx == -1:             # <<<<<<<<<<<<<<
 *             return value <= utils.days_in_month(2000, month)
 *         year: cython.int = self._ymd[self._yidx]
*/
  }

  /* "cytimes/parser.py":1827
 *         if self._yidx == -1:
 *             return value <= utils.days_in_month(2000, month)
 *         year: cython.int = self._ymd[self._yidx]             # <<<<<<<<<<<<<<
 * 
 *         # Both month and year are known
*/
  __pyx_v_year = (__pyx_v_self->_ymd[__pyx_v_self->_yidx]);

  /* "cytimes/parser.py":1830
 * 
 *         # Both month and year are known
 *         return value <= utils.days_in_month(year, month)             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_value <= __pyx_f_7cytimes_5utils_days_in_month(__pyx_v_year, __pyx_v_month));
  goto __pyx_L0;

  /* "cytimes/parser.py":1800
 *         return (self._yidx != -1) + (self._midx != -1) + (self._didx != -1)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":1832
 *         return value <= utils.days_in_month(year, month)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_could_be_doy(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, PY_LONG_LONG __pyx_v_value) {
  int __pyx_v_year;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":1844
 *         """
 *         # Day of year already assigned
 *         if self.doy != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_self->doy != -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1845
 *         # Day of year already assigned
 *         if self.doy != -1:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Day of year is 1-based
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1844
 *         """
 *         # Day of year already assigned
 *         if self.doy != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1848
 * 
 *         # Day of year is 1-based
 *         if value < 1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_1 = (__pyx_v_value < 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1849
 *         # Day of year is 1-based
 *         if value < 1:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Either month or day is known
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1848
 * 
 *         # Day of year is 1-based
 *         if value < 1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1852
 * 
 *         # Either month or day is known
 *         if self._midx != -1 or self._didx != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_2 = (__pyx_v_self->_midx != -1L);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L6_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->_didx != -1L);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L6_bool_binop_done:;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1853
 *         # Either month or day is known
 *         if self._midx != -1 or self._didx != -1:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Year unknown
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1852
 * 
 *         # Either month or day is known
 *         if self._midx != -1 or self._didx != -1:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":1856
 * 
 *         # Year unknown
 *         if self._yidx == -1:             # <<<<<<<<<<<<<<
 *             return False
 *         year: cython.int = self._ymd[self._yidx]
*/
  __pyx_t_1 = (__pyx_v_self->_yidx == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":1857
 *         # Year unknown
 *         if self._yidx == -1:
 *             return False             # <<<<<<<<<<<<<<
 *         year: cython.int = self._ymd[self._yidx]
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":1856
 * 
 *         # Year unknown
 *         if self._yidx == -1:             # <<<<<<<<<<<<<<
 *             return False
 *         year: cython.int = self._ymd[self._yidx]
*/
  }

  /* "cytimes/parser.py":1858
 *         if self._yidx == -1:
 *             return False
 *         year: cython.int = self._ymd[self._yidx]             # <<<<<<<<<<<<<<
 * 
 *         # Check Range
*/
  __pyx_v_year = (__pyx_v_self->_ymd[__pyx_v_self->_yidx]);

  /* "cytimes/parser.py":1861
 * 
 *         # Check Range
 *         return value <= utils.days_in_year(year)             # <<<<<<<<<<<<<<
 * 
 *     # Resolve ---------------------------------------------------------
*/
  __pyx_r = (__pyx_v_value <= __pyx_f_7cytimes_5utils_days_in_year(__pyx_v_year));
  goto __pyx_L0;

  /* "cytimes/parser.py":1832
 *         return value <= utils.days_in_month(year, month)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":1864
 * 
 *     # Resolve ---------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_resolve(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_yearfirst, int __pyx_v_dayfirst) {
  int __pyx_v_slots_filled;
  int __pyx_v_roles_labeled;
  int __pyx_v_yidx;
  int __pyx_v_midx;
  int __pyx_v_didx;
  int __pyx_v_v0;
  int __pyx_v_v1;
  int __pyx_v_v2;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  int __pyx_v_year_now;
  int __pyx_v_year;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  struct tm __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":1904
 *         """
 *         # Already resolved
 *         if self._resolved:             # <<<<<<<<<<<<<<
 *             return self.valid()
 * 
*/
  if (__pyx_v_self->_resolved) {

    /* "cytimes/parser.py":1905
 *         # Already resolved
 *         if self._resolved:
 *             return self.valid()             # <<<<<<<<<<<<<<
 * 
 *         # Resolve Y/M/D
*/
    __pyx_r = __pyx_f_7cytimes_6parser_6Result_valid(__pyx_v_self);
    goto __pyx_L0;

    /* "cytimes/parser.py":1904
 *         """
 *         # Already resolved
 *         if self._resolved:             # <<<<<<<<<<<<<<
 *             return self.valid()
 * 
*/
  }

  /* "cytimes/parser.py":1908
 * 
 *         # Resolve Y/M/D
 *         slots_filled: cython.int = self.ymd_slots_filled()             # <<<<<<<<<<<<<<
 *         roles_labeled: cython.int = self.ymd_roles_resolved()
 *         yidx: cython.int = self._yidx
*/
  __pyx_v_slots_filled = __pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(__pyx_v_self);

  /* "cytimes/parser.py":1909
 *         # Resolve Y/M/D
 *         slots_filled: cython.int = self.ymd_slots_filled()
 *         roles_labeled: cython.int = self.ymd_roles_resolved()             # <<<<<<<<<<<<<<
 *         yidx: cython.int = self._yidx
 *         midx: cython.int = self._midx
*/
  __pyx_v_roles_labeled = __pyx_f_7cytimes_6parser_6Result_ymd_roles_resolved(__pyx_v_self);

  /* "cytimes/parser.py":1910
 *         slots_filled: cython.int = self.ymd_slots_filled()
 *         roles_labeled: cython.int = self.ymd_roles_resolved()
 *         yidx: cython.int = self._yidx             # <<<<<<<<<<<<<<
 *         midx: cython.int = self._midx
 *         didx: cython.int = self._didx
*/
  __pyx_t_1 = __pyx_v_self->_yidx;
  __pyx_v_yidx = __pyx_t_1;

  /* "cytimes/parser.py":1911
 *         roles_labeled: cython.int = self.ymd_roles_resolved()
 *         yidx: cython.int = self._yidx
 *         midx: cython.int = self._midx             # <<<<<<<<<<<<<<
 *         didx: cython.int = self._didx
 *         v0: cython.int = self._ymd[0]
*/
  __pyx_t_1 = __pyx_v_self->_midx;
  __pyx_v_midx = __pyx_t_1;

  /* "cytimes/parser.py":1912
 *         yidx: cython.int = self._yidx
 *         midx: cython.int = self._midx
 *         didx: cython.int = self._didx             # <<<<<<<<<<<<<<
 *         v0: cython.int = self._ymd[0]
 *         v1: cython.int = self._ymd[1]
*/
  __pyx_t_1 = __pyx_v_self->_didx;
  __pyx_v_didx = __pyx_t_1;

  /* "cytimes/parser.py":1913
 *         midx: cython.int = self._midx
 *         didx: cython.int = self._didx
 *         v0: cython.int = self._ymd[0]             # <<<<<<<<<<<<<<
 *         v1: cython.int = self._ymd[1]
 *         v2: cython.int = self._ymd[2]
*/
  __pyx_v_v0 = (__pyx_v_self->_ymd[0]);

  /* "cytimes/parser.py":1914
 *         didx: cython.int = self._didx
 *         v0: cython.int = self._ymd[0]
 *         v1: cython.int = self._ymd[1]             # <<<<<<<<<<<<<<
 *         v2: cython.int = self._ymd[2]
 * 
*/
  __pyx_v_v1 = (__pyx_v_self->_ymd[1]);

  /* "cytimes/parser.py":1915
 *         v0: cython.int = self._ymd[0]
 *         v1: cython.int = self._ymd[1]
 *         v2: cython.int = self._ymd[2]             # <<<<<<<<<<<<<<
 * 
 *         # Branch: at least two Y/M/D are filled with labels (no infer)
*/
  __pyx_v_v2 = (__pyx_v_self->_ymd[2]);

  /* "cytimes/parser.py":1918
 * 
 *         # Branch: at least two Y/M/D are filled with labels (no infer)
 *         if slots_filled == roles_labeled > 1:             # <<<<<<<<<<<<<<
 *             self.year = self._ymd[yidx] if yidx != -1 else -1
 *             self.month = self._ymd[midx] if midx != -1 else -1
*/
  __pyx_t_2 = (__pyx_v_slots_filled == __pyx_v_roles_labeled);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_v_roles_labeled > 1);
  }
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1919
 *         # Branch: at least two Y/M/D are filled with labels (no infer)
 *         if slots_filled == roles_labeled > 1:
 *             self.year = self._ymd[yidx] if yidx != -1 else -1             # <<<<<<<<<<<<<<
 *             self.month = self._ymd[midx] if midx != -1 else -1
 *             self.day = self._ymd[didx] if didx != -1 else -1
*/
    __pyx_t_2 = (__pyx_v_yidx != -1L);
    if (__pyx_t_2) {
      __pyx_t_1 = (__pyx_v_self->_ymd[__pyx_v_yidx]);
    } else {
      __pyx_t_1 = -1;
    }
    __pyx_v_self->year = __pyx_t_1;

    /* "cytimes/parser.py":1920
 *         if slots_filled == roles_labeled > 1:
 *             self.year = self._ymd[yidx] if yidx != -1 else -1
 *             self.month = self._ymd[midx] if midx != -1 else -1             # <<<<<<<<<<<<<<
 *             self.day = self._ymd[didx] if didx != -1 else -1
 * 
*/
    __pyx_t_2 = (__pyx_v_midx != -1L);
    if (__pyx_t_2) {
      __pyx_t_1 = (__pyx_v_self->_ymd[__pyx_v_midx]);
    } else {
      __pyx_t_1 = -1;
    }
    __pyx_v_self->month = __pyx_t_1;

    /* "cytimes/parser.py":1921
 *             self.year = self._ymd[yidx] if yidx != -1 else -1
 *             self.month = self._ymd[midx] if midx != -1 else -1
 *             self.day = self._ymd[didx] if didx != -1 else -1             # <<<<<<<<<<<<<<
 * 
 *         # Branch: one Y/M/D value
*/
    __pyx_t_2 = (__pyx_v_didx != -1L);
    if (__pyx_t_2) {
      __pyx_t_1 = (__pyx_v_self->_ymd[__pyx_v_didx]);
    } else {
      __pyx_t_1 = -1;
    }
    __pyx_v_self->day = __pyx_t_1;

    /* "cytimes/parser.py":1918
 * 
 *         # Branch: at least two Y/M/D are filled with labels (no infer)
 *         if slots_filled == roles_labeled > 1:             # <<<<<<<<<<<<<<
 *             self.year = self._ymd[yidx] if yidx != -1 else -1
 *             self.month = self._ymd[midx] if midx != -1 else -1
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":1924
 * 
 *         # Branch: one Y/M/D value
 *         elif slots_filled == 1:             # <<<<<<<<<<<<<<
 *             if yidx != -1:
 *                 self.year = v0  # labeled as year
*/
  __pyx_t_2 = (__pyx_v_slots_filled == 1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1925
 *         # Branch: one Y/M/D value
 *         elif slots_filled == 1:
 *             if yidx != -1:             # <<<<<<<<<<<<<<
 *                 self.year = v0  # labeled as year
 *                 # . day-of-year conversion
*/
    __pyx_t_2 = (__pyx_v_yidx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1926
 *         elif slots_filled == 1:
 *             if yidx != -1:
 *                 self.year = v0  # labeled as year             # <<<<<<<<<<<<<<
 *                 # . day-of-year conversion
 *                 if self.doy != -1:
*/
      __pyx_v_self->year = __pyx_v_v0;

      /* "cytimes/parser.py":1928
 *                 self.year = v0  # labeled as year
 *                 # . day-of-year conversion
 *                 if self.doy != -1:             # <<<<<<<<<<<<<<
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)
 *                     self.month, self.day = _ymd.month, _ymd.day
*/
      __pyx_t_2 = (__pyx_v_self->doy != -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":1929
 *                 # . day-of-year conversion
 *                 if self.doy != -1:
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)             # <<<<<<<<<<<<<<
 *                     self.month, self.day = _ymd.month, _ymd.day
 *             elif midx != -1:
*/
        __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_doy(__pyx_v_v0, __pyx_v_self->doy);

        /* "cytimes/parser.py":1930
 *                 if self.doy != -1:
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)
 *                     self.month, self.day = _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 *             elif midx != -1:
 *                 self.month = v0  # labeled as month
*/
        __pyx_t_1 = __pyx_v__ymd.month;
        __pyx_t_3 = __pyx_v__ymd.day;
        __pyx_v_self->month = __pyx_t_1;
        __pyx_v_self->day = __pyx_t_3;

        /* "cytimes/parser.py":1928
 *                 self.year = v0  # labeled as year
 *                 # . day-of-year conversion
 *                 if self.doy != -1:             # <<<<<<<<<<<<<<
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)
 *                     self.month, self.day = _ymd.month, _ymd.day
*/
      }

      /* "cytimes/parser.py":1925
 *         # Branch: one Y/M/D value
 *         elif slots_filled == 1:
 *             if yidx != -1:             # <<<<<<<<<<<<<<
 *                 self.year = v0  # labeled as year
 *                 # . day-of-year conversion
*/
      goto __pyx_L5;
    }

    /* "cytimes/parser.py":1931
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)
 *                     self.month, self.day = _ymd.month, _ymd.day
 *             elif midx != -1:             # <<<<<<<<<<<<<<
 *                 self.month = v0  # labeled as month
 *             elif didx != -1:
*/
    __pyx_t_2 = (__pyx_v_midx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1932
 *                     self.month, self.day = _ymd.month, _ymd.day
 *             elif midx != -1:
 *                 self.month = v0  # labeled as month             # <<<<<<<<<<<<<<
 *             elif didx != -1:
 *                 self.day = v0  # labeled as day
*/
      __pyx_v_self->month = __pyx_v_v0;

      /* "cytimes/parser.py":1931
 *                     _ymd = utils.ymd_fr_doy(v0, self.doy)
 *                     self.month, self.day = _ymd.month, _ymd.day
 *             elif midx != -1:             # <<<<<<<<<<<<<<
 *                 self.month = v0  # labeled as month
 *             elif didx != -1:
*/
      goto __pyx_L5;
    }

    /* "cytimes/parser.py":1933
 *             elif midx != -1:
 *                 self.month = v0  # labeled as month
 *             elif didx != -1:             # <<<<<<<<<<<<<<
 *                 self.day = v0  # labeled as day
 *             elif v0 > 31:
*/
    __pyx_t_2 = (__pyx_v_didx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1934
 *                 self.month = v0  # labeled as month
 *             elif didx != -1:
 *                 self.day = v0  # labeled as day             # <<<<<<<<<<<<<<
 *             elif v0 > 31:
 *                 self.year = v0  # must be year (> 31)
*/
      __pyx_v_self->day = __pyx_v_v0;

      /* "cytimes/parser.py":1933
 *             elif midx != -1:
 *                 self.month = v0  # labeled as month
 *             elif didx != -1:             # <<<<<<<<<<<<<<
 *                 self.day = v0  # labeled as day
 *             elif v0 > 31:
*/
      goto __pyx_L5;
    }

    /* "cytimes/parser.py":1935
 *             elif didx != -1:
 *                 self.day = v0  # labeled as day
 *             elif v0 > 31:             # <<<<<<<<<<<<<<
 *                 self.year = v0  # must be year (> 31)
 *             else:
*/
    __pyx_t_2 = (__pyx_v_v0 > 31);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1936
 *                 self.day = v0  # labeled as day
 *             elif v0 > 31:
 *                 self.year = v0  # must be year (> 31)             # <<<<<<<<<<<<<<
 *             else:
 *                 self.day = v0  # probably day
*/
      __pyx_v_self->year = __pyx_v_v0;

      /* "cytimes/parser.py":1935
 *             elif didx != -1:
 *                 self.day = v0  # labeled as day
 *             elif v0 > 31:             # <<<<<<<<<<<<<<
 *                 self.year = v0  # must be year (> 31)
 *             else:
*/
      goto __pyx_L5;
    }

    /* "cytimes/parser.py":1938
 *                 self.year = v0  # must be year (> 31)
 *             else:
 *                 self.day = v0  # probably day             # <<<<<<<<<<<<<<
 * 
 *         # Branch: two Y/M/D values
*/
    /*else*/ {
      __pyx_v_self->day = __pyx_v_v0;
    }
    __pyx_L5:;

    /* "cytimes/parser.py":1924
 * 
 *         # Branch: one Y/M/D value
 *         elif slots_filled == 1:             # <<<<<<<<<<<<<<
 *             if yidx != -1:
 *                 self.year = v0  # labeled as year
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":1941
 * 
 *         # Branch: two Y/M/D values
 *         elif slots_filled == 2:             # <<<<<<<<<<<<<<
 *             # . month labeled
 *             if midx != -1:
*/
  __pyx_t_2 = (__pyx_v_slots_filled == 2);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1943
 *         elif slots_filled == 2:
 *             # . month labeled
 *             if midx != -1:             # <<<<<<<<<<<<<<
 *                 if midx == 0:
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):
*/
    __pyx_t_2 = (__pyx_v_midx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1944
 *             # . month labeled
 *             if midx != -1:
 *                 if midx == 0:             # <<<<<<<<<<<<<<
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):
 *                         self.month, self.year = v0, v1  # Jan-99
*/
      __pyx_t_2 = (__pyx_v_midx == 0);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":1945
 *             if midx != -1:
 *                 if midx == 0:
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):             # <<<<<<<<<<<<<<
 *                         self.month, self.year = v0, v1  # Jan-99
 *                     else:
*/
        __pyx_t_4 = (__pyx_v_v1 > 31);
        if (!__pyx_t_4) {
        } else {
          __pyx_t_2 = __pyx_t_4;
          goto __pyx_L10_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_v0 == 2);
        if (__pyx_t_4) {
        } else {
          __pyx_t_2 = __pyx_t_4;
          goto __pyx_L10_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_v1 > 29);
        __pyx_t_2 = __pyx_t_4;
        __pyx_L10_bool_binop_done:;
        if (__pyx_t_2) {

          /* "cytimes/parser.py":1946
 *                 if midx == 0:
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):
 *                         self.month, self.year = v0, v1  # Jan-99             # <<<<<<<<<<<<<<
 *                     else:
 *                         self.month, self.day = v0, v1  # Jan-01 (probably)
*/
          __pyx_t_3 = __pyx_v_v0;
          __pyx_t_1 = __pyx_v_v1;
          __pyx_v_self->month = __pyx_t_3;
          __pyx_v_self->year = __pyx_t_1;

          /* "cytimes/parser.py":1945
 *             if midx != -1:
 *                 if midx == 0:
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):             # <<<<<<<<<<<<<<
 *                         self.month, self.year = v0, v1  # Jan-99
 *                     else:
*/
          goto __pyx_L9;
        }

        /* "cytimes/parser.py":1948
 *                         self.month, self.year = v0, v1  # Jan-99
 *                     else:
 *                         self.month, self.day = v0, v1  # Jan-01 (probably)             # <<<<<<<<<<<<<<
 *                 else:
 *                     if v0 > 31 or (v1 == 2 and v0 > 29):
*/
        /*else*/ {
          __pyx_t_1 = __pyx_v_v0;
          __pyx_t_3 = __pyx_v_v1;
          __pyx_v_self->month = __pyx_t_1;
          __pyx_v_self->day = __pyx_t_3;
        }
        __pyx_L9:;

        /* "cytimes/parser.py":1944
 *             # . month labeled
 *             if midx != -1:
 *                 if midx == 0:             # <<<<<<<<<<<<<<
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):
 *                         self.month, self.year = v0, v1  # Jan-99
*/
        goto __pyx_L8;
      }

      /* "cytimes/parser.py":1950
 *                         self.month, self.day = v0, v1  # Jan-01 (probably)
 *                 else:
 *                     if v0 > 31 or (v1 == 2 and v0 > 29):             # <<<<<<<<<<<<<<
 *                         self.year, self.month = v0, v1  # 99-Jan
 *                     else:
*/
      /*else*/ {
        __pyx_t_4 = (__pyx_v_v0 > 31);
        if (!__pyx_t_4) {
        } else {
          __pyx_t_2 = __pyx_t_4;
          goto __pyx_L14_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_v1 == 2);
        if (__pyx_t_4) {
        } else {
          __pyx_t_2 = __pyx_t_4;
          goto __pyx_L14_bool_binop_done;
        }
        __pyx_t_4 = (__pyx_v_v0 > 29);
        __pyx_t_2 = __pyx_t_4;
        __pyx_L14_bool_binop_done:;
        if (__pyx_t_2) {

          /* "cytimes/parser.py":1951
 *                 else:
 *                     if v0 > 31 or (v1 == 2 and v0 > 29):
 *                         self.year, self.month = v0, v1  # 99-Jan             # <<<<<<<<<<<<<<
 *                     else:
 *                         self.day, self.month = v0, v1  # 01-Jan (probably)
*/
          __pyx_t_3 = __pyx_v_v0;
          __pyx_t_1 = __pyx_v_v1;
          __pyx_v_self->year = __pyx_t_3;
          __pyx_v_self->month = __pyx_t_1;

          /* "cytimes/parser.py":1950
 *                         self.month, self.day = v0, v1  # Jan-01 (probably)
 *                 else:
 *                     if v0 > 31 or (v1 == 2 and v0 > 29):             # <<<<<<<<<<<<<<
 *                         self.year, self.month = v0, v1  # 99-Jan
 *                     else:
*/
          goto __pyx_L13;
        }

        /* "cytimes/parser.py":1953
 *                         self.year, self.month = v0, v1  # 99-Jan
 *                     else:
 *                         self.day, self.month = v0, v1  # 01-Jan (probably)             # <<<<<<<<<<<<<<
 *             # . month not labeled (infer)
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):
*/
        /*else*/ {
          __pyx_t_1 = __pyx_v_v0;
          __pyx_t_3 = __pyx_v_v1;
          __pyx_v_self->day = __pyx_t_1;
          __pyx_v_self->month = __pyx_t_3;
        }
        __pyx_L13:;
      }
      __pyx_L8:;

      /* "cytimes/parser.py":1943
 *         elif slots_filled == 2:
 *             # . month labeled
 *             if midx != -1:             # <<<<<<<<<<<<<<
 *                 if midx == 0:
 *                     if v1 > 31 or (v0 == 2 and v1 > 29):
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1955
 *                         self.day, self.month = v0, v1  # 01-Jan (probably)
 *             # . month not labeled (infer)
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):             # <<<<<<<<<<<<<<
 *                 self.year, self.month = v0, v1  # 99-Feb
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
*/
    __pyx_t_4 = (__pyx_v_v0 > 31);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_v1 == 2);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L17_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_v0 > 29);
    __pyx_t_2 = __pyx_t_4;
    __pyx_L17_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1956
 *             # . month not labeled (infer)
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):
 *                 self.year, self.month = v0, v1  # 99-Feb             # <<<<<<<<<<<<<<
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
 *                 self.month, self.year = v0, v1  # Feb-99
*/
      __pyx_t_3 = __pyx_v_v0;
      __pyx_t_1 = __pyx_v_v1;
      __pyx_v_self->year = __pyx_t_3;
      __pyx_v_self->month = __pyx_t_1;

      /* "cytimes/parser.py":1955
 *                         self.day, self.month = v0, v1  # 01-Jan (probably)
 *             # . month not labeled (infer)
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):             # <<<<<<<<<<<<<<
 *                 self.year, self.month = v0, v1  # 99-Feb
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1957
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):
 *                 self.year, self.month = v0, v1  # 99-Feb
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):             # <<<<<<<<<<<<<<
 *                 self.month, self.year = v0, v1  # Feb-99
 *             elif dayfirst and 1 <= v1 <= 12:
*/
    __pyx_t_4 = (__pyx_v_v1 > 31);
    if (!__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L20_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_v0 == 2);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L20_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_v1 > 29);
    __pyx_t_2 = __pyx_t_4;
    __pyx_L20_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1958
 *                 self.year, self.month = v0, v1  # 99-Feb
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
 *                 self.month, self.year = v0, v1  # Feb-99             # <<<<<<<<<<<<<<
 *             elif dayfirst and 1 <= v1 <= 12:
 *                 self.day, self.month = v0, v1  # 01-Jan
*/
      __pyx_t_1 = __pyx_v_v0;
      __pyx_t_3 = __pyx_v_v1;
      __pyx_v_self->month = __pyx_t_1;
      __pyx_v_self->year = __pyx_t_3;

      /* "cytimes/parser.py":1957
 *             elif v0 > 31 or (v1 == 2 and v0 > 29):
 *                 self.year, self.month = v0, v1  # 99-Feb
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):             # <<<<<<<<<<<<<<
 *                 self.month, self.year = v0, v1  # Feb-99
 *             elif dayfirst and 1 <= v1 <= 12:
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1959
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
 *                 self.month, self.year = v0, v1  # Feb-99
 *             elif dayfirst and 1 <= v1 <= 12:             # <<<<<<<<<<<<<<
 *                 self.day, self.month = v0, v1  # 01-Jan
 *             else:
*/
    if (__pyx_v_dayfirst) {
    } else {
      __pyx_t_2 = __pyx_v_dayfirst;
      goto __pyx_L23_bool_binop_done;
    }
    __pyx_t_4 = (1 <= __pyx_v_v1);
    if (__pyx_t_4) {
      __pyx_t_4 = (__pyx_v_v1 <= 12);
    }
    __pyx_t_2 = __pyx_t_4;
    __pyx_L23_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1960
 *                 self.month, self.year = v0, v1  # Feb-99
 *             elif dayfirst and 1 <= v1 <= 12:
 *                 self.day, self.month = v0, v1  # 01-Jan             # <<<<<<<<<<<<<<
 *             else:
 *                 self.month, self.day = v0, v1  # Jan-01
*/
      __pyx_t_3 = __pyx_v_v0;
      __pyx_t_1 = __pyx_v_v1;
      __pyx_v_self->day = __pyx_t_3;
      __pyx_v_self->month = __pyx_t_1;

      /* "cytimes/parser.py":1959
 *             elif v1 > 31 or (v0 == 2 and v1 > 29):
 *                 self.month, self.year = v0, v1  # Feb-99
 *             elif dayfirst and 1 <= v1 <= 12:             # <<<<<<<<<<<<<<
 *                 self.day, self.month = v0, v1  # 01-Jan
 *             else:
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":1962
 *                 self.day, self.month = v0, v1  # 01-Jan
 *             else:
 *                 self.month, self.day = v0, v1  # Jan-01             # <<<<<<<<<<<<<<
 * 
 *         # Branch: three Y/M/D values
*/
    /*else*/ {
      __pyx_t_1 = __pyx_v_v0;
      __pyx_t_3 = __pyx_v_v1;
      __pyx_v_self->month = __pyx_t_1;
      __pyx_v_self->day = __pyx_t_3;
    }
    __pyx_L7:;

    /* "cytimes/parser.py":1941
 * 
 *         # Branch: two Y/M/D values
 *         elif slots_filled == 2:             # <<<<<<<<<<<<<<
 *             # . month labeled
 *             if midx != -1:
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":1965
 * 
 *         # Branch: three Y/M/D values
 *         elif slots_filled == 3:             # <<<<<<<<<<<<<<
 *             # Case: two labels
 *             if roles_labeled == 2:
*/
  __pyx_t_2 = (__pyx_v_slots_filled == 3);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":1967
 *         elif slots_filled == 3:
 *             # Case: two labels
 *             if roles_labeled == 2:             # <<<<<<<<<<<<<<
 *                 # . month labeled
 *                 if midx != -1:
*/
    __pyx_t_2 = (__pyx_v_roles_labeled == 2);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":1969
 *             if roles_labeled == 2:
 *                 # . month labeled
 *                 if midx != -1:             # <<<<<<<<<<<<<<
 *                     self.month = self._ymd[midx]
 *                     #: the other flag is year
*/
      __pyx_t_2 = (__pyx_v_midx != -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":1970
 *                 # . month labeled
 *                 if midx != -1:
 *                     self.month = self._ymd[midx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is year
 *                     if yidx != -1:
*/
        __pyx_v_self->month = (__pyx_v_self->_ymd[__pyx_v_midx]);

        /* "cytimes/parser.py":1972
 *                     self.month = self._ymd[midx]
 *                     #: the other flag is year
 *                     if yidx != -1:             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[yidx]
 *                         self.day = self._ymd[3 - yidx - midx]
*/
        __pyx_t_2 = (__pyx_v_yidx != -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":1973
 *                     #: the other flag is year
 *                     if yidx != -1:
 *                         self.year = self._ymd[yidx]             # <<<<<<<<<<<<<<
 *                         self.day = self._ymd[3 - yidx - midx]
 *                     #: the other flag is day
*/
          __pyx_v_self->year = (__pyx_v_self->_ymd[__pyx_v_yidx]);

          /* "cytimes/parser.py":1974
 *                     if yidx != -1:
 *                         self.year = self._ymd[yidx]
 *                         self.day = self._ymd[3 - yidx - midx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is day
 *                     else:
*/
          __pyx_v_self->day = (__pyx_v_self->_ymd[((3 - __pyx_v_yidx) - __pyx_v_midx)]);

          /* "cytimes/parser.py":1972
 *                     self.month = self._ymd[midx]
 *                     #: the other flag is year
 *                     if yidx != -1:             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[yidx]
 *                         self.day = self._ymd[3 - yidx - midx]
*/
          goto __pyx_L27;
        }

        /* "cytimes/parser.py":1977
 *                     #: the other flag is day
 *                     else:
 *                         self.day = self._ymd[didx]             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[3 - midx - didx]
 *                 # . year labeled
*/
        /*else*/ {
          __pyx_v_self->day = (__pyx_v_self->_ymd[__pyx_v_didx]);

          /* "cytimes/parser.py":1978
 *                     else:
 *                         self.day = self._ymd[didx]
 *                         self.year = self._ymd[3 - midx - didx]             # <<<<<<<<<<<<<<
 *                 # . year labeled
 *                 elif yidx != -1:
*/
          __pyx_v_self->year = (__pyx_v_self->_ymd[((3 - __pyx_v_midx) - __pyx_v_didx)]);
        }
        __pyx_L27:;

        /* "cytimes/parser.py":1969
 *             if roles_labeled == 2:
 *                 # . month labeled
 *                 if midx != -1:             # <<<<<<<<<<<<<<
 *                     self.month = self._ymd[midx]
 *                     #: the other flag is year
*/
        goto __pyx_L26;
      }

      /* "cytimes/parser.py":1980
 *                         self.year = self._ymd[3 - midx - didx]
 *                 # . year labeled
 *                 elif yidx != -1:             # <<<<<<<<<<<<<<
 *                     self.year = self._ymd[yidx]
 *                     #: the other flag is month
*/
      __pyx_t_2 = (__pyx_v_yidx != -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":1981
 *                 # . year labeled
 *                 elif yidx != -1:
 *                     self.year = self._ymd[yidx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is month
 *                     if midx != -1:
*/
        __pyx_v_self->year = (__pyx_v_self->_ymd[__pyx_v_yidx]);

        /* "cytimes/parser.py":1983
 *                     self.year = self._ymd[yidx]
 *                     #: the other flag is month
 *                     if midx != -1:             # <<<<<<<<<<<<<<
 *                         self.month = self._ymd[midx]
 *                         self.day = self._ymd[3 - yidx - midx]
*/
        __pyx_t_2 = (__pyx_v_midx != -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":1984
 *                     #: the other flag is month
 *                     if midx != -1:
 *                         self.month = self._ymd[midx]             # <<<<<<<<<<<<<<
 *                         self.day = self._ymd[3 - yidx - midx]
 *                     #: the other flag is day
*/
          __pyx_v_self->month = (__pyx_v_self->_ymd[__pyx_v_midx]);

          /* "cytimes/parser.py":1985
 *                     if midx != -1:
 *                         self.month = self._ymd[midx]
 *                         self.day = self._ymd[3 - yidx - midx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is day
 *                     else:
*/
          __pyx_v_self->day = (__pyx_v_self->_ymd[((3 - __pyx_v_yidx) - __pyx_v_midx)]);

          /* "cytimes/parser.py":1983
 *                     self.year = self._ymd[yidx]
 *                     #: the other flag is month
 *                     if midx != -1:             # <<<<<<<<<<<<<<
 *                         self.month = self._ymd[midx]
 *                         self.day = self._ymd[3 - yidx - midx]
*/
          goto __pyx_L28;
        }

        /* "cytimes/parser.py":1988
 *                     #: the other flag is day
 *                     else:
 *                         self.day = self._ymd[didx]             # <<<<<<<<<<<<<<
 *                         self.month = self._ymd[3 - yidx - didx]
 *                 # . day labeled
*/
        /*else*/ {
          __pyx_v_self->day = (__pyx_v_self->_ymd[__pyx_v_didx]);

          /* "cytimes/parser.py":1989
 *                     else:
 *                         self.day = self._ymd[didx]
 *                         self.month = self._ymd[3 - yidx - didx]             # <<<<<<<<<<<<<<
 *                 # . day labeled
 *                 else:
*/
          __pyx_v_self->month = (__pyx_v_self->_ymd[((3 - __pyx_v_yidx) - __pyx_v_didx)]);
        }
        __pyx_L28:;

        /* "cytimes/parser.py":1980
 *                         self.year = self._ymd[3 - midx - didx]
 *                 # . year labeled
 *                 elif yidx != -1:             # <<<<<<<<<<<<<<
 *                     self.year = self._ymd[yidx]
 *                     #: the other flag is month
*/
        goto __pyx_L26;
      }

      /* "cytimes/parser.py":1992
 *                 # . day labeled
 *                 else:
 *                     self.day = self._ymd[didx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is year
 *                     if yidx != -1:
*/
      /*else*/ {
        __pyx_v_self->day = (__pyx_v_self->_ymd[__pyx_v_didx]);

        /* "cytimes/parser.py":1994
 *                     self.day = self._ymd[didx]
 *                     #: the other flag is year
 *                     if yidx != -1:             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[yidx]
 *                         self.month = self._ymd[3 - yidx - didx]
*/
        __pyx_t_2 = (__pyx_v_yidx != -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":1995
 *                     #: the other flag is year
 *                     if yidx != -1:
 *                         self.year = self._ymd[yidx]             # <<<<<<<<<<<<<<
 *                         self.month = self._ymd[3 - yidx - didx]
 *                     #: the other flag is month
*/
          __pyx_v_self->year = (__pyx_v_self->_ymd[__pyx_v_yidx]);

          /* "cytimes/parser.py":1996
 *                     if yidx != -1:
 *                         self.year = self._ymd[yidx]
 *                         self.month = self._ymd[3 - yidx - didx]             # <<<<<<<<<<<<<<
 *                     #: the other flag is month
 *                     else:
*/
          __pyx_v_self->month = (__pyx_v_self->_ymd[((3 - __pyx_v_yidx) - __pyx_v_didx)]);

          /* "cytimes/parser.py":1994
 *                     self.day = self._ymd[didx]
 *                     #: the other flag is year
 *                     if yidx != -1:             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[yidx]
 *                         self.month = self._ymd[3 - yidx - didx]
*/
          goto __pyx_L29;
        }

        /* "cytimes/parser.py":1999
 *                     #: the other flag is month
 *                     else:
 *                         self.month = self._ymd[midx]             # <<<<<<<<<<<<<<
 *                         self.year = self._ymd[3 - midx - didx]
 * 
*/
        /*else*/ {
          __pyx_v_self->month = (__pyx_v_self->_ymd[__pyx_v_midx]);

          /* "cytimes/parser.py":2000
 *                     else:
 *                         self.month = self._ymd[midx]
 *                         self.year = self._ymd[3 - midx - didx]             # <<<<<<<<<<<<<<
 * 
 *             # Case: month labeled (infer)
*/
          __pyx_v_self->year = (__pyx_v_self->_ymd[((3 - __pyx_v_midx) - __pyx_v_didx)]);
        }
        __pyx_L29:;
      }
      __pyx_L26:;

      /* "cytimes/parser.py":1967
 *         elif slots_filled == 3:
 *             # Case: two labels
 *             if roles_labeled == 2:             # <<<<<<<<<<<<<<
 *                 # . month labeled
 *                 if midx != -1:
*/
      goto __pyx_L25;
    }

    /* "cytimes/parser.py":2003
 * 
 *             # Case: month labeled (infer)
 *             elif midx == 0:             # <<<<<<<<<<<<<<
 *                 if v1 > 31:
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25
*/
    __pyx_t_2 = (__pyx_v_midx == 0);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2004
 *             # Case: month labeled (infer)
 *             elif midx == 0:
 *                 if v1 > 31:             # <<<<<<<<<<<<<<
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25
 *                 else:
*/
      __pyx_t_2 = (__pyx_v_v1 > 31);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2005
 *             elif midx == 0:
 *                 if v1 > 31:
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003
*/
        __pyx_t_3 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_5 = __pyx_v_v2;
        __pyx_v_self->month = __pyx_t_3;
        __pyx_v_self->year = __pyx_t_1;
        __pyx_v_self->day = __pyx_t_5;

        /* "cytimes/parser.py":2004
 *             # Case: month labeled (infer)
 *             elif midx == 0:
 *                 if v1 > 31:             # <<<<<<<<<<<<<<
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25
 *                 else:
*/
        goto __pyx_L30;
      }

      /* "cytimes/parser.py":2007
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25
 *                 else:
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003             # <<<<<<<<<<<<<<
 *             elif midx == 1:
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):
*/
      /*else*/ {
        __pyx_t_5 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_3 = __pyx_v_v2;
        __pyx_v_self->month = __pyx_t_5;
        __pyx_v_self->day = __pyx_t_1;
        __pyx_v_self->year = __pyx_t_3;
      }
      __pyx_L30:;

      /* "cytimes/parser.py":2003
 * 
 *             # Case: month labeled (infer)
 *             elif midx == 0:             # <<<<<<<<<<<<<<
 *                 if v1 > 31:
 *                     self.month, self.year, self.day = v0, v1, v2  # Apr-2003-25
*/
      goto __pyx_L25;
    }

    /* "cytimes/parser.py":2008
 *                 else:
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003
 *             elif midx == 1:             # <<<<<<<<<<<<<<
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01
*/
    __pyx_t_2 = (__pyx_v_midx == 1);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2009
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003
 *             elif midx == 1:
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):             # <<<<<<<<<<<<<<
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01
 *                 else:
*/
      __pyx_t_4 = (__pyx_v_v0 > 31);
      if (!__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L32_bool_binop_done;
      }
      if (__pyx_v_yearfirst) {
      } else {
        __pyx_t_2 = __pyx_v_yearfirst;
        goto __pyx_L32_bool_binop_done;
      }
      __pyx_t_4 = (0 < __pyx_v_v2);
      if (__pyx_t_4) {
        __pyx_t_4 = (__pyx_v_v2 <= 31);
      }
      __pyx_t_2 = __pyx_t_4;
      __pyx_L32_bool_binop_done:;
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2010
 *             elif midx == 1:
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99
*/
        __pyx_t_3 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_5 = __pyx_v_v2;
        __pyx_v_self->year = __pyx_t_3;
        __pyx_v_self->month = __pyx_t_1;
        __pyx_v_self->day = __pyx_t_5;

        /* "cytimes/parser.py":2009
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003
 *             elif midx == 1:
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):             # <<<<<<<<<<<<<<
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01
 *                 else:
*/
        goto __pyx_L31;
      }

      /* "cytimes/parser.py":2012
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01
 *                 else:
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99             # <<<<<<<<<<<<<<
 *             elif midx == 2:
 *                 if v1 > 31:
*/
      /*else*/ {
        __pyx_t_5 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_3 = __pyx_v_v2;
        __pyx_v_self->day = __pyx_t_5;
        __pyx_v_self->month = __pyx_t_1;
        __pyx_v_self->year = __pyx_t_3;
      }
      __pyx_L31:;

      /* "cytimes/parser.py":2008
 *                 else:
 *                     self.month, self.day, self.year = v0, v1, v2  # Apr-25-2003
 *             elif midx == 1:             # <<<<<<<<<<<<<<
 *                 if v0 > 31 or (yearfirst and 0 < v2 <= 31):
 *                     self.year, self.month, self.day = v0, v1, v2  # 99-Jan-01
*/
      goto __pyx_L25;
    }

    /* "cytimes/parser.py":2013
 *                 else:
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99
 *             elif midx == 2:             # <<<<<<<<<<<<<<
 *                 if v1 > 31:
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan
*/
    __pyx_t_2 = (__pyx_v_midx == 2);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2014
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99
 *             elif midx == 2:
 *                 if v1 > 31:             # <<<<<<<<<<<<<<
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan
 *                 else:
*/
      __pyx_t_2 = (__pyx_v_v1 > 31);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2015
 *             elif midx == 2:
 *                 if v1 > 31:
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.year, self.day, self.month = v0, v1, v2  # 99-01-Jan
*/
        __pyx_t_3 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_5 = __pyx_v_v2;
        __pyx_v_self->day = __pyx_t_3;
        __pyx_v_self->year = __pyx_t_1;
        __pyx_v_self->month = __pyx_t_5;

        /* "cytimes/parser.py":2014
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99
 *             elif midx == 2:
 *                 if v1 > 31:             # <<<<<<<<<<<<<<
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan
 *                 else:
*/
        goto __pyx_L35;
      }

      /* "cytimes/parser.py":2017
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan
 *                 else:
 *                     self.year, self.day, self.month = v0, v1, v2  # 99-01-Jan             # <<<<<<<<<<<<<<
 * 
 *             # Case: month not labeled (infer)
*/
      /*else*/ {
        __pyx_t_5 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_3 = __pyx_v_v2;
        __pyx_v_self->year = __pyx_t_5;
        __pyx_v_self->day = __pyx_t_1;
        __pyx_v_self->month = __pyx_t_3;
      }
      __pyx_L35:;

      /* "cytimes/parser.py":2013
 *                 else:
 *                     self.day, self.month, self.year = v0, v1, v2  # 01-Jan-99
 *             elif midx == 2:             # <<<<<<<<<<<<<<
 *                 if v1 > 31:
 *                     self.day, self.year, self.month = v0, v1, v2  # 01-99-Jan
*/
      goto __pyx_L25;
    }

    /* "cytimes/parser.py":2021
 *             # Case: month not labeled (infer)
 *             else:
 *                 if (             # <<<<<<<<<<<<<<
 *                     v0 > 31
 *                     or yidx == 0
*/
    /*else*/ {

      /* "cytimes/parser.py":2022
 *             else:
 *                 if (
 *                     v0 > 31             # <<<<<<<<<<<<<<
 *                     or yidx == 0
 *                     or (yearfirst and 0 < v1 <= 12 and 0 < v2 <= 31)
*/
      __pyx_t_4 = (__pyx_v_v0 > 31);
      if (!__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L37_bool_binop_done;
      }

      /* "cytimes/parser.py":2023
 *                 if (
 *                     v0 > 31
 *                     or yidx == 0             # <<<<<<<<<<<<<<
 *                     or (yearfirst and 0 < v1 <= 12 and 0 < v2 <= 31)
 *                 ):
*/
      __pyx_t_4 = (__pyx_v_yidx == 0);
      if (!__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L37_bool_binop_done;
      }

      /* "cytimes/parser.py":2024
 *                     v0 > 31
 *                     or yidx == 0
 *                     or (yearfirst and 0 < v1 <= 12 and 0 < v2 <= 31)             # <<<<<<<<<<<<<<
 *                 ):
 *                     if dayfirst and 0 < v2 <= 12:
*/
      if (__pyx_v_yearfirst) {
      } else {
        __pyx_t_2 = __pyx_v_yearfirst;
        goto __pyx_L37_bool_binop_done;
      }
      __pyx_t_4 = (0 < __pyx_v_v1);
      if (__pyx_t_4) {
        __pyx_t_4 = (__pyx_v_v1 <= 12);
      }
      if (__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L37_bool_binop_done;
      }
      __pyx_t_4 = (0 < __pyx_v_v2);
      if (__pyx_t_4) {
        __pyx_t_4 = (__pyx_v_v2 <= 31);
      }
      __pyx_t_2 = __pyx_t_4;
      __pyx_L37_bool_binop_done:;

      /* "cytimes/parser.py":2021
 *             # Case: month not labeled (infer)
 *             else:
 *                 if (             # <<<<<<<<<<<<<<
 *                     v0 > 31
 *                     or yidx == 0
*/
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2026
 *                     or (yearfirst and 0 < v1 <= 12 and 0 < v2 <= 31)
 *                 ):
 *                     if dayfirst and 0 < v2 <= 12:             # <<<<<<<<<<<<<<
 *                         self.year, self.day, self.month = (v0, v1, v2)  # 99-01-Jan
 *                     else:
*/
        if (__pyx_v_dayfirst) {
        } else {
          __pyx_t_2 = __pyx_v_dayfirst;
          goto __pyx_L43_bool_binop_done;
        }
        __pyx_t_4 = (0 < __pyx_v_v2);
        if (__pyx_t_4) {
          __pyx_t_4 = (__pyx_v_v2 <= 12);
        }
        __pyx_t_2 = __pyx_t_4;
        __pyx_L43_bool_binop_done:;
        if (__pyx_t_2) {

          /* "cytimes/parser.py":2027
 *                 ):
 *                     if dayfirst and 0 < v2 <= 12:
 *                         self.year, self.day, self.month = (v0, v1, v2)  # 99-01-Jan             # <<<<<<<<<<<<<<
 *                     else:
 *                         self.year, self.month, self.day = (v0, v1, v2)  # 99-Jan-01
*/
          __pyx_t_3 = __pyx_v_v0;
          __pyx_t_1 = __pyx_v_v1;
          __pyx_t_5 = __pyx_v_v2;
          __pyx_v_self->year = __pyx_t_3;
          __pyx_v_self->day = __pyx_t_1;
          __pyx_v_self->month = __pyx_t_5;

          /* "cytimes/parser.py":2026
 *                     or (yearfirst and 0 < v1 <= 12 and 0 < v2 <= 31)
 *                 ):
 *                     if dayfirst and 0 < v2 <= 12:             # <<<<<<<<<<<<<<
 *                         self.year, self.day, self.month = (v0, v1, v2)  # 99-01-Jan
 *                     else:
*/
          goto __pyx_L42;
        }

        /* "cytimes/parser.py":2029
 *                         self.year, self.day, self.month = (v0, v1, v2)  # 99-01-Jan
 *                     else:
 *                         self.year, self.month, self.day = (v0, v1, v2)  # 99-Jan-01             # <<<<<<<<<<<<<<
 *                 elif v0 > 12 or (dayfirst and 0 < v1 <= 12):
 *                     self.day, self.month, self.year = (v0, v1, v2)  # 01-Jan-99
*/
        /*else*/ {
          __pyx_t_5 = __pyx_v_v0;
          __pyx_t_1 = __pyx_v_v1;
          __pyx_t_3 = __pyx_v_v2;
          __pyx_v_self->year = __pyx_t_5;
          __pyx_v_self->month = __pyx_t_1;
          __pyx_v_self->day = __pyx_t_3;
        }
        __pyx_L42:;

        /* "cytimes/parser.py":2021
 *             # Case: month not labeled (infer)
 *             else:
 *                 if (             # <<<<<<<<<<<<<<
 *                     v0 > 31
 *                     or yidx == 0
*/
        goto __pyx_L36;
      }

      /* "cytimes/parser.py":2030
 *                     else:
 *                         self.year, self.month, self.day = (v0, v1, v2)  # 99-Jan-01
 *                 elif v0 > 12 or (dayfirst and 0 < v1 <= 12):             # <<<<<<<<<<<<<<
 *                     self.day, self.month, self.year = (v0, v1, v2)  # 01-Jan-99
 *                 else:
*/
      __pyx_t_4 = (__pyx_v_v0 > 12);
      if (!__pyx_t_4) {
      } else {
        __pyx_t_2 = __pyx_t_4;
        goto __pyx_L45_bool_binop_done;
      }
      if (__pyx_v_dayfirst) {
      } else {
        __pyx_t_2 = __pyx_v_dayfirst;
        goto __pyx_L45_bool_binop_done;
      }
      __pyx_t_4 = (0 < __pyx_v_v1);
      if (__pyx_t_4) {
        __pyx_t_4 = (__pyx_v_v1 <= 12);
      }
      __pyx_t_2 = __pyx_t_4;
      __pyx_L45_bool_binop_done:;
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2031
 *                         self.year, self.month, self.day = (v0, v1, v2)  # 99-Jan-01
 *                 elif v0 > 12 or (dayfirst and 0 < v1 <= 12):
 *                     self.day, self.month, self.year = (v0, v1, v2)  # 01-Jan-99             # <<<<<<<<<<<<<<
 *                 else:
 *                     self.month, self.day, self.year = (v0, v1, v2)  # Jan-01-99
*/
        __pyx_t_3 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_5 = __pyx_v_v2;
        __pyx_v_self->day = __pyx_t_3;
        __pyx_v_self->month = __pyx_t_1;
        __pyx_v_self->year = __pyx_t_5;

        /* "cytimes/parser.py":2030
 *                     else:
 *                         self.year, self.month, self.day = (v0, v1, v2)  # 99-Jan-01
 *                 elif v0 > 12 or (dayfirst and 0 < v1 <= 12):             # <<<<<<<<<<<<<<
 *                     self.day, self.month, self.year = (v0, v1, v2)  # 01-Jan-99
 *                 else:
*/
        goto __pyx_L36;
      }

      /* "cytimes/parser.py":2033
 *                     self.day, self.month, self.year = (v0, v1, v2)  # 01-Jan-99
 *                 else:
 *                     self.month, self.day, self.year = (v0, v1, v2)  # Jan-01-99             # <<<<<<<<<<<<<<
 * 
 *         # Century adjustment (if necessary)
*/
      /*else*/ {
        __pyx_t_5 = __pyx_v_v0;
        __pyx_t_1 = __pyx_v_v1;
        __pyx_t_3 = __pyx_v_v2;
        __pyx_v_self->month = __pyx_t_5;
        __pyx_v_self->day = __pyx_t_1;
        __pyx_v_self->year = __pyx_t_3;
      }
      __pyx_L36:;
    }
    __pyx_L25:;

    /* "cytimes/parser.py":1965
 * 
 *         # Branch: three Y/M/D values
 *         elif slots_filled == 3:             # <<<<<<<<<<<<<<
 *             # Case: two labels
 *             if roles_labeled == 2:
*/
  }
  __pyx_L4:;

  /* "cytimes/parser.py":2036
 * 
 *         # Century adjustment (if necessary)
 *         if not self.century_specified and 0 <= self.year < 100:             # <<<<<<<<<<<<<<
 *             year_now: cython.int = localtime().tm_year
 *             year: cython.int = self.year + (year_now // 100) * 100
*/
  __pyx_t_4 = (!__pyx_v_self->century_specified);
  if (__pyx_t_4) {
  } else {
    __pyx_t_2 = __pyx_t_4;
    goto __pyx_L49_bool_binop_done;
  }
  __pyx_t_4 = (0 <= __pyx_v_self->year);
  if (__pyx_t_4) {
    __pyx_t_4 = (__pyx_v_self->year < 0x64);
  }
  __pyx_t_2 = __pyx_t_4;
  __pyx_L49_bool_binop_done:;
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2037
 *         # Century adjustment (if necessary)
 *         if not self.century_specified and 0 <= self.year < 100:
 *             year_now: cython.int = localtime().tm_year             # <<<<<<<<<<<<<<
 *             year: cython.int = self.year + (year_now // 100) * 100
 *             # . too far into the future
*/
    __pyx_t_6 = __pyx_f_7cpython_4time_localtime(); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2037, __pyx_L1_error)
    __pyx_t_3 = __pyx_t_6.tm_year;
    __pyx_v_year_now = __pyx_t_3;

    /* "cytimes/parser.py":2038
 *         if not self.century_specified and 0 <= self.year < 100:
 *             year_now: cython.int = localtime().tm_year
 *             year: cython.int = self.year + (year_now // 100) * 100             # <<<<<<<<<<<<<<
 *             # . too far into the future
 *             if year >= year_now + 50:
*/
    __pyx_v_year = (__pyx_v_self->year + (__Pyx_div_long(__pyx_v_year_now, 0x64, 1) * 0x64));

    /* "cytimes/parser.py":2040
 *             year: cython.int = self.year + (year_now // 100) * 100
 *             # . too far into the future
 *             if year >= year_now + 50:             # <<<<<<<<<<<<<<
 *                 year -= 100
 *             # . too distance from the now
*/
    __pyx_t_2 = (__pyx_v_year >= (__pyx_v_year_now + 50));
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2041
 *             # . too far into the future
 *             if year >= year_now + 50:
 *                 year -= 100             # <<<<<<<<<<<<<<
 *             # . too distance from the now
 *             elif year < year_now - 50:
*/
      __pyx_v_year = (__pyx_v_year - 0x64);

      /* "cytimes/parser.py":2040
 *             year: cython.int = self.year + (year_now // 100) * 100
 *             # . too far into the future
 *             if year >= year_now + 50:             # <<<<<<<<<<<<<<
 *                 year -= 100
 *             # . too distance from the now
*/
      goto __pyx_L51;
    }

    /* "cytimes/parser.py":2043
 *                 year -= 100
 *             # . too distance from the now
 *             elif year < year_now - 50:             # <<<<<<<<<<<<<<
 *                 year += 100
 *             self.year = year
*/
    __pyx_t_2 = (__pyx_v_year < (__pyx_v_year_now - 50));
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2044
 *             # . too distance from the now
 *             elif year < year_now - 50:
 *                 year += 100             # <<<<<<<<<<<<<<
 *             self.year = year
 * 
*/
      __pyx_v_year = (__pyx_v_year + 0x64);

      /* "cytimes/parser.py":2043
 *                 year -= 100
 *             # . too distance from the now
 *             elif year < year_now - 50:             # <<<<<<<<<<<<<<
 *                 year += 100
 *             self.year = year
*/
    }
    __pyx_L51:;

    /* "cytimes/parser.py":2045
 *             elif year < year_now - 50:
 *                 year += 100
 *             self.year = year             # <<<<<<<<<<<<<<
 * 
 *         # Check validity
*/
    __pyx_v_self->year = __pyx_v_year;

    /* "cytimes/parser.py":2036
 * 
 *         # Century adjustment (if necessary)
 *         if not self.century_specified and 0 <= self.year < 100:             # <<<<<<<<<<<<<<
 *             year_now: cython.int = localtime().tm_year
 *             year: cython.int = self.year + (year_now // 100) * 100
*/
  }

  /* "cytimes/parser.py":2048
 * 
 *         # Check validity
 *         self._resolved = True             # <<<<<<<<<<<<<<
 *         return self.valid()
 * 
*/
  __pyx_v_self->_resolved = 1;

  /* "cytimes/parser.py":2049
 *         # Check validity
 *         self._resolved = True
 *         return self.valid()             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = __pyx_f_7cytimes_6parser_6Result_valid(__pyx_v_self);
  goto __pyx_L0;

  /* "cytimes/parser.py":1864
 * 
 *     # Resolve ---------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cytimes.parser.Result.resolve", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_r = 0;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":2051
 *         return self.valid()
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_valid(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":2066
 *         """
 *         return (
 *             self.is_year_set()             # <<<<<<<<<<<<<<
 *             or self.is_month_set()
 *             or self.is_day_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2067
 *         return (
 *             self.is_year_set()
 *             or self.is_month_set()             # <<<<<<<<<<<<<<
 *             or self.is_day_set()
 *             or self.is_hour_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_month_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2068
 *             self.is_year_set()
 *             or self.is_month_set()
 *             or self.is_day_set()             # <<<<<<<<<<<<<<
 *             or self.is_hour_set()
 *             or self.is_minute_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_day_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2069
 *             or self.is_month_set()
 *             or self.is_day_set()
 *             or self.is_hour_set()             # <<<<<<<<<<<<<<
 *             or self.is_minute_set()
 *             or self.is_second_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_hour_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2070
 *             or self.is_day_set()
 *             or self.is_hour_set()
 *             or self.is_minute_set()             # <<<<<<<<<<<<<<
 *             or self.is_second_set()
 *             or self.is_microsecond_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_minute_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2071
 *             or self.is_hour_set()
 *             or self.is_minute_set()
 *             or self.is_second_set()             # <<<<<<<<<<<<<<
 *             or self.is_microsecond_set()
 *             or self.is_weekday_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_second_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2072
 *             or self.is_minute_set()
 *             or self.is_second_set()
 *             or self.is_microsecond_set()             # <<<<<<<<<<<<<<
 *             or self.is_weekday_set()
 *             or self.is_tzoffset_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2073
 *             or self.is_second_set()
 *             or self.is_microsecond_set()
 *             or self.is_weekday_set()             # <<<<<<<<<<<<<<
 *             or self.is_tzoffset_set()
 *         )
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_weekday_set(__pyx_v_self);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }

  /* "cytimes/parser.py":2074
 *             or self.is_microsecond_set()
 *             or self.is_weekday_set()
 *             or self.is_tzoffset_set()             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(__pyx_v_self);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2051
 *         return self.valid()
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2077
 *         )
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_year_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":2082
 *     def is_year_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `year` value is set `<'bool'>`."""
 *         return self._yidx != -1 or self.year != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_2 = (__pyx_v_self->_yidx != -1L);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->year != -1L);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2077
 *         )
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2084
 *         return self._yidx != -1 or self.year != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_month_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":2089
 *     def is_month_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `month` value is set `<'bool'>`."""
 *         return self._midx != -1 or self.month != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_2 = (__pyx_v_self->_midx != -1L);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->month != -1L);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2084
 *         return self._yidx != -1 or self.year != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2091
 *         return self._midx != -1 or self.month != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_day_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":2096
 *     def is_day_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `day` value is set `<'bool'>`."""
 *         return self._didx != -1 or self.day != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_2 = (__pyx_v_self->_didx != -1L);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_self->day != -1L);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2091
 *         return self._midx != -1 or self.month != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2098
 *         return self._didx != -1 or self.day != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_hour_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2103
 *     def is_hour_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `hour` value is set `<'bool'>`."""
 *         return self.hour != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->hour != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2098
 *         return self._didx != -1 or self.day != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2105
 *         return self.hour != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_minute_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2110
 *     def is_minute_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `minute` value is set `<'bool'>`."""
 *         return self.minute != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->minute != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2105
 *         return self.hour != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2112
 *         return self.minute != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_second_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2117
 *     def is_second_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `second` value is set `<'bool'>`."""
 *         return self.second != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->second != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2112
 *         return self.minute != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2119
 *         return self.second != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2124
 *     def is_microsecond_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `microsecond` value is set `<'bool'>`."""
 *         return self.microsecond != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->microsecond != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2119
 *         return self.second != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2126
 *         return self.microsecond != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_weekday_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2131
 *     def is_weekday_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `weekday` value is set `<'bool'>`."""
 *         return self.weekday != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->weekday != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2126
 *         return self.microsecond != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2133
 *         return self.weekday != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_doy_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2138
 *     def is_doy_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `doy` (day-of-year) value is set `<'bool'>`."""
 *         return self.doy != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->doy != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2133
 *         return self.weekday != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2140
 *         return self.doy != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_ampm_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2145
 *     def is_ampm_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `ampm` value is set `<'bool'>`."""
 *         return self.ampm != -1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = (__pyx_v_self->ampm != -1L);
  goto __pyx_L0;

  /* "cytimes/parser.py":2140
 *         return self.doy != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2147
 *         return self.ampm != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2152
 *     def is_tzoffset_set(self) -> cython.bint:
 *         """(cfunc) Return whether the `tzoffset` value is set `<'bool'>`."""
 *         return self.tzoffset != utils.NULL_TZOFFSET             # <<<<<<<<<<<<<<
 * 
 *     # Internal --------------------------------------------------------
*/
  __pyx_r = (__pyx_v_self->tzoffset != __pyx_v_7cytimes_5utils_NULL_TZOFFSET);
  goto __pyx_L0;

  /* "cytimes/parser.py":2147
 *         return self.ampm != -1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2155
 * 
 *     # Internal --------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__record_ymd(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self, int __pyx_v_flag, int __pyx_v_value) {
  int __pyx_v_idx;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":2174
 *         """
 *         # Full: 3 slots already set (idx is 0-based)
 *         idx: cython.int = self._idx             # <<<<<<<<<<<<<<
 *         if idx >= 2:
 *             return False
*/
  __pyx_t_1 = __pyx_v_self->_idx;
  __pyx_v_idx = __pyx_t_1;

  /* "cytimes/parser.py":2175
 *         # Full: 3 slots already set (idx is 0-based)
 *         idx: cython.int = self._idx
 *         if idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 *         idx += 1  # advance index
*/
  __pyx_t_2 = (__pyx_v_idx >= 2);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2176
 *         idx: cython.int = self._idx
 *         if idx >= 2:
 *             return False             # <<<<<<<<<<<<<<
 *         idx += 1  # advance index
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2175
 *         # Full: 3 slots already set (idx is 0-based)
 *         idx: cython.int = self._idx
 *         if idx >= 2:             # <<<<<<<<<<<<<<
 *             return False
 *         idx += 1  # advance index
*/
  }

  /* "cytimes/parser.py":2177
 *         if idx >= 2:
 *             return False
 *         idx += 1  # advance index             # <<<<<<<<<<<<<<
 * 
 *         # Unknown flag
*/
  __pyx_v_idx = (__pyx_v_idx + 1);

  /* "cytimes/parser.py":2180
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             self._ymd[idx] = value
 *             self._idx = idx
*/
  __pyx_t_2 = (__pyx_v_flag == 0);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2181
 *         # Unknown flag
 *         if flag == 0:
 *             self._ymd[idx] = value             # <<<<<<<<<<<<<<
 *             self._idx = idx
 *             return True
*/
    (__pyx_v_self->_ymd[__pyx_v_idx]) = __pyx_v_value;

    /* "cytimes/parser.py":2182
 *         if flag == 0:
 *             self._ymd[idx] = value
 *             self._idx = idx             # <<<<<<<<<<<<<<
 *             return True
 * 
*/
    __pyx_v_self->_idx = __pyx_v_idx;

    /* "cytimes/parser.py":2183
 *             self._ymd[idx] = value
 *             self._idx = idx
 *             return True             # <<<<<<<<<<<<<<
 * 
 *         # YEAR flag
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2180
 * 
 *         # Unknown flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             self._ymd[idx] = value
 *             self._idx = idx
*/
  }

  /* "cytimes/parser.py":2186
 * 
 *         # YEAR flag
 *         if flag == 1:             # <<<<<<<<<<<<<<
 *             # . year already set
 *             if self._yidx != -1:
*/
  __pyx_t_2 = (__pyx_v_flag == 1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2188
 *         if flag == 1:
 *             # . year already set
 *             if self._yidx != -1:             # <<<<<<<<<<<<<<
 *                 if self.could_be_doy(value):
 *                     # candidate for day-of-year
*/
    __pyx_t_2 = (__pyx_v_self->_yidx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2189
 *             # . year already set
 *             if self._yidx != -1:
 *                 if self.could_be_doy(value):             # <<<<<<<<<<<<<<
 *                     # candidate for day-of-year
 *                     self.doy = value
*/
      __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_could_be_doy(__pyx_v_self, __pyx_v_value);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2191
 *                 if self.could_be_doy(value):
 *                     # candidate for day-of-year
 *                     self.doy = value             # <<<<<<<<<<<<<<
 *                     return True
 *                 return False
*/
        __pyx_v_self->doy = __pyx_v_value;

        /* "cytimes/parser.py":2192
 *                     # candidate for day-of-year
 *                     self.doy = value
 *                     return True             # <<<<<<<<<<<<<<
 *                 return False
 *             # . set year & index
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":2189
 *             # . year already set
 *             if self._yidx != -1:
 *                 if self.could_be_doy(value):             # <<<<<<<<<<<<<<
 *                     # candidate for day-of-year
 *                     self.doy = value
*/
      }

      /* "cytimes/parser.py":2193
 *                     self.doy = value
 *                     return True
 *                 return False             # <<<<<<<<<<<<<<
 *             # . set year & index
 *             self._ymd[idx] = value
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2188
 *         if flag == 1:
 *             # . year already set
 *             if self._yidx != -1:             # <<<<<<<<<<<<<<
 *                 if self.could_be_doy(value):
 *                     # candidate for day-of-year
*/
    }

    /* "cytimes/parser.py":2195
 *                 return False
 *             # . set year & index
 *             self._ymd[idx] = value             # <<<<<<<<<<<<<<
 *             self._idx = self._yidx = idx
 *             return True
*/
    (__pyx_v_self->_ymd[__pyx_v_idx]) = __pyx_v_value;

    /* "cytimes/parser.py":2196
 *             # . set year & index
 *             self._ymd[idx] = value
 *             self._idx = self._yidx = idx             # <<<<<<<<<<<<<<
 *             return True
 * 
*/
    __pyx_v_self->_idx = __pyx_v_idx;
    __pyx_v_self->_yidx = __pyx_v_idx;

    /* "cytimes/parser.py":2197
 *             self._ymd[idx] = value
 *             self._idx = self._yidx = idx
 *             return True             # <<<<<<<<<<<<<<
 * 
 *         # MONTH flag
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2186
 * 
 *         # YEAR flag
 *         if flag == 1:             # <<<<<<<<<<<<<<
 *             # . year already set
 *             if self._yidx != -1:
*/
  }

  /* "cytimes/parser.py":2200
 * 
 *         # MONTH flag
 *         if flag == 2:             # <<<<<<<<<<<<<<
 *             # . month already set
 *             if self._midx != -1:
*/
  __pyx_t_2 = (__pyx_v_flag == 2);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2202
 *         if flag == 2:
 *             # . month already set
 *             if self._midx != -1:             # <<<<<<<<<<<<<<
 *                 return False
 *             # . set month & index
*/
    __pyx_t_2 = (__pyx_v_self->_midx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2203
 *             # . month already set
 *             if self._midx != -1:
 *                 return False             # <<<<<<<<<<<<<<
 *             # . set month & index
 *             self._ymd[idx] = value
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2202
 *         if flag == 2:
 *             # . month already set
 *             if self._midx != -1:             # <<<<<<<<<<<<<<
 *                 return False
 *             # . set month & index
*/
    }

    /* "cytimes/parser.py":2205
 *                 return False
 *             # . set month & index
 *             self._ymd[idx] = value             # <<<<<<<<<<<<<<
 *             self._idx = self._midx = idx
 *             return True
*/
    (__pyx_v_self->_ymd[__pyx_v_idx]) = __pyx_v_value;

    /* "cytimes/parser.py":2206
 *             # . set month & index
 *             self._ymd[idx] = value
 *             self._idx = self._midx = idx             # <<<<<<<<<<<<<<
 *             return True
 * 
*/
    __pyx_v_self->_idx = __pyx_v_idx;
    __pyx_v_self->_midx = __pyx_v_idx;

    /* "cytimes/parser.py":2207
 *             self._ymd[idx] = value
 *             self._idx = self._midx = idx
 *             return True             # <<<<<<<<<<<<<<
 * 
 *         # DAY flag
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2200
 * 
 *         # MONTH flag
 *         if flag == 2:             # <<<<<<<<<<<<<<
 *             # . month already set
 *             if self._midx != -1:
*/
  }

  /* "cytimes/parser.py":2210
 * 
 *         # DAY flag
 *         if flag == 3:             # <<<<<<<<<<<<<<
 *             # . day already set
 *             if self._didx != -1:
*/
  __pyx_t_2 = (__pyx_v_flag == 3);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2212
 *         if flag == 3:
 *             # . day already set
 *             if self._didx != -1:             # <<<<<<<<<<<<<<
 *                 return False
 *             # . set day & index
*/
    __pyx_t_2 = (__pyx_v_self->_didx != -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2213
 *             # . day already set
 *             if self._didx != -1:
 *                 return False             # <<<<<<<<<<<<<<
 *             # . set day & index
 *             self._ymd[idx] = value
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2212
 *         if flag == 3:
 *             # . day already set
 *             if self._didx != -1:             # <<<<<<<<<<<<<<
 *                 return False
 *             # . set day & index
*/
    }

    /* "cytimes/parser.py":2215
 *                 return False
 *             # . set day & index
 *             self._ymd[idx] = value             # <<<<<<<<<<<<<<
 *             self._idx = self._didx = idx
 *             return True
*/
    (__pyx_v_self->_ymd[__pyx_v_idx]) = __pyx_v_value;

    /* "cytimes/parser.py":2216
 *             # . set day & index
 *             self._ymd[idx] = value
 *             self._idx = self._didx = idx             # <<<<<<<<<<<<<<
 *             return True
 * 
*/
    __pyx_v_self->_idx = __pyx_v_idx;
    __pyx_v_self->_didx = __pyx_v_idx;

    /* "cytimes/parser.py":2217
 *             self._ymd[idx] = value
 *             self._idx = self._didx = idx
 *             return True             # <<<<<<<<<<<<<<
 * 
 *         # Invalid flag
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2210
 * 
 *         # DAY flag
 *         if flag == 3:             # <<<<<<<<<<<<<<
 *             # . day already set
 *             if self._didx != -1:
*/
  }

  /* "cytimes/parser.py":2220
 * 
 *         # Invalid flag
 *         return False             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":2155
 * 
 *     # Internal --------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2222
 *         return False
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Result__reset(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;
  int __pyx_t_1[3];

  /* "cytimes/parser.py":2228
 *         """(internal) Reset the result to inital state."""
 *         # Y/M/D
 *         self._ymd = [-1, -1, -1]             # <<<<<<<<<<<<<<
 *         self._idx = self._yidx = self._midx = self._didx = -1
 *         self._resolved = False
*/
  __pyx_t_1[0] = -1;
  __pyx_t_1[1] = -1;
  __pyx_t_1[2] = -1;
  memcpy(&(__pyx_v_self->_ymd[0]), __pyx_t_1, sizeof(__pyx_v_self->_ymd[0]) * (3));

  /* "cytimes/parser.py":2229
 *         # Y/M/D
 *         self._ymd = [-1, -1, -1]
 *         self._idx = self._yidx = self._midx = self._didx = -1             # <<<<<<<<<<<<<<
 *         self._resolved = False
 *         # Result
*/
  __pyx_v_self->_idx = -1;
  __pyx_v_self->_yidx = -1;
  __pyx_v_self->_midx = -1;
  __pyx_v_self->_didx = -1;

  /* "cytimes/parser.py":2230
 *         self._ymd = [-1, -1, -1]
 *         self._idx = self._yidx = self._midx = self._didx = -1
 *         self._resolved = False             # <<<<<<<<<<<<<<
 *         # Result
 *         self.year = self.month = self.day = -1
*/
  __pyx_v_self->_resolved = 0;

  /* "cytimes/parser.py":2232
 *         self._resolved = False
 *         # Result
 *         self.year = self.month = self.day = -1             # <<<<<<<<<<<<<<
 *         self.hour = self.minute = self.second = self.microsecond = -1
 *         self.weekday = self.doy = self.ampm = -1
*/
  __pyx_v_self->year = -1;
  __pyx_v_self->month = -1;
  __pyx_v_self->day = -1;

  /* "cytimes/parser.py":2233
 *         # Result
 *         self.year = self.month = self.day = -1
 *         self.hour = self.minute = self.second = self.microsecond = -1             # <<<<<<<<<<<<<<
 *         self.weekday = self.doy = self.ampm = -1
 *         #: tzoffset must be between -86400...86400,
*/
  __pyx_v_self->hour = -1;
  __pyx_v_self->minute = -1;
  __pyx_v_self->second = -1;
  __pyx_v_self->microsecond = -1;

  /* "cytimes/parser.py":2234
 *         self.year = self.month = self.day = -1
 *         self.hour = self.minute = self.second = self.microsecond = -1
 *         self.weekday = self.doy = self.ampm = -1             # <<<<<<<<<<<<<<
 *         #: tzoffset must be between -86400...86400,
 *         #: -100_000 represents no tzoffset.
*/
  __pyx_v_self->weekday = -1;
  __pyx_v_self->doy = -1;
  __pyx_v_self->ampm = -1;

  /* "cytimes/parser.py":2237
 *         #: tzoffset must be between -86400...86400,
 *         #: -100_000 represents no tzoffset.
 *         self.tzoffset = utils.NULL_TZOFFSET             # <<<<<<<<<<<<<<
 *         self.tzoffset_finalized = False
 *         self.century_specified = False
*/
  __pyx_v_self->tzoffset = __pyx_v_7cytimes_5utils_NULL_TZOFFSET;

  /* "cytimes/parser.py":2238
 *         #: -100_000 represents no tzoffset.
 *         self.tzoffset = utils.NULL_TZOFFSET
 *         self.tzoffset_finalized = False             # <<<<<<<<<<<<<<
 *         self.century_specified = False
 *         return True
*/
  __pyx_v_self->tzoffset_finalized = 0;

  /* "cytimes/parser.py":2239
 *         self.tzoffset = utils.NULL_TZOFFSET
 *         self.tzoffset_finalized = False
 *         self.century_specified = False             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __pyx_v_self->century_specified = 0;

  /* "cytimes/parser.py":2240
 *         self.tzoffset_finalized = False
 *         self.century_specified = False
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # Special methods -------------------------------------------------
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2222
 *         return False
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":2243
 * 
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:             # <<<<<<<<<<<<<<
 *         reprs: list[str] = []
 * 
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_6Result_3__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_7cytimes_6parser_6Result_3__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_7cytimes_6parser_6Result_2__repr__(((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_6Result_2__repr__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  PyObject *__pyx_v_reprs = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6[7];
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__repr__", 0);

  /* "cytimes/parser.py":2244
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:
 *         reprs: list[str] = []             # <<<<<<<<<<<<<<
 * 
 *         # Datetime results
*/
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2244, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_reprs = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":2248
 *         # Datetime results
 *         # . year
 *         if self.is_year_set():             # <<<<<<<<<<<<<<
 *             reprs.append("year=%d" % self.year)
 *         elif self._yidx != -1:
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2249
 *         # . year
 *         if self.is_year_set():
 *             reprs.append("year=%d" % self.year)             # <<<<<<<<<<<<<<
 *         elif self._yidx != -1:
 *             reprs.append("year=%d" % self._ymd[self._yidx])
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->year); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_year_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2249, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2248
 *         # Datetime results
 *         # . year
 *         if self.is_year_set():             # <<<<<<<<<<<<<<
 *             reprs.append("year=%d" % self.year)
 *         elif self._yidx != -1:
*/
    goto __pyx_L3;
  }

  /* "cytimes/parser.py":2250
 *         if self.is_year_set():
 *             reprs.append("year=%d" % self.year)
 *         elif self._yidx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("year=%d" % self._ymd[self._yidx])
 *         # . month
*/
  __pyx_t_2 = (__pyx_v_self->_yidx != -1L);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2251
 *             reprs.append("year=%d" % self.year)
 *         elif self._yidx != -1:
 *             reprs.append("year=%d" % self._ymd[self._yidx])             # <<<<<<<<<<<<<<
 *         # . month
 *         if self.is_month_set():
*/
    __pyx_t_3 = __Pyx_PyLong_From_int((__pyx_v_self->_ymd[__pyx_v_self->_yidx])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_year_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2251, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2250
 *         if self.is_year_set():
 *             reprs.append("year=%d" % self.year)
 *         elif self._yidx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("year=%d" % self._ymd[self._yidx])
 *         # . month
*/
  }
  __pyx_L3:;

  /* "cytimes/parser.py":2253
 *             reprs.append("year=%d" % self._ymd[self._yidx])
 *         # . month
 *         if self.is_month_set():             # <<<<<<<<<<<<<<
 *             reprs.append("month=%d" % self.month)
 *         elif self._midx != -1:
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_month_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2254
 *         # . month
 *         if self.is_month_set():
 *             reprs.append("month=%d" % self.month)             # <<<<<<<<<<<<<<
 *         elif self._midx != -1:
 *             reprs.append("month=%d" % self._ymd[self._midx])
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->month); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_month_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2254, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2253
 *             reprs.append("year=%d" % self._ymd[self._yidx])
 *         # . month
 *         if self.is_month_set():             # <<<<<<<<<<<<<<
 *             reprs.append("month=%d" % self.month)
 *         elif self._midx != -1:
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":2255
 *         if self.is_month_set():
 *             reprs.append("month=%d" % self.month)
 *         elif self._midx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("month=%d" % self._ymd[self._midx])
 *         # . day
*/
  __pyx_t_2 = (__pyx_v_self->_midx != -1L);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2256
 *             reprs.append("month=%d" % self.month)
 *         elif self._midx != -1:
 *             reprs.append("month=%d" % self._ymd[self._midx])             # <<<<<<<<<<<<<<
 *         # . day
 *         if self.is_day_set():
*/
    __pyx_t_3 = __Pyx_PyLong_From_int((__pyx_v_self->_ymd[__pyx_v_self->_midx])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_month_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2256, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2255
 *         if self.is_month_set():
 *             reprs.append("month=%d" % self.month)
 *         elif self._midx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("month=%d" % self._ymd[self._midx])
 *         # . day
*/
  }
  __pyx_L4:;

  /* "cytimes/parser.py":2258
 *             reprs.append("month=%d" % self._ymd[self._midx])
 *         # . day
 *         if self.is_day_set():             # <<<<<<<<<<<<<<
 *             reprs.append("day=%d" % self.day)
 *         elif self._didx != -1:
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_day_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2259
 *         # . day
 *         if self.is_day_set():
 *             reprs.append("day=%d" % self.day)             # <<<<<<<<<<<<<<
 *         elif self._didx != -1:
 *             reprs.append("day=%d" % self._ymd[self._didx])
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->day); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_day_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2259, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2258
 *             reprs.append("month=%d" % self._ymd[self._midx])
 *         # . day
 *         if self.is_day_set():             # <<<<<<<<<<<<<<
 *             reprs.append("day=%d" % self.day)
 *         elif self._didx != -1:
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2260
 *         if self.is_day_set():
 *             reprs.append("day=%d" % self.day)
 *         elif self._didx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("day=%d" % self._ymd[self._didx])
 *         # . rest
*/
  __pyx_t_2 = (__pyx_v_self->_didx != -1L);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2261
 *             reprs.append("day=%d" % self.day)
 *         elif self._didx != -1:
 *             reprs.append("day=%d" % self._ymd[self._didx])             # <<<<<<<<<<<<<<
 *         # . rest
 *         if self.is_hour_set():
*/
    __pyx_t_3 = __Pyx_PyLong_From_int((__pyx_v_self->_ymd[__pyx_v_self->_didx])); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_day_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2261, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2260
 *         if self.is_day_set():
 *             reprs.append("day=%d" % self.day)
 *         elif self._didx != -1:             # <<<<<<<<<<<<<<
 *             reprs.append("day=%d" % self._ymd[self._didx])
 *         # . rest
*/
  }
  __pyx_L5:;

  /* "cytimes/parser.py":2263
 *             reprs.append("day=%d" % self._ymd[self._didx])
 *         # . rest
 *         if self.is_hour_set():             # <<<<<<<<<<<<<<
 *             reprs.append("hour=%d" % self.hour)
 *         if self.is_minute_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_hour_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2264
 *         # . rest
 *         if self.is_hour_set():
 *             reprs.append("hour=%d" % self.hour)             # <<<<<<<<<<<<<<
 *         if self.is_minute_set():
 *             reprs.append("minute=%d" % self.minute)
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->hour); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_hour_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2264, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2263
 *             reprs.append("day=%d" % self._ymd[self._didx])
 *         # . rest
 *         if self.is_hour_set():             # <<<<<<<<<<<<<<
 *             reprs.append("hour=%d" % self.hour)
 *         if self.is_minute_set():
*/
  }

  /* "cytimes/parser.py":2265
 *         if self.is_hour_set():
 *             reprs.append("hour=%d" % self.hour)
 *         if self.is_minute_set():             # <<<<<<<<<<<<<<
 *             reprs.append("minute=%d" % self.minute)
 *         if self.is_second_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_minute_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2266
 *             reprs.append("hour=%d" % self.hour)
 *         if self.is_minute_set():
 *             reprs.append("minute=%d" % self.minute)             # <<<<<<<<<<<<<<
 *         if self.is_second_set():
 *             reprs.append("second=%d" % self.second)
*/
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_self->minute); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_minute_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2266, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2266, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2265
 *         if self.is_hour_set():
 *             reprs.append("hour=%d" % self.hour)
 *         if self.is_minute_set():             # <<<<<<<<<<<<<<
 *             reprs.append("minute=%d" % self.minute)
 *         if self.is_second_set():
*/
  }

  /* "cytimes/parser.py":2267
 *         if self.is_minute_set():
 *             reprs.append("minute=%d" % self.minute)
 *         if self.is_second_set():             # <<<<<<<<<<<<<<
 *             reprs.append("second=%d" % self.second)
 *         if self.is_microsecond_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_second_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2268
 *             reprs.append("minute=%d" % self.minute)
 *         if self.is_second_set():
 *             reprs.append("second=%d" % self.second)             # <<<<<<<<<<<<<<
 *         if self.is_microsecond_set():
 *             reprs.append("microsecond=%d" % self.microsecond)
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->second); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_second_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2268, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2267
 *         if self.is_minute_set():
 *             reprs.append("minute=%d" % self.minute)
 *         if self.is_second_set():             # <<<<<<<<<<<<<<
 *             reprs.append("second=%d" % self.second)
 *         if self.is_microsecond_set():
*/
  }

  /* "cytimes/parser.py":2269
 *         if self.is_second_set():
 *             reprs.append("second=%d" % self.second)
 *         if self.is_microsecond_set():             # <<<<<<<<<<<<<<
 *             reprs.append("microsecond=%d" % self.microsecond)
 *         if self.is_weekday_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2270
 *             reprs.append("second=%d" % self.second)
 *         if self.is_microsecond_set():
 *             reprs.append("microsecond=%d" % self.microsecond)             # <<<<<<<<<<<<<<
 *         if self.is_weekday_set():
 *             reprs.append("weekday=%d" % self.weekday)
*/
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_self->microsecond); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_microsecond_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2270, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2269
 *         if self.is_second_set():
 *             reprs.append("second=%d" % self.second)
 *         if self.is_microsecond_set():             # <<<<<<<<<<<<<<
 *             reprs.append("microsecond=%d" % self.microsecond)
 *         if self.is_weekday_set():
*/
  }

  /* "cytimes/parser.py":2271
 *         if self.is_microsecond_set():
 *             reprs.append("microsecond=%d" % self.microsecond)
 *         if self.is_weekday_set():             # <<<<<<<<<<<<<<
 *             reprs.append("weekday=%d" % self.weekday)
 *         if self.is_doy_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_weekday_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2272
 *             reprs.append("microsecond=%d" % self.microsecond)
 *         if self.is_weekday_set():
 *             reprs.append("weekday=%d" % self.weekday)             # <<<<<<<<<<<<<<
 *         if self.is_doy_set():
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->weekday); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_weekday_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2272, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2271
 *         if self.is_microsecond_set():
 *             reprs.append("microsecond=%d" % self.microsecond)
 *         if self.is_weekday_set():             # <<<<<<<<<<<<<<
 *             reprs.append("weekday=%d" % self.weekday)
 *         if self.is_doy_set():
*/
  }

  /* "cytimes/parser.py":2273
 *         if self.is_weekday_set():
 *             reprs.append("weekday=%d" % self.weekday)
 *         if self.is_doy_set():             # <<<<<<<<<<<<<<
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
 *         if self.is_ampm_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_doy_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2274
 *             reprs.append("weekday=%d" % self.weekday)
 *         if self.is_doy_set():
 *             reprs.append("doy(day-of-year)=%d" % self.doy)             # <<<<<<<<<<<<<<
 *         if self.is_ampm_set():
 *             reprs.append("ampm=%d" % self.ampm)
*/
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_self->doy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_doy_day_of_year_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2274, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2273
 *         if self.is_weekday_set():
 *             reprs.append("weekday=%d" % self.weekday)
 *         if self.is_doy_set():             # <<<<<<<<<<<<<<
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
 *         if self.is_ampm_set():
*/
  }

  /* "cytimes/parser.py":2275
 *         if self.is_doy_set():
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
 *         if self.is_ampm_set():             # <<<<<<<<<<<<<<
 *             reprs.append("ampm=%d" % self.ampm)
 *         if self.is_tzoffset_set():
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_ampm_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2276
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
 *         if self.is_ampm_set():
 *             reprs.append("ampm=%d" % self.ampm)             # <<<<<<<<<<<<<<
 *         if self.is_tzoffset_set():
 *             reprs.append("tzoffset=%d" % self.tzoffset)
*/
    __pyx_t_1 = __Pyx_PyLong_From_int(__pyx_v_self->ampm); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_ampm_d, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2276, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2276, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":2275
 *         if self.is_doy_set():
 *             reprs.append("doy(day-of-year)=%d" % self.doy)
 *         if self.is_ampm_set():             # <<<<<<<<<<<<<<
 *             reprs.append("ampm=%d" % self.ampm)
 *         if self.is_tzoffset_set():
*/
  }

  /* "cytimes/parser.py":2277
 *         if self.is_ampm_set():
 *             reprs.append("ampm=%d" % self.ampm)
 *         if self.is_tzoffset_set():             # <<<<<<<<<<<<<<
 *             reprs.append("tzoffset=%d" % self.tzoffset)
 * 
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(__pyx_v_self);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2278
 *             reprs.append("ampm=%d" % self.ampm)
 *         if self.is_tzoffset_set():
 *             reprs.append("tzoffset=%d" % self.tzoffset)             # <<<<<<<<<<<<<<
 * 
 *         # Construct
*/
    __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v_self->tzoffset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_tzoffset_d, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2278, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_reprs, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2278, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2277
 *         if self.is_ampm_set():
 *             reprs.append("ampm=%d" % self.ampm)
 *         if self.is_tzoffset_set():             # <<<<<<<<<<<<<<
 *             reprs.append("tzoffset=%d" % self.tzoffset)
 * 
*/
  }

  /* "cytimes/parser.py":2281
 * 
 *         # Construct
 *         return "<'%s' (resolved=%s: %s)>" % (             # <<<<<<<<<<<<<<
 *             self.__class__.__name__,
 *             self._resolved,
*/
  __Pyx_XDECREF(__pyx_r);

  /* "cytimes/parser.py":2282
 *         # Construct
 *         return "<'%s' (resolved=%s: %s)>" % (
 *             self.__class__.__name__,             # <<<<<<<<<<<<<<
 *             self._resolved,
 *             " ".join(reprs),
*/
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_class); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_mstate_global->__pyx_n_u_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_t_3), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2282, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "cytimes/parser.py":2283
 *         return "<'%s' (resolved=%s: %s)>" % (
 *             self.__class__.__name__,
 *             self._resolved,             # <<<<<<<<<<<<<<
 *             " ".join(reprs),
 *         )
*/
  __pyx_t_3 = __Pyx_PyUnicode_FromBInt_bint(__pyx_v_self->_resolved); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2283, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "cytimes/parser.py":2284
 *             self.__class__.__name__,
 *             self._resolved,
 *             " ".join(reprs),             # <<<<<<<<<<<<<<
 *         )
 * 
*/
  __pyx_t_5 = PyUnicode_Join(__pyx_mstate_global->__pyx_kp_u__8, __pyx_v_reprs); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2284, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6[0] = __pyx_mstate_global->__pyx_kp_u__15;
  __pyx_t_6[1] = __pyx_t_1;
  __pyx_t_6[2] = __pyx_mstate_global->__pyx_kp_u_resolved;
  __pyx_t_6[3] = __pyx_t_3;
  __pyx_t_6[4] = __pyx_mstate_global->__pyx_kp_u__18;
  __pyx_t_6[5] = __pyx_t_5;
  __pyx_t_6[6] = __pyx_mstate_global->__pyx_kp_u__17;

  /* "cytimes/parser.py":2281
 * 
 *         # Construct
 *         return "<'%s' (resolved=%s: %s)>" % (             # <<<<<<<<<<<<<<
 *             self.__class__.__name__,
 *             self._resolved,
*/
  __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_6, 7, 2 * 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_1) + 12 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_1) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5));
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2281, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":2243
 * 
 *     # Special methods -------------------------------------------------
 *     def __repr__(self) -> str:             # <<<<<<<<<<<<<<
 *         reprs: list[str] = []
 * 
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("cytimes.parser.Result.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_reprs);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2287
 *         )
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return self.valid()
 * 
*/

/* Python wrapper */
static int __pyx_pw_7cytimes_6parser_6Result_5__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_7cytimes_6parser_6Result_5__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_7cytimes_6parser_6Result_4__bool__(((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_v_self));

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

static int __pyx_pf_7cytimes_6parser_6Result_4__bool__(struct __pyx_obj_7cytimes_6parser_Result *__pyx_v_self) {
  int __pyx_r;

  /* "cytimes/parser.py":2288
 * 
 *     def __bool__(self) -> bool:
 *         return self.valid()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = __pyx_f_7cytimes_6parser_6Result_valid(__pyx_v_self);
  goto __pyx_L0;

  /* "cytimes/parser.py":2287
 *         )
 * 
 *     def __bool__(self) -> bool:             # <<<<<<<<<<<<<<
 *         return self.valid()
 * 
*/

  /* function exit code */
  __pyx_L0:;
  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_7cytimes_6parser_6Result_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_7cytimes_6parser_6Result_7__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Result_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_6Result_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_7cytimes_6parser_6Result_6__reduce_cython__(((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_6Result_6__reduce_cython__(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Result *__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(7, 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("cytimes.parser.Result.__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_7cytimes_6parser_6Result_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_7cytimes_6parser_6Result_9__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Result_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_6Result_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(7, 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(7, 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(7, 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(7, 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(7, 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(7, 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("cytimes.parser.Result.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7cytimes_6parser_6Result_8__setstate_cython__(((struct __pyx_obj_7cytimes_6parser_Result *)__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_7cytimes_6parser_6Result_8__setstate_cython__(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Result *__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(7, 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("cytimes.parser.Result.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2320
 *     __cls: object
 * 
 *     def __init__(self, cfg: Configs = None) -> None:             # <<<<<<<<<<<<<<
 *         """Flexible date/time parser with ISO fast-path and token heuristics.
 * 
*/

/* Python wrapper */
static int __pyx_pw_7cytimes_6parser_6Parser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
PyDoc_STRVAR(__pyx_doc_7cytimes_6parser_6Parser___init__, "Flexible date/time parser with ISO fast-path and token heuristics.\n\n        The `Parser` reads a free-form date/time string and populates an\n        internal `Result` accumulator via two complementary strategies:\n\n        1) `ISO fast-path`: a tuned parser for ISO-8601 calendar/ordinal/week dates\n        with optional time, fractional seconds, and timezone. When the core ISO\n        portion parses but an extra tail remains (e.g., AM/PM, weekday, timezone\n        adornments), a lightweight \342\200\234ISO-extra\342\200\235 pass consumes the tail.\n        2) `Heuristic token path`: a tokenizer + left\342\206\222right scan that recognizes\n        numeric blocks, month/weekday names, AM/PM, timezone names, and timezone\n        offsets. Ambiguous Y/M/D triples are resolved later according to the\n        configuration (or explicit flags passed to `parse`).\n\n        The parser defers construction of the final `datetime` object until all\n        fields have been gathered and disambiguated.\n\n        :param cfg `<'Configs/None'>`: The Parser configuration. Defaults to `None`.\n\n            - If `None`, uses the module's default `Configs`.\n            - For more details, see the `Configs` class documentation.\n        ");
#if CYTHON_UPDATE_DESCRIPTOR_DOC
struct wrapperbase __pyx_wrapperbase_7cytimes_6parser_6Parser___init__;
#endif
static int __pyx_pw_7cytimes_6parser_6Parser_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 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_cfg,0};
    const Py_ssize_t __pyx_kwds_len = (__pyx_kwds) ? __Pyx_NumKwargs_VARARGS(__pyx_kwds) : 0;
    if (unlikely(__pyx_kwds_len) < 0) __PYX_ERR(0, 2320, __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(0, 2320, __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(0, 2320, __pyx_L3_error)
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)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(0, 2320, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[0]) values[0] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));
    }
    __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)values[0]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 2320, __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("cytimes.parser.Parser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cfg), __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, 1, "cfg", 0))) __PYX_ERR(0, 2320, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_6Parser___init__(((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_v_self), __pyx_v_cfg);

  /* 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_7cytimes_6parser_6Parser___init__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg) {
  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);
  __Pyx_INCREF((PyObject *)__pyx_v_cfg);

  /* "cytimes/parser.py":2343
 *             - For more details, see the `Configs` class documentation.
 *         """
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         self._cfg = cfg
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_cfg) == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2344
 *         """
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS             # <<<<<<<<<<<<<<
 *         self._cfg = cfg
 *         self._res = Result()
*/
    __Pyx_INCREF((PyObject *)__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);
    __Pyx_DECREF_SET(__pyx_v_cfg, __pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);

    /* "cytimes/parser.py":2343
 *             - For more details, see the `Configs` class documentation.
 *         """
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         self._cfg = cfg
*/
  }

  /* "cytimes/parser.py":2345
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
 *         self._cfg = cfg             # <<<<<<<<<<<<<<
 *         self._res = Result()
 * 
*/
  __Pyx_INCREF((PyObject *)__pyx_v_cfg);
  __Pyx_GIVEREF((PyObject *)__pyx_v_cfg);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_cfg);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_cfg);
  __pyx_v_self->_cfg = __pyx_v_cfg;

  /* "cytimes/parser.py":2346
 *             cfg = _DEFAULT_CONFIGS
 *         self._cfg = cfg
 *         self._res = Result()             # <<<<<<<<<<<<<<
 * 
 *     # Parse --------------------------------------------------------------------------------
*/
  __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_7cytimes_6parser_Result, __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(0, 2346, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __Pyx_GIVEREF((PyObject *)__pyx_t_2);
  __Pyx_GOTREF((PyObject *)__pyx_v_self->_res);
  __Pyx_DECREF((PyObject *)__pyx_v_self->_res);
  __pyx_v_self->_res = ((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "cytimes/parser.py":2320
 *     __cls: object
 * 
 *     def __init__(self, cfg: Configs = None) -> None:             # <<<<<<<<<<<<<<
 *         """Flexible date/time parser with ISO fast-path and token heuristics.
 * 
*/

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.Parser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cfg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/

static PyObject *__pyx_pw_7cytimes_6parser_6Parser_3parse(PyObject *__pyx_v_self, 
#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 PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser_parse(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_6Parser_parse *__pyx_optional_args) {

  /* "cytimes/parser.py":2353
 *         self,
 *         dtstr: str,
 *         default: object = None,             # <<<<<<<<<<<<<<
 *         yearfirst: object = None,
 *         dayfirst: object = None,
*/
  PyObject *__pyx_v_default = ((PyObject *)Py_None);

  /* "cytimes/parser.py":2354
 *         dtstr: str,
 *         default: object = None,
 *         yearfirst: object = None,             # <<<<<<<<<<<<<<
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,
*/
  PyObject *__pyx_v_yearfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":2355
 *         default: object = None,
 *         yearfirst: object = None,
 *         dayfirst: object = None,             # <<<<<<<<<<<<<<
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
*/
  PyObject *__pyx_v_dayfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":2356
 *         yearfirst: object = None,
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *         isoformat: cython.bint = True,
 *         dtclass: object = None,
*/
  int __pyx_v_ignoretz = ((int)1);

  /* "cytimes/parser.py":2357
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *         dtclass: object = None,
 *     ) -> datetime.datetime:
*/
  int __pyx_v_isoformat = ((int)1);

  /* "cytimes/parser.py":2358
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
 *         dtclass: object = None,             # <<<<<<<<<<<<<<
 *     ) -> datetime.datetime:
 *         """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__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;
  size_t __pyx_t_7;
  int __pyx_t_8;
  struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  int __pyx_t_12;
  PyObject *__pyx_t_13[5];
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default = __pyx_optional_args->__pyx_default;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_yearfirst = __pyx_optional_args->yearfirst;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dayfirst = __pyx_optional_args->dayfirst;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_ignoretz = __pyx_optional_args->ignoretz;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_isoformat = __pyx_optional_args->isoformat;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_dtclass = __pyx_optional_args->dtclass;
              }
            }
          }
        }
      }
    }
  }

  /* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/
  /* Check if called by wrapper */
  if (unlikely(__pyx_skip_dispatch)) ;
  /* Check if overridden in Python */
  else if (
  #if !CYTHON_USE_TYPE_SLOTS
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self)) != __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser &&
  __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), Py_TPFLAGS_HAVE_GC))
  #else
  unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0 || __Pyx_PyType_HasFeature(Py_TYPE(((PyObject *)__pyx_v_self)), (Py_TPFLAGS_IS_ABSTRACT | Py_TPFLAGS_HEAPTYPE)))
  #endif
  ) {
    #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    static PY_UINT64_T __pyx_tp_dict_version = __PYX_DICT_VERSION_INIT, __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
    if (unlikely(!__Pyx_object_dict_version_matches(((PyObject *)__pyx_v_self), __pyx_tp_dict_version, __pyx_obj_dict_version))) {
      PY_UINT64_T __pyx_typedict_guard = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      #endif
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_parse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2349, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!__Pyx_IsSameCFunction(__pyx_t_1, (void(*)(void)) __pyx_pw_7cytimes_6parser_6Parser_3parse)) {
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_3 = NULL;
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_4 = __pyx_t_1; 
        __pyx_t_5 = __Pyx_PyBool_FromLong(__pyx_v_ignoretz); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2349, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_isoformat); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2349, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = 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_7 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[8] = {__pyx_t_3, __pyx_v_dtstr, __pyx_v_default, __pyx_v_yearfirst, __pyx_v_dayfirst, __pyx_t_5, __pyx_t_6, __pyx_v_dtclass};
          __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_4, __pyx_callargs+__pyx_t_7, (8-__pyx_t_7) | (__pyx_t_7*__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_4); __pyx_t_4 = 0;
          if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2349, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_2);
        }
        if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 2349, __pyx_L1_error)
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
        __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        goto __pyx_L0;
      }
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
      __pyx_tp_dict_version = __Pyx_get_tp_dict_version(((PyObject *)__pyx_v_self));
      __pyx_obj_dict_version = __Pyx_get_object_dict_version(((PyObject *)__pyx_v_self));
      if (unlikely(__pyx_typedict_guard != __pyx_tp_dict_version)) {
        __pyx_tp_dict_version = __pyx_obj_dict_version = __PYX_DICT_VERSION_INIT;
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      #if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
    }
    #endif
  }

  /* "cytimes/parser.py":2420
 *         """
 *         # Validate dtstr
 *         if dtstr is None:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(self._cls(), "Cannot parse None.")
 * 
*/
  __pyx_t_8 = (__pyx_v_dtstr == ((PyObject*)Py_None));
  if (__pyx_t_8) {

    /* "cytimes/parser.py":2421
 *         # Validate dtstr
 *         if dtstr is None:
 *             errors.raise_parser_failed_error(self._cls(), "Cannot parse None.")             # <<<<<<<<<<<<<<
 * 
 *         # Settings
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__cls(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9.__pyx_n = 2;
    __pyx_t_9.cls = __pyx_t_1;
    __pyx_t_9.error_msg = __pyx_mstate_global->__pyx_kp_u_Cannot_parse_None;
    __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_9); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2421, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "cytimes/parser.py":2420
 *         """
 *         # Validate dtstr
 *         if dtstr is None:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(self._cls(), "Cannot parse None.")
 * 
*/
  }

  /* "cytimes/parser.py":2424
 * 
 *         # Settings
 *         self._ignoretz = ignoretz             # <<<<<<<<<<<<<<
 * 
 *         # Process
*/
  __pyx_v_self->_ignoretz = __pyx_v_ignoretz;

  /* "cytimes/parser.py":2427
 * 
 *         # Process
 *         self._process(dtstr, isoformat)             # <<<<<<<<<<<<<<
 * 
 *         # Prepare
*/
  __pyx_t_8 = __pyx_f_7cytimes_6parser_6Parser__process(__pyx_v_self, __pyx_v_dtstr, __pyx_v_isoformat); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 2427, __pyx_L1_error)

  /* "cytimes/parser.py":2431
 *         # Prepare
 *         if not self._res.resolve(
 *             self._cfg._yearfirst if yearfirst is None else bool(yearfirst),             # <<<<<<<<<<<<<<
 *             self._cfg._dayfirst if dayfirst is None else bool(dayfirst),
 *         ):
*/
  __pyx_t_10 = (__pyx_v_yearfirst == Py_None);
  if (__pyx_t_10) {
    __pyx_t_8 = __pyx_v_self->_cfg->_yearfirst;
  } else {
    __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_v_yearfirst); if (unlikely((__pyx_t_11 < 0))) __PYX_ERR(0, 2431, __pyx_L1_error)
    __pyx_t_8 = (!(!__pyx_t_11));
  }

  /* "cytimes/parser.py":2432
 *         if not self._res.resolve(
 *             self._cfg._yearfirst if yearfirst is None else bool(yearfirst),
 *             self._cfg._dayfirst if dayfirst is None else bool(dayfirst),             # <<<<<<<<<<<<<<
 *         ):
 *             errors.raise_parser_failed_error(
*/
  __pyx_t_11 = (__pyx_v_dayfirst == Py_None);
  if (__pyx_t_11) {
    __pyx_t_10 = __pyx_v_self->_cfg->_dayfirst;
  } else {
    __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_v_dayfirst); if (unlikely((__pyx_t_12 < 0))) __PYX_ERR(0, 2432, __pyx_L1_error)
    __pyx_t_10 = (!(!__pyx_t_12));
  }

  /* "cytimes/parser.py":2430
 * 
 *         # Prepare
 *         if not self._res.resolve(             # <<<<<<<<<<<<<<
 *             self._cfg._yearfirst if yearfirst is None else bool(yearfirst),
 *             self._cfg._dayfirst if dayfirst is None else bool(dayfirst),
*/
  __pyx_t_11 = (!__pyx_f_7cytimes_6parser_6Result_resolve(__pyx_v_self->_res, __pyx_t_8, __pyx_t_10));
  if (__pyx_t_11) {

    /* "cytimes/parser.py":2435
 *         ):
 *             errors.raise_parser_failed_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Failed to parse '%s' %s.\n"
 *                 "Cannot extract any datetime components." % (dtstr, type(dtstr)),
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__cls(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2435, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);

    /* "cytimes/parser.py":2437
 *                 self._cls(),
 *                 "Failed to parse '%s' %s.\n"
 *                 "Cannot extract any datetime components." % (dtstr, type(dtstr)),             # <<<<<<<<<<<<<<
 *             )
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_dtstr))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_13[0] = __pyx_mstate_global->__pyx_kp_u_Failed_to_parse;
    __pyx_t_13[1] = __pyx_v_dtstr;
    __pyx_t_13[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_13[3] = __pyx_t_2;
    __pyx_t_13[4] = __pyx_mstate_global->__pyx_kp_u_Cannot_extract_any_datetime_com;

    /* "cytimes/parser.py":2436
 *             errors.raise_parser_failed_error(
 *                 self._cls(),
 *                 "Failed to parse '%s' %s.\n"             # <<<<<<<<<<<<<<
 *                 "Cannot extract any datetime components." % (dtstr, type(dtstr)),
 *             )
*/
    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_13, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_dtstr) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 41, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_dtstr) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2));
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2436, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "cytimes/parser.py":2434
 *             self._cfg._dayfirst if dayfirst is None else bool(dayfirst),
 *         ):
 *             errors.raise_parser_failed_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Failed to parse '%s' %s.\n"
*/
    __pyx_t_9.__pyx_n = 2;
    __pyx_t_9.cls = __pyx_t_1;
    __pyx_t_9.error_msg = ((PyObject*)__pyx_t_4);
    __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_9); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2434, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "cytimes/parser.py":2430
 * 
 *         # Prepare
 *         if not self._res.resolve(             # <<<<<<<<<<<<<<
 *             self._cfg._yearfirst if yearfirst is None else bool(yearfirst),
 *             self._cfg._dayfirst if dayfirst is None else bool(dayfirst),
*/
  }

  /* "cytimes/parser.py":2441
 * 
 *         # Build
 *         return self._build(dtstr, default, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_6parser_6Parser__build(__pyx_v_self, __pyx_v_dtstr, __pyx_v_default, __pyx_v_dtclass)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
  __pyx_t_4 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/

  /* 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_AddTraceback("cytimes.parser.Parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_3parse(PyObject *__pyx_v_self, 
#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_7cytimes_6parser_6Parser_2parse, "Parse a date/time string into a datetime `<'datetime.datetime'>`.\n\n        ## Parsing Strategies\n        1) `ISO fast-path` (when `isoformat=True`): attempts an ISO 8601 calendar/ordinal/week\n          date plus optional time, fractional seconds, and timezone. If an extra tail remains\n          (e.g., AM/PM, weekday, timezone tail), a lightweight ISO-extra pass handles it.\n        2) `Heuristic token path` (fallback or when `isoformat=False`): tokenizes the string\n          and scans left\342\206\222right, using specialized handlers for numeric blocks, month/weekday\n          names, AM/PM, timezone names, and timezone offsets.\n\n        After parsing, ambiguous Y/M/D fields are resolved using `yearfirst`/`dayfirst` (or the\n        configured defaults when they are `None`). Finally, a datetime is built using parsed\n        fields plus `default` for any missing calendar components.\n\n        :param dtstr `<'str'>`: The input date/time string.\n        :param default `<'datetime/date/None'>`: Fallback source for missing Y/M/D. Defaults to `None`.\n            If `None` and required fields are missing, raises an error.\n        :param yearfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D value as year. Defaults to `None`.\n            If 'None', uses `cfg.yearfirst` if 'cfg' is specified; otherwise. Defaults to `True`.\n        :param dayfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D values as day. Defaults to `None`.\n            If 'None', uses `cfg.dayfirst` if 'cfg' is specified; otherwise. Defaults to `False`.\n        :param ignoretz `<'bool'>`: If `True`, ignore any timezone information and return a naive datetime. Defaults to `True`.\n            When timezone info is not needed, setting to `True` can improve performance.\n        :param isoformat `<'bool'>`: If `True`, attempt ISO parsing first (automatically falls back to token parsing on failure).\n            Otherwise always use token parsing. Defaults to `True`. For most common dat""etime strings,\n            ISO parsing (when matched even partially) is faster.\n        :param dtclass `<'type[datetime.datetime]/None'>`: Optional custom datetime class. Defaults to `None`.\n            If `None` uses python's built-in `datetime.datetime` as the constructor.\n        :returns `<'datetime.datetime'>`: The parsed datetime (or subclass if 'dtclass' is specified).\n        :raises `<'ParserFailedError'>`: If nothing extractable is found (or ISO parsing\n            fails and token scanning yields no fields).\n        :raises `<'ParserBuildError'>`: If fields cannot be assembled into a datetime\n            (e.g., invalid field combination, unsupported custom class).\n\n        ## Field Construction\n        - `Y/M/D`: use parsed values; if missing, copy from `default` (if provided), otherwise raise.\n          If `day > 28`, it is clamped to the month's maximum.\n        - `Weekday`: if a weekday was parsed and does not match `(Y, M, D)`, the date is shifted by\n          the difference so the resulting weekday matches the requested one (within the same week as\n          the parsed date).\n        - `Time`: unset H/M/S/us default to `0`. AM/PM is applied when present.\n        - `Timezone`:\n            * If `ignoretz=True`, any parsed timezone info is ignored and a naive datetime\n              (`tzinfo=None`) is returned.\n            * Otherwise, a timezone-aware datetime is returned if a timezone name/offset was parsed:\n              UTC for offset `0`, or a fixed-offset timezone for non-zero offsets.\n\n        ## Ambiguous Y/M/D\n        Both `yearfirst` and `dayfirst` control how ambiguous digit tokens are interpreted;\n        `yearfirst` has higher priority. When all three are ambiguous (e.g., `01/05/09`):\n        - `yearfirst=False & dayfirst=False` \342\206\222 `M/D/Y`  \342\206\222 `2009-01-05`\n        - `yearfirst=False & dayfirst=True`  \342\206\222 `D/M/Y`  \342\206\222 `2009-05-01`\n        - `yearfirst=True  & dayfirst=False` ""\342\206\222 `Y/M/D`  \342\206\222 `2001-05-09`\n        - `yearfirst=True  & dayfirst=True`  \342\206\222 `Y/D/M`  \342\206\222 `2001-09-05`\n\n        When the year is already known (e.g., `32/01/05`), `dayfirst` alone decides between `Y/M/D`\n        vs `Y/D/M`. When only one value is ambiguous, the parser picks the only consistent\n        interpretation and ignores the flags.\n        ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_6Parser_3parse = {"parse", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Parser_3parse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_6Parser_2parse};
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_3parse(PyObject *__pyx_v_self, 
#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_dtstr = 0;
  PyObject *__pyx_v_default = 0;
  PyObject *__pyx_v_yearfirst = 0;
  PyObject *__pyx_v_dayfirst = 0;
  int __pyx_v_ignoretz;
  int __pyx_v_isoformat;
  PyObject *__pyx_v_dtclass = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[7] = {0,0,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("parse (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_dtstr,&__pyx_mstate_global->__pyx_n_u_default,&__pyx_mstate_global->__pyx_n_u_yearfirst,&__pyx_mstate_global->__pyx_n_u_dayfirst,&__pyx_mstate_global->__pyx_n_u_ignoretz,&__pyx_mstate_global->__pyx_n_u_isoformat,&__pyx_mstate_global->__pyx_n_u_dtclass,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, 2349, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2349, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2349, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2349, __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, 2349, __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, 2349, __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, 2349, __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, 2349, __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, "parse", 0) < (0)) __PYX_ERR(0, 2349, __pyx_L3_error)

      /* "cytimes/parser.py":2353
 *         self,
 *         dtstr: str,
 *         default: object = None,             # <<<<<<<<<<<<<<
 *         yearfirst: object = None,
 *         dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2354
 *         dtstr: str,
 *         default: object = None,
 *         yearfirst: object = None,             # <<<<<<<<<<<<<<
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2355
 *         default: object = None,
 *         yearfirst: object = None,
 *         dayfirst: object = None,             # <<<<<<<<<<<<<<
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2358
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
 *         dtclass: object = None,             # <<<<<<<<<<<<<<
 *     ) -> datetime.datetime:
 *         """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 7, i); __PYX_ERR(0, 2349, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 2349, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 2349, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 2349, __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, 2349, __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, 2349, __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, 2349, __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, 2349, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "cytimes/parser.py":2353
 *         self,
 *         dtstr: str,
 *         default: object = None,             # <<<<<<<<<<<<<<
 *         yearfirst: object = None,
 *         dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2354
 *         dtstr: str,
 *         default: object = None,
 *         yearfirst: object = None,             # <<<<<<<<<<<<<<
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2355
 *         default: object = None,
 *         yearfirst: object = None,
 *         dayfirst: object = None,             # <<<<<<<<<<<<<<
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":2358
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,
 *         dtclass: object = None,             # <<<<<<<<<<<<<<
 *     ) -> datetime.datetime:
 *         """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
      if (!values[6]) values[6] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_dtstr = ((PyObject*)values[0]);
    __pyx_v_default = values[1];
    __pyx_v_yearfirst = values[2];
    __pyx_v_dayfirst = values[3];
    if (values[4]) {
      __pyx_v_ignoretz = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_ignoretz == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2356, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":2356
 *         yearfirst: object = None,
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *         isoformat: cython.bint = True,
 *         dtclass: object = None,
*/
      __pyx_v_ignoretz = ((int)1);
    }
    if (values[5]) {
      __pyx_v_isoformat = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_isoformat == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2357, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":2357
 *         dayfirst: object = None,
 *         ignoretz: cython.bint = True,
 *         isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *         dtclass: object = None,
 *     ) -> datetime.datetime:
*/
      __pyx_v_isoformat = ((int)1);
    }
    __pyx_v_dtclass = values[6];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 7, __pyx_nargs); __PYX_ERR(0, 2349, __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("cytimes.parser.Parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dtstr), (&PyUnicode_Type), 0, "dtstr", 2))) __PYX_ERR(0, 2352, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_6Parser_2parse(((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_v_self), __pyx_v_dtstr, __pyx_v_default, __pyx_v_yearfirst, __pyx_v_dayfirst, __pyx_v_ignoretz, __pyx_v_isoformat, __pyx_v_dtclass);

  /* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/

  /* 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_7cytimes_6parser_6Parser_2parse(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, PyObject *__pyx_v_dtclass) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_6Parser_parse __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 6;
  __pyx_t_2.__pyx_default = __pyx_v_default;
  __pyx_t_2.yearfirst = __pyx_v_yearfirst;
  __pyx_t_2.dayfirst = __pyx_v_dayfirst;
  __pyx_t_2.ignoretz = __pyx_v_ignoretz;
  __pyx_t_2.isoformat = __pyx_v_isoformat;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_7cytimes_6parser_Parser->parse(__pyx_v_self, __pyx_v_dtstr, 1, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2443
 *         return self._build(dtstr, default, dtclass)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, int __pyx_v_isoformat) {
  PyObject *__pyx_v_err = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  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[4];
  PyObject *__pyx_t_12 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error __pyx_t_13;
  int __pyx_t_14;
  char const *__pyx_t_15;
  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;
  PyObject *__pyx_t_21 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_process", 0);

  /* "cytimes/parser.py":2472
 *         """
 *         # Reset result and (dtstr) position / length
 *         self._res._reset()             # <<<<<<<<<<<<<<
 *         self._pos = 0
 *         self._length = str_len(dtstr)
*/
  (void)(__pyx_f_7cytimes_6parser_6Result__reset(__pyx_v_self->_res));

  /* "cytimes/parser.py":2473
 *         # Reset result and (dtstr) position / length
 *         self._res._reset()
 *         self._pos = 0             # <<<<<<<<<<<<<<
 *         self._length = str_len(dtstr)
 * 
*/
  __pyx_v_self->_pos = 0;

  /* "cytimes/parser.py":2474
 *         self._res._reset()
 *         self._pos = 0
 *         self._length = str_len(dtstr)             # <<<<<<<<<<<<<<
 * 
 *         # Process
*/
  __pyx_v_self->_length = PyUnicode_GET_LENGTH(__pyx_v_dtstr);

  /* "cytimes/parser.py":2477
 * 
 *         # Process
 *         try:             # <<<<<<<<<<<<<<
 *             if isoformat:
 *                 self._process_iso_format(dtstr)
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "cytimes/parser.py":2478
 *         # Process
 *         try:
 *             if isoformat:             # <<<<<<<<<<<<<<
 *                 self._process_iso_format(dtstr)
 *             else:
*/
      if (__pyx_v_isoformat) {

        /* "cytimes/parser.py":2479
 *         try:
 *             if isoformat:
 *                 self._process_iso_format(dtstr)             # <<<<<<<<<<<<<<
 *             else:
 *                 self._process_timelex_tokens(dtstr)
*/
        __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__process_iso_format(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2479, __pyx_L3_error)

        /* "cytimes/parser.py":2478
 *         # Process
 *         try:
 *             if isoformat:             # <<<<<<<<<<<<<<
 *                 self._process_iso_format(dtstr)
 *             else:
*/
        goto __pyx_L9;
      }

      /* "cytimes/parser.py":2481
 *                 self._process_iso_format(dtstr)
 *             else:
 *                 self._process_timelex_tokens(dtstr)             # <<<<<<<<<<<<<<
 *         except AssertionError:
 *             raise
*/
      /*else*/ {
        __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2481, __pyx_L3_error)
      }
      __pyx_L9:;

      /* "cytimes/parser.py":2477
 * 
 *         # Process
 *         try:             # <<<<<<<<<<<<<<
 *             if isoformat:
 *                 self._process_iso_format(dtstr)
*/
    }
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;

    /* "cytimes/parser.py":2482
 *             else:
 *                 self._process_timelex_tokens(dtstr)
 *         except AssertionError:             # <<<<<<<<<<<<<<
 *             raise
 *         except Exception as err:
*/
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_AssertionError))));
    if (__pyx_t_5) {
      __Pyx_AddTraceback("cytimes.parser.Parser._process", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 2482, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_8);

      /* "cytimes/parser.py":2483
 *                 self._process_timelex_tokens(dtstr)
 *         except AssertionError:
 *             raise             # <<<<<<<<<<<<<<
 *         except Exception as err:
 *             errors.raise_parser_failed_error(
*/
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0;  __pyx_t_7 = 0;  __pyx_t_8 = 0; 
      __PYX_ERR(0, 2483, __pyx_L5_except_error)
    }

    /* "cytimes/parser.py":2484
 *         except AssertionError:
 *             raise
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(
 *                 self._cls(), "Failed to parse '%s' %s" % (dtstr, type(dtstr)), err
*/
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_5) {
      __Pyx_AddTraceback("cytimes.parser.Parser._process", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0) __PYX_ERR(0, 2484, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_8);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_err = __pyx_t_7;
      /*try:*/ {

        /* "cytimes/parser.py":2486
 *         except Exception as err:
 *             errors.raise_parser_failed_error(
 *                 self._cls(), "Failed to parse '%s' %s" % (dtstr, type(dtstr)), err             # <<<<<<<<<<<<<<
 *             )
 * 
*/
        __pyx_t_9 = __pyx_f_7cytimes_6parser_6Parser__cls(__pyx_v_self); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2486, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_10 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_dtstr))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2486, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_Failed_to_parse;
        __pyx_t_11[1] = __pyx_v_dtstr;
        __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u__9;
        __pyx_t_11[3] = __pyx_t_10;
        __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 4, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_dtstr) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_10), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_dtstr) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_10));
        if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2486, __pyx_L17_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

        /* "cytimes/parser.py":2485
 *             raise
 *         except Exception as err:
 *             errors.raise_parser_failed_error(             # <<<<<<<<<<<<<<
 *                 self._cls(), "Failed to parse '%s' %s" % (dtstr, type(dtstr)), err
 *             )
*/
        __pyx_t_13.__pyx_n = 3;
        __pyx_t_13.cls = __pyx_t_9;
        __pyx_t_13.error_msg = ((PyObject*)__pyx_t_12);
        __pyx_t_13.tb_exc = __pyx_v_err;
        __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_13); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2485, __pyx_L17_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }

      /* "cytimes/parser.py":2484
 *         except AssertionError:
 *             raise
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(
 *                 self._cls(), "Failed to parse '%s' %s" % (dtstr, type(dtstr)), err
*/
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          goto __pyx_L18;
        }
        __pyx_L17_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
          if ( unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
          __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_XGOTREF(__pyx_t_21);
          __pyx_t_5 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_16);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
          __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
          __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
          goto __pyx_L5_except_error;
        }
        __pyx_L18:;
      }
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":2477
 * 
 *         # Process
 *         try:             # <<<<<<<<<<<<<<
 *             if isoformat:
 *                 self._process_iso_format(dtstr)
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    __pyx_L8_try_end:;
  }

  /* "cytimes/parser.py":2490
 * 
 *         # Finished
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # Build --------------------------------------------------------------------------------
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2443
 *         return self._build(dtstr, default, dtclass)
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __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_12);
  __Pyx_AddTraceback("cytimes.parser.Parser._process", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2493
 * 
 *     # Build --------------------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _build(
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__build(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_dtclass) {
  int __pyx_v_offset;
  PyObject *__pyx_v_tzinfo = NULL;
  PyObject *__pyx_v_err = NULL;
  PyDateTime_DateTime *__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_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_tz_new __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12[4];
  PyObject *__pyx_t_13 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error __pyx_t_14;
  int __pyx_t_15;
  char const *__pyx_t_16;
  PyObject *__pyx_t_17 = NULL;
  PyObject *__pyx_t_18 = NULL;
  PyObject *__pyx_t_19 = NULL;
  PyObject *__pyx_t_20 = NULL;
  PyObject *__pyx_t_21 = NULL;
  PyObject *__pyx_t_22 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_build", 0);

  /* "cytimes/parser.py":2521
 *         :raises `<'ParserBuildError'>`: If an internal error occurs during building.
 *         """
 *         try:             # <<<<<<<<<<<<<<
 *             # Ignore timezone
 *             if self._ignoretz:
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
    __Pyx_XGOTREF(__pyx_t_1);
    __Pyx_XGOTREF(__pyx_t_2);
    __Pyx_XGOTREF(__pyx_t_3);
    /*try:*/ {

      /* "cytimes/parser.py":2523
 *         try:
 *             # Ignore timezone
 *             if self._ignoretz:             # <<<<<<<<<<<<<<
 *                 return self._gen_dt(default, None, dtclass)
 * 
*/
      if (__pyx_v_self->_ignoretz) {

        /* "cytimes/parser.py":2524
 *             # Ignore timezone
 *             if self._ignoretz:
 *                 return self._gen_dt(default, None, dtclass)             # <<<<<<<<<<<<<<
 * 
 *             # Timezone-naive
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_6parser_6Parser__gen_dt(__pyx_v_self, __pyx_v_default, Py_None, __pyx_v_dtclass)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2524, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L7_try_return;

        /* "cytimes/parser.py":2523
 *         try:
 *             # Ignore timezone
 *             if self._ignoretz:             # <<<<<<<<<<<<<<
 *                 return self._gen_dt(default, None, dtclass)
 * 
*/
      }

      /* "cytimes/parser.py":2527
 * 
 *             # Timezone-naive
 *             offset: cython.int = self._res.tzoffset             # <<<<<<<<<<<<<<
 *             if (
 *                 offset == utils.NULL_TZOFFSET
*/
      __pyx_t_5 = __pyx_v_self->_res->tzoffset;
      __pyx_v_offset = __pyx_t_5;

      /* "cytimes/parser.py":2529
 *             offset: cython.int = self._res.tzoffset
 *             if (
 *                 offset == utils.NULL_TZOFFSET             # <<<<<<<<<<<<<<
 *             ):  # -100_000 is the sentinel for 'no tzoffset'
 *                 return self._gen_dt(default, None, dtclass)
*/
      __pyx_t_6 = (__pyx_v_offset == __pyx_v_7cytimes_5utils_NULL_TZOFFSET);

      /* "cytimes/parser.py":2528
 *             # Timezone-naive
 *             offset: cython.int = self._res.tzoffset
 *             if (             # <<<<<<<<<<<<<<
 *                 offset == utils.NULL_TZOFFSET
 *             ):  # -100_000 is the sentinel for 'no tzoffset'
*/
      if (__pyx_t_6) {

        /* "cytimes/parser.py":2531
 *                 offset == utils.NULL_TZOFFSET
 *             ):  # -100_000 is the sentinel for 'no tzoffset'
 *                 return self._gen_dt(default, None, dtclass)             # <<<<<<<<<<<<<<
 * 
 *             # Timezone-aware
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_6parser_6Parser__gen_dt(__pyx_v_self, __pyx_v_default, Py_None, __pyx_v_dtclass)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2531, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L7_try_return;

        /* "cytimes/parser.py":2528
 *             # Timezone-naive
 *             offset: cython.int = self._res.tzoffset
 *             if (             # <<<<<<<<<<<<<<
 *                 offset == utils.NULL_TZOFFSET
 *             ):  # -100_000 is the sentinel for 'no tzoffset'
*/
      }

      /* "cytimes/parser.py":2535
 *             # Timezone-aware
 *             else:
 *                 tzinfo = utils.UTC if offset == 0 else utils.tz_new(0, 0, offset)             # <<<<<<<<<<<<<<
 *                 return self._gen_dt(default, tzinfo, dtclass)
 * 
*/
      /*else*/ {
        __pyx_t_6 = (__pyx_v_offset == 0);
        if (__pyx_t_6) {
          __Pyx_INCREF((PyObject *)__pyx_v_7cytimes_5utils_UTC);
          __pyx_t_4 = ((PyObject *)__pyx_v_7cytimes_5utils_UTC);
        } else {
          __pyx_t_8.__pyx_n = 3;
          __pyx_t_8.hours = 0;
          __pyx_t_8.minites = 0;
          __pyx_t_8.seconds = __pyx_v_offset;
          __pyx_t_7 = __pyx_f_7cytimes_5utils_tz_new(&__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2535, __pyx_L3_error)
          __Pyx_GOTREF(__pyx_t_7);
          __pyx_t_4 = __pyx_t_7;
          __pyx_t_7 = 0;
        }
        __pyx_v_tzinfo = __pyx_t_4;
        __pyx_t_4 = 0;

        /* "cytimes/parser.py":2536
 *             else:
 *                 tzinfo = utils.UTC if offset == 0 else utils.tz_new(0, 0, offset)
 *                 return self._gen_dt(default, tzinfo, dtclass)             # <<<<<<<<<<<<<<
 * 
 *         except Exception as err:
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_4 = ((PyObject *)__pyx_f_7cytimes_6parser_6Parser__gen_dt(__pyx_v_self, __pyx_v_default, __pyx_v_tzinfo, __pyx_v_dtclass)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2536, __pyx_L3_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
        __pyx_t_4 = 0;
        goto __pyx_L7_try_return;
      }

      /* "cytimes/parser.py":2521
 *         :raises `<'ParserBuildError'>`: If an internal error occurs during building.
 *         """
 *         try:             # <<<<<<<<<<<<<<
 *             # Ignore timezone
 *             if self._ignoretz:
*/
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;

    /* "cytimes/parser.py":2538
 *                 return self._gen_dt(default, tzinfo, dtclass)
 * 
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(
 *                 self._cls(),
*/
    __pyx_t_5 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_5) {
      __Pyx_AddTraceback("cytimes.parser.Parser._build", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(0, 2538, __pyx_L5_except_error)
      __Pyx_XGOTREF(__pyx_t_4);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_7);
      __pyx_v_err = __pyx_t_7;
      /*try:*/ {

        /* "cytimes/parser.py":2540
 *         except Exception as err:
 *             errors.raise_parser_failed_error(
 *                 self._cls(),             # <<<<<<<<<<<<<<
 *                 "Failed to build datetime from '%s'.\n%s" % (dtstr, self._res),
 *                 err,
*/
        __pyx_t_10 = __pyx_f_7cytimes_6parser_6Parser__cls(__pyx_v_self); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2540, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_10);

        /* "cytimes/parser.py":2541
 *             errors.raise_parser_failed_error(
 *                 self._cls(),
 *                 "Failed to build datetime from '%s'.\n%s" % (dtstr, self._res),             # <<<<<<<<<<<<<<
 *                 err,
 *             )
*/
        __pyx_t_11 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)__pyx_v_self->_res)), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2541, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12[0] = __pyx_mstate_global->__pyx_kp_u_Failed_to_build_datetime_from;
        __pyx_t_12[1] = __pyx_v_dtstr;
        __pyx_t_12[2] = __pyx_mstate_global->__pyx_kp_u__19;
        __pyx_t_12[3] = __pyx_t_11;
        __pyx_t_13 = __Pyx_PyUnicode_Join(__pyx_t_12, 4, 31 + __Pyx_PyUnicode_GET_LENGTH(__pyx_v_dtstr) + 3 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11), 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_v_dtstr) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11));
        if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2541, __pyx_L16_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;

        /* "cytimes/parser.py":2539
 * 
 *         except Exception as err:
 *             errors.raise_parser_failed_error(             # <<<<<<<<<<<<<<
 *                 self._cls(),
 *                 "Failed to build datetime from '%s'.\n%s" % (dtstr, self._res),
*/
        __pyx_t_14.__pyx_n = 3;
        __pyx_t_14.cls = __pyx_t_10;
        __pyx_t_14.error_msg = ((PyObject*)__pyx_t_13);
        __pyx_t_14.tb_exc = __pyx_v_err;
        __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_14); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 2539, __pyx_L16_error)
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
      }

      /* "cytimes/parser.py":2538
 *                 return self._gen_dt(default, tzinfo, dtclass)
 * 
 *         except Exception as err:             # <<<<<<<<<<<<<<
 *             errors.raise_parser_failed_error(
 *                 self._cls(),
*/
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          goto __pyx_L17;
        }
        __pyx_L16_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
           __Pyx_ExceptionSwap(&__pyx_t_20, &__pyx_t_21, &__pyx_t_22);
          if ( unlikely(__Pyx_GetException(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19) < 0)) __Pyx_ErrFetch(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_17);
          __Pyx_XGOTREF(__pyx_t_18);
          __Pyx_XGOTREF(__pyx_t_19);
          __Pyx_XGOTREF(__pyx_t_20);
          __Pyx_XGOTREF(__pyx_t_21);
          __Pyx_XGOTREF(__pyx_t_22);
          __pyx_t_5 = __pyx_lineno; __pyx_t_15 = __pyx_clineno; __pyx_t_16 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __Pyx_XGIVEREF(__pyx_t_20);
          __Pyx_XGIVEREF(__pyx_t_21);
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_ExceptionReset(__pyx_t_20, __pyx_t_21, __pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ErrRestore(__pyx_t_17, __pyx_t_18, __pyx_t_19);
          __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0;
          __pyx_lineno = __pyx_t_5; __pyx_clineno = __pyx_t_15; __pyx_filename = __pyx_t_16;
          goto __pyx_L5_except_error;
        }
        __pyx_L17:;
      }
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;

    /* "cytimes/parser.py":2521
 *         :raises `<'ParserBuildError'>`: If an internal error occurs during building.
 *         """
 *         try:             # <<<<<<<<<<<<<<
 *             # Ignore timezone
 *             if self._ignoretz:
*/
    __pyx_L5_except_error:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
  }

  /* "cytimes/parser.py":2493
 * 
 *     # Build --------------------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _build(
*/

  /* function exit code */
  __pyx_r = ((PyDateTime_DateTime *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cytimes.parser.Parser._build", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_tzinfo);
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2545
 *             )
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _gen_dt(
*/

static CYTHON_INLINE PyDateTime_DateTime *__pyx_f_7cytimes_6parser_6Parser__gen_dt(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_default, PyObject *__pyx_v_tzinfo, PyObject *__pyx_v_dtclass) {
  int __pyx_v_has_default;
  PyObject *__pyx_v_yy = NULL;
  PyObject *__pyx_v_mm = NULL;
  PyObject *__pyx_v_dd = NULL;
  int __pyx_v_wkd;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  long __pyx_v_hh;
  long __pyx_v_mi;
  long __pyx_v_ss;
  long __pyx_v_us;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  size_t __pyx_t_4;
  PY_LONG_LONG __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  long __pyx_t_10;
  int __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_dt_new __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_gen_dt", 0);

  /* "cytimes/parser.py":2581
 *         """
 *         # Check default
 *         has_default: cython.bint = utils.is_date(default)             # <<<<<<<<<<<<<<
 * 
 *         # . year
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_date(__pyx_v_default); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2581, __pyx_L1_error)
  __pyx_v_has_default = __pyx_t_1;

  /* "cytimes/parser.py":2584
 * 
 *         # . year
 *         if self._res.is_year_set():             # <<<<<<<<<<<<<<
 *             yy = self._res.year
 *         elif has_default:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2585
 *         # . year
 *         if self._res.is_year_set():
 *             yy = self._res.year             # <<<<<<<<<<<<<<
 *         elif has_default:
 *             yy = datetime.datetime_year(default)
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_self->_res->year); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2585, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_yy = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2584
 * 
 *         # . year
 *         if self._res.is_year_set():             # <<<<<<<<<<<<<<
 *             yy = self._res.year
 *         elif has_default:
*/
    goto __pyx_L3;
  }

  /* "cytimes/parser.py":2586
 *         if self._res.is_year_set():
 *             yy = self._res.year
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             yy = datetime.datetime_year(default)
 *         else:
*/
  if (likely(__pyx_v_has_default)) {

    /* "cytimes/parser.py":2587
 *             yy = self._res.year
 *         elif has_default:
 *             yy = datetime.datetime_year(default)             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("Lack of 'year'.")
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_f_7cpython_8datetime_datetime_year(__pyx_v_default)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2587, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_yy = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2586
 *         if self._res.is_year_set():
 *             yy = self._res.year
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             yy = datetime.datetime_year(default)
 *         else:
*/
    goto __pyx_L3;
  }

  /* "cytimes/parser.py":2589
 *             yy = datetime.datetime_year(default)
 *         else:
 *             raise ValueError("Lack of 'year'.")             # <<<<<<<<<<<<<<
 *         # . month
 *         if self._res.is_month_set():
*/
  /*else*/ {
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Lack_of_year};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(0, 2589, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2589, __pyx_L1_error)
  }
  __pyx_L3:;

  /* "cytimes/parser.py":2591
 *             raise ValueError("Lack of 'year'.")
 *         # . month
 *         if self._res.is_month_set():             # <<<<<<<<<<<<<<
 *             mm = self._res.month
 *         elif has_default:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_month_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2592
 *         # . month
 *         if self._res.is_month_set():
 *             mm = self._res.month             # <<<<<<<<<<<<<<
 *         elif has_default:
 *             mm = datetime.datetime_month(default)
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_self->_res->month); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2592, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_mm = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2591
 *             raise ValueError("Lack of 'year'.")
 *         # . month
 *         if self._res.is_month_set():             # <<<<<<<<<<<<<<
 *             mm = self._res.month
 *         elif has_default:
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":2593
 *         if self._res.is_month_set():
 *             mm = self._res.month
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             mm = datetime.datetime_month(default)
 *         else:
*/
  if (likely(__pyx_v_has_default)) {

    /* "cytimes/parser.py":2594
 *             mm = self._res.month
 *         elif has_default:
 *             mm = datetime.datetime_month(default)             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("Lack of 'month'.")
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_f_7cpython_8datetime_datetime_month(__pyx_v_default)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_mm = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2593
 *         if self._res.is_month_set():
 *             mm = self._res.month
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             mm = datetime.datetime_month(default)
 *         else:
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":2596
 *             mm = datetime.datetime_month(default)
 *         else:
 *             raise ValueError("Lack of 'month'.")             # <<<<<<<<<<<<<<
 *         # . day
 *         if self._res.is_day_set():
*/
  /*else*/ {
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Lack_of_month};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(0, 2596, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2596, __pyx_L1_error)
  }
  __pyx_L4:;

  /* "cytimes/parser.py":2598
 *             raise ValueError("Lack of 'month'.")
 *         # . day
 *         if self._res.is_day_set():             # <<<<<<<<<<<<<<
 *             dd = self._res.day
 *         elif has_default:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_day_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2599
 *         # . day
 *         if self._res.is_day_set():
 *             dd = self._res.day             # <<<<<<<<<<<<<<
 *         elif has_default:
 *             dd = datetime.datetime_day(default)
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v_self->_res->day); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2599, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_dd = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2598
 *             raise ValueError("Lack of 'month'.")
 *         # . day
 *         if self._res.is_day_set():             # <<<<<<<<<<<<<<
 *             dd = self._res.day
 *         elif has_default:
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2600
 *         if self._res.is_day_set():
 *             dd = self._res.day
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             dd = datetime.datetime_day(default)
 *         else:
*/
  if (likely(__pyx_v_has_default)) {

    /* "cytimes/parser.py":2601
 *             dd = self._res.day
 *         elif has_default:
 *             dd = datetime.datetime_day(default)             # <<<<<<<<<<<<<<
 *         else:
 *             raise ValueError("Lack of 'day'.")
*/
    __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_f_7cpython_8datetime_datetime_day(__pyx_v_default)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2601, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_v_dd = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2600
 *         if self._res.is_day_set():
 *             dd = self._res.day
 *         elif has_default:             # <<<<<<<<<<<<<<
 *             dd = datetime.datetime_day(default)
 *         else:
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2603
 *             dd = datetime.datetime_day(default)
 *         else:
 *             raise ValueError("Lack of 'day'.")             # <<<<<<<<<<<<<<
 *         if dd > 28:
 *             dd = min(dd, utils.days_in_month(yy, mm))
*/
  /*else*/ {
    __pyx_t_3 = NULL;
    __pyx_t_4 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_mstate_global->__pyx_kp_u_Lack_of_day};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __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(0, 2603, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
    }
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2603, __pyx_L1_error)
  }
  __pyx_L5:;

  /* "cytimes/parser.py":2604
 *         else:
 *             raise ValueError("Lack of 'day'.")
 *         if dd > 28:             # <<<<<<<<<<<<<<
 *             dd = min(dd, utils.days_in_month(yy, mm))
 *         # . weekday
*/
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_dd, __pyx_mstate_global->__pyx_int_28, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2604, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2604, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2605
 *             raise ValueError("Lack of 'day'.")
 *         if dd > 28:
 *             dd = min(dd, utils.days_in_month(yy, mm))             # <<<<<<<<<<<<<<
 *         # . weekday
 *         if self._res.is_weekday_set():
*/
    __pyx_t_5 = __Pyx_PyLong_As_PY_LONG_LONG(__pyx_v_yy); if (unlikely((__pyx_t_5 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 2605, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_mm); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2605, __pyx_L1_error)
    __pyx_t_7 = __pyx_f_7cytimes_5utils_days_in_month(__pyx_t_5, __pyx_t_6);
    __Pyx_INCREF(__pyx_v_dd);
    __pyx_t_2 = __pyx_v_dd;
    __pyx_t_8 = __Pyx_PyLong_From_int(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2605, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 2605, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_1) {
      __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_t_7); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2605, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_3 = __pyx_t_9;
      __pyx_t_9 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_3 = __pyx_t_2;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_dd, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":2604
 *         else:
 *             raise ValueError("Lack of 'day'.")
 *         if dd > 28:             # <<<<<<<<<<<<<<
 *             dd = min(dd, utils.days_in_month(yy, mm))
 *         # . weekday
*/
  }

  /* "cytimes/parser.py":2607
 *             dd = min(dd, utils.days_in_month(yy, mm))
 *         # . weekday
 *         if self._res.is_weekday_set():             # <<<<<<<<<<<<<<
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)
 *             if wkd != self._res.weekday:
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_weekday_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2608
 *         # . weekday
 *         if self._res.is_weekday_set():
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)             # <<<<<<<<<<<<<<
 *             if wkd != self._res.weekday:
 *                 _ymd = utils.ymd_fr_ord(
*/
    __pyx_t_5 = __Pyx_PyLong_As_PY_LONG_LONG(__pyx_v_yy); if (unlikely((__pyx_t_5 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 2608, __pyx_L1_error)
    __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_mm); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2608, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_dd); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2608, __pyx_L1_error)
    __pyx_v_wkd = __pyx_f_7cytimes_5utils_ymd_weekday(__pyx_t_5, __pyx_t_7, __pyx_t_6);

    /* "cytimes/parser.py":2609
 *         if self._res.is_weekday_set():
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)
 *             if wkd != self._res.weekday:             # <<<<<<<<<<<<<<
 *                 _ymd = utils.ymd_fr_ord(
 *                     utils.ymd_to_ord(yy, mm, dd) + self._res.weekday - wkd
*/
    __pyx_t_1 = (__pyx_v_wkd != __pyx_v_self->_res->weekday);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":2611
 *             if wkd != self._res.weekday:
 *                 _ymd = utils.ymd_fr_ord(
 *                     utils.ymd_to_ord(yy, mm, dd) + self._res.weekday - wkd             # <<<<<<<<<<<<<<
 *                 )
 *                 yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
*/
      __pyx_t_5 = __Pyx_PyLong_As_PY_LONG_LONG(__pyx_v_yy); if (unlikely((__pyx_t_5 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 2611, __pyx_L1_error)
      __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_mm); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2611, __pyx_L1_error)
      __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_dd); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2611, __pyx_L1_error)

      /* "cytimes/parser.py":2610
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)
 *             if wkd != self._res.weekday:
 *                 _ymd = utils.ymd_fr_ord(             # <<<<<<<<<<<<<<
 *                     utils.ymd_to_ord(yy, mm, dd) + self._res.weekday - wkd
 *                 )
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_ord(((__pyx_f_7cytimes_5utils_ymd_to_ord(__pyx_t_5, __pyx_t_6, __pyx_t_7) + __pyx_v_self->_res->weekday) - __pyx_v_wkd));

      /* "cytimes/parser.py":2613
 *                     utils.ymd_to_ord(yy, mm, dd) + self._res.weekday - wkd
 *                 )
 *                 yy, mm, dd = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 *         # . hour
 *         hh = self._res.hour if self._res.is_hour_set() else 0
*/
      __pyx_t_2 = __Pyx_PyLong_From_int(__pyx_v__ymd.year); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_v__ymd.month); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_9 = __Pyx_PyLong_From_int(__pyx_v__ymd.day); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2613, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF_SET(__pyx_v_yy, __pyx_t_2);
      __pyx_t_2 = 0;
      __Pyx_DECREF_SET(__pyx_v_mm, __pyx_t_3);
      __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_dd, __pyx_t_9);
      __pyx_t_9 = 0;

      /* "cytimes/parser.py":2609
 *         if self._res.is_weekday_set():
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)
 *             if wkd != self._res.weekday:             # <<<<<<<<<<<<<<
 *                 _ymd = utils.ymd_fr_ord(
 *                     utils.ymd_to_ord(yy, mm, dd) + self._res.weekday - wkd
*/
    }

    /* "cytimes/parser.py":2607
 *             dd = min(dd, utils.days_in_month(yy, mm))
 *         # . weekday
 *         if self._res.is_weekday_set():             # <<<<<<<<<<<<<<
 *             wkd: cython.int = utils.ymd_weekday(yy, mm, dd)
 *             if wkd != self._res.weekday:
*/
  }

  /* "cytimes/parser.py":2615
 *                 yy, mm, dd = _ymd.year, _ymd.month, _ymd.day
 *         # . hour
 *         hh = self._res.hour if self._res.is_hour_set() else 0             # <<<<<<<<<<<<<<
 *         # . minute
 *         mi = self._res.minute if self._res.is_minute_set() else 0
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_hour_set(__pyx_v_self->_res);
  if (__pyx_t_1) {
    __pyx_t_10 = __pyx_v_self->_res->hour;
  } else {
    __pyx_t_10 = 0;
  }
  __pyx_v_hh = __pyx_t_10;

  /* "cytimes/parser.py":2617
 *         hh = self._res.hour if self._res.is_hour_set() else 0
 *         # . minute
 *         mi = self._res.minute if self._res.is_minute_set() else 0             # <<<<<<<<<<<<<<
 *         # . second
 *         ss = self._res.second if self._res.is_second_set() else 0
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_minute_set(__pyx_v_self->_res);
  if (__pyx_t_1) {
    __pyx_t_10 = __pyx_v_self->_res->minute;
  } else {
    __pyx_t_10 = 0;
  }
  __pyx_v_mi = __pyx_t_10;

  /* "cytimes/parser.py":2619
 *         mi = self._res.minute if self._res.is_minute_set() else 0
 *         # . second
 *         ss = self._res.second if self._res.is_second_set() else 0             # <<<<<<<<<<<<<<
 *         # . microsecond
 *         us = self._res.microsecond if self._res.is_microsecond_set() else 0
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_second_set(__pyx_v_self->_res);
  if (__pyx_t_1) {
    __pyx_t_10 = __pyx_v_self->_res->second;
  } else {
    __pyx_t_10 = 0;
  }
  __pyx_v_ss = __pyx_t_10;

  /* "cytimes/parser.py":2621
 *         ss = self._res.second if self._res.is_second_set() else 0
 *         # . microsecond
 *         us = self._res.microsecond if self._res.is_microsecond_set() else 0             # <<<<<<<<<<<<<<
 * 
 *         # Generate datetime
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_microsecond_set(__pyx_v_self->_res);
  if (__pyx_t_1) {
    __pyx_t_10 = __pyx_v_self->_res->microsecond;
  } else {
    __pyx_t_10 = 0;
  }
  __pyx_v_us = __pyx_t_10;

  /* "cytimes/parser.py":2624
 * 
 *         # Generate datetime
 *         return utils.dt_new(yy, mm, dd, hh, mi, ss, us, tzinfo, 0, dtclass)             # <<<<<<<<<<<<<<
 * 
 *     # ISO format ---------------------------------------------------------------------------
*/
  __Pyx_XDECREF((PyObject *)__pyx_r);
  __pyx_t_7 = __Pyx_PyLong_As_int(__pyx_v_yy); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2624, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyLong_As_int(__pyx_v_mm); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2624, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyLong_As_int(__pyx_v_dd); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2624, __pyx_L1_error)
  __pyx_t_12.__pyx_n = 10;
  __pyx_t_12.year = __pyx_t_7;
  __pyx_t_12.month = __pyx_t_6;
  __pyx_t_12.day = __pyx_t_11;
  __pyx_t_12.hour = __pyx_v_hh;
  __pyx_t_12.minute = __pyx_v_mi;
  __pyx_t_12.second = __pyx_v_ss;
  __pyx_t_12.microsecond = __pyx_v_us;
  __pyx_t_12.tzinfo = __pyx_v_tzinfo;
  __pyx_t_12.fold = 0;
  __pyx_t_12.dtclass = __pyx_v_dtclass;
  __pyx_t_9 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_new(&__pyx_t_12)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_r = ((PyDateTime_DateTime *)__pyx_t_9);
  __pyx_t_9 = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":2545
 *             )
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _gen_dt(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cytimes.parser.Parser._gen_dt", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_yy);
  __Pyx_XDECREF(__pyx_v_mm);
  __Pyx_XDECREF(__pyx_v_dd);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":2627
 * 
 *     # ISO format ---------------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_iso_format(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":2654
 *         """
 *         # Parse date components
 *         if not self._parse_iso_date(dtstr):             # <<<<<<<<<<<<<<
 *             # ISO format date parser failed,
 *             # fallback to timelex tokens processor.
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_date(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2654, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2657
 *             # ISO format date parser failed,
 *             # fallback to timelex tokens processor.
 *             return self._process_timelex_tokens(dtstr)             # <<<<<<<<<<<<<<
 * 
 *         # Parse time components
*/
    __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2657, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "cytimes/parser.py":2654
 *         """
 *         # Parse date components
 *         if not self._parse_iso_date(dtstr):             # <<<<<<<<<<<<<<
 *             # ISO format date parser failed,
 *             # fallback to timelex tokens processor.
*/
  }

  /* "cytimes/parser.py":2660
 * 
 *         # Parse time components
 *         if not self._parse_iso_time(dtstr):             # <<<<<<<<<<<<<<
 *             # ISO format time parser failed,
 *             # fallback to timelex tokens processor.
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_time(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2660, __pyx_L1_error)
  __pyx_t_1 = (!__pyx_t_2);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":2663
 *             # ISO format time parser failed,
 *             # fallback to timelex tokens processor.
 *             return self._process_timelex_tokens(dtstr)             # <<<<<<<<<<<<<<
 * 
 *         # Success
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2663, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2660
 * 
 *         # Parse time components
 *         if not self._parse_iso_time(dtstr):             # <<<<<<<<<<<<<<
 *             # ISO format time parser failed,
 *             # fallback to timelex tokens processor.
*/
  }

  /* "cytimes/parser.py":2666
 * 
 *         # Success
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2627
 * 
 *     # ISO format ---------------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._process_iso_format", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":2669
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_date(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr) {
  Py_ssize_t __pyx_v_length;
  int __pyx_v_year;
  Py_UCS4 __pyx_v_ch4;
  Py_ssize_t __pyx_v_pos;
  Py_UCS4 __pyx_v_ch7;
  int __pyx_v_month;
  int __pyx_v_day;
  int __pyx_v_week;
  int __pyx_v_wkd;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  int __pyx_v_days;
  int __pyx_r;
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoyear __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_parse_isomonth __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoday __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoweek __pyx_t_7;
  int __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday __pyx_t_9;
  int __pyx_t_10;
  int __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_parse_isodoy __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":2696
 *         """
 *         # ISO format length must be >= 7: YYYYWww or YYYYDDD
 *         length: cython.Py_ssize_t = self._length             # <<<<<<<<<<<<<<
 *         if length < 7:
 *             return False  # exit: invalid
*/
  __pyx_t_1 = __pyx_v_self->_length;
  __pyx_v_length = __pyx_t_1;

  /* "cytimes/parser.py":2697
 *         # ISO format length must be >= 7: YYYYWww or YYYYDDD
 *         length: cython.Py_ssize_t = self._length
 *         if length < 7:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_length < 7);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2698
 *         length: cython.Py_ssize_t = self._length
 *         if length < 7:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # ISO format always starts with year (YYYY)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2697
 *         # ISO format length must be >= 7: YYYYWww or YYYYDDD
 *         length: cython.Py_ssize_t = self._length
 *         if length < 7:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":2701
 * 
 *         # ISO format always starts with year (YYYY)
 *         year: cython.int = utils.parse_isoyear(dtstr, 0, length)             # <<<<<<<<<<<<<<
 *         if year == -1:
 *             return False  # exit: invalid
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.token_len = __pyx_v_length;
  __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isoyear(__pyx_v_dtstr, 0, &__pyx_t_4); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2701, __pyx_L1_error)
  __pyx_v_year = __pyx_t_3;

  /* "cytimes/parser.py":2702
 *         # ISO format always starts with year (YYYY)
 *         year: cython.int = utils.parse_isoyear(dtstr, 0, length)
 *         if year == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_2 = (__pyx_v_year == -1L);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2703
 *         year: cython.int = utils.parse_isoyear(dtstr, 0, length)
 *         if year == -1:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Parse components
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2702
 *         # ISO format always starts with year (YYYY)
 *         year: cython.int = utils.parse_isoyear(dtstr, 0, length)
 *         if year == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":2707
 *         # Parse components
 *         # . YYYY[-]
 *         ch4: cython.Py_UCS4 = str_read(dtstr, 4)             # <<<<<<<<<<<<<<
 *         pos: cython.Py_ssize_t
 *         if utils.is_date_sep(ch4):
*/
  __pyx_v_ch4 = PyUnicode_READ_CHAR(__pyx_v_dtstr, 4);

  /* "cytimes/parser.py":2709
 *         ch4: cython.Py_UCS4 = str_read(dtstr, 4)
 *         pos: cython.Py_ssize_t
 *         if utils.is_date_sep(ch4):             # <<<<<<<<<<<<<<
 *             if length < 8:
 *                 #: For ISO format with "-" separator,
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_date_sep(__pyx_v_ch4);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2710
 *         pos: cython.Py_ssize_t
 *         if utils.is_date_sep(ch4):
 *             if length < 8:             # <<<<<<<<<<<<<<
 *                 #: For ISO format with "-" separator,
 *                 #: the minimum length should be 8.
*/
    __pyx_t_2 = (__pyx_v_length < 8);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2713
 *                 #: For ISO format with "-" separator,
 *                 #: the minimum length should be 8.
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *             # . YYYY-MM[-]
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2710
 *         pos: cython.Py_ssize_t
 *         if utils.is_date_sep(ch4):
 *             if length < 8:             # <<<<<<<<<<<<<<
 *                 #: For ISO format with "-" separator,
 *                 #: the minimum length should be 8.
*/
    }

    /* "cytimes/parser.py":2716
 * 
 *             # . YYYY-MM[-]
 *             ch7: cython.Py_UCS4 = str_read(dtstr, 7)             # <<<<<<<<<<<<<<
 *             if utils.is_date_sep(ch7):
 *                 # . parse month: YYYY-[MM]
*/
    __pyx_v_ch7 = PyUnicode_READ_CHAR(__pyx_v_dtstr, 7);

    /* "cytimes/parser.py":2717
 *             # . YYYY-MM[-]
 *             ch7: cython.Py_UCS4 = str_read(dtstr, 7)
 *             if utils.is_date_sep(ch7):             # <<<<<<<<<<<<<<
 *                 # . parse month: YYYY-[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_is_date_sep(__pyx_v_ch7);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2719
 *             if utils.is_date_sep(ch7):
 *                 # . parse month: YYYY-[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)             # <<<<<<<<<<<<<<
 *                 if month == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_5.__pyx_n = 1;
      __pyx_t_5.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isomonth(__pyx_v_dtstr, 5, &__pyx_t_5); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2719, __pyx_L1_error)
      __pyx_v_month = __pyx_t_3;

      /* "cytimes/parser.py":2720
 *                 # . parse month: YYYY-[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)
 *                 if month == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse day: YYYY-MM-[DD]
*/
      __pyx_t_2 = (__pyx_v_month == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2721
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)
 *                 if month == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 # . parse day: YYYY-MM-[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 8, length)
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2720
 *                 # . parse month: YYYY-[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)
 *                 if month == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse day: YYYY-MM-[DD]
*/
      }

      /* "cytimes/parser.py":2723
 *                     return False  # exit: invalid
 *                 # . parse day: YYYY-MM-[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 8, length)             # <<<<<<<<<<<<<<
 *                 if day == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_6.__pyx_n = 1;
      __pyx_t_6.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isoday(__pyx_v_dtstr, 8, &__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2723, __pyx_L1_error)
      __pyx_v_day = __pyx_t_3;

      /* "cytimes/parser.py":2724
 *                 # . parse day: YYYY-MM-[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 8, length)
 *                 if day == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 pos = 10  # after: YYYY-MM-DD
*/
      __pyx_t_2 = (__pyx_v_day == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2725
 *                 day: cython.int = utils.parse_isoday(dtstr, 8, length)
 *                 if day == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 pos = 10  # after: YYYY-MM-DD
 * 
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2724
 *                 # . parse day: YYYY-MM-[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 8, length)
 *                 if day == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 pos = 10  # after: YYYY-MM-DD
*/
      }

      /* "cytimes/parser.py":2726
 *                 if day == -1:
 *                     return False  # exit: invalid
 *                 pos = 10  # after: YYYY-MM-DD             # <<<<<<<<<<<<<<
 * 
 *             # YYYY-[W]
*/
      __pyx_v_pos = 10;

      /* "cytimes/parser.py":2717
 *             # . YYYY-MM[-]
 *             ch7: cython.Py_UCS4 = str_read(dtstr, 7)
 *             if utils.is_date_sep(ch7):             # <<<<<<<<<<<<<<
 *                 # . parse month: YYYY-[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 5, length)
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":2729
 * 
 *             # YYYY-[W]
 *             elif utils.is_isoweek_sep(str_read(dtstr, 5)):             # <<<<<<<<<<<<<<
 *                 # . parse week: YYYY-W[ww]
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_is_isoweek_sep(PyUnicode_READ_CHAR(__pyx_v_dtstr, 5));
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2731
 *             elif utils.is_isoweek_sep(str_read(dtstr, 5)):
 *                 # . parse week: YYYY-W[ww]
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)             # <<<<<<<<<<<<<<
 *                 if week == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_7.__pyx_n = 1;
      __pyx_t_7.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isoweek(__pyx_v_dtstr, 6, &__pyx_t_7); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2731, __pyx_L1_error)
      __pyx_v_week = __pyx_t_3;

      /* "cytimes/parser.py":2732
 *                 # . parse week: YYYY-W[ww]
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)
 *                 if week == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse weekday: YYYY-Www[-D]
*/
      __pyx_t_2 = (__pyx_v_week == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2733
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)
 *                 if week == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 # . parse weekday: YYYY-Www[-D]
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2732
 *                 # . parse week: YYYY-W[ww]
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)
 *                 if week == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse weekday: YYYY-Www[-D]
*/
      }

      /* "cytimes/parser.py":2735
 *                     return False  # exit: invalid
 *                 # . parse weekday: YYYY-Www[-D]
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):             # <<<<<<<<<<<<<<
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)
 *                     if wkd == -1:
*/
      __pyx_t_8 = (__pyx_v_length > 9);
      if (__pyx_t_8) {
      } else {
        __pyx_t_2 = __pyx_t_8;
        goto __pyx_L12_bool_binop_done;
      }
      __pyx_t_8 = __pyx_f_7cytimes_5utils_is_date_sep(PyUnicode_READ_CHAR(__pyx_v_dtstr, 8));
      __pyx_t_2 = __pyx_t_8;
      __pyx_L12_bool_binop_done:;
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2736
 *                 # . parse weekday: YYYY-Www[-D]
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)             # <<<<<<<<<<<<<<
 *                     if wkd == -1:
 *                         return False  # exit: invalid
*/
        __pyx_t_9.__pyx_n = 1;
        __pyx_t_9.token_len = __pyx_v_length;
        __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isoweekday(__pyx_v_dtstr, 9, &__pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2736, __pyx_L1_error)
        __pyx_v_wkd = __pyx_t_3;

        /* "cytimes/parser.py":2737
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         return False  # exit: invalid
 *                     pos = 10  # after: YYYY-Www-D
*/
        __pyx_t_2 = (__pyx_v_wkd == -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":2738
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)
 *                     if wkd == -1:
 *                         return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                     pos = 10  # after: YYYY-Www-D
 *                 else:
*/
          __pyx_r = 0;
          goto __pyx_L0;

          /* "cytimes/parser.py":2737
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         return False  # exit: invalid
 *                     pos = 10  # after: YYYY-Www-D
*/
        }

        /* "cytimes/parser.py":2739
 *                     if wkd == -1:
 *                         return False  # exit: invalid
 *                     pos = 10  # after: YYYY-Www-D             # <<<<<<<<<<<<<<
 *                 else:
 *                     wkd = 1  # default to Monday
*/
        __pyx_v_pos = 10;

        /* "cytimes/parser.py":2735
 *                     return False  # exit: invalid
 *                 # . parse weekday: YYYY-Www[-D]
 *                 if length > 9 and utils.is_date_sep(str_read(dtstr, 8)):             # <<<<<<<<<<<<<<
 *                     wkd: cython.int = utils.parse_isoweekday(dtstr, 9, length)
 *                     if wkd == -1:
*/
        goto __pyx_L11;
      }

      /* "cytimes/parser.py":2741
 *                     pos = 10  # after: YYYY-Www-D
 *                 else:
 *                     wkd = 1  # default to Monday             # <<<<<<<<<<<<<<
 *                     pos = 8  # after: YYYY-Www
 *                 # . calculate MM/DD
*/
      /*else*/ {
        __pyx_v_wkd = 1;

        /* "cytimes/parser.py":2742
 *                 else:
 *                     wkd = 1  # default to Monday
 *                     pos = 8  # after: YYYY-Www             # <<<<<<<<<<<<<<
 *                 # . calculate MM/DD
 *                 _ymd = utils.ymd_fr_iso(year, week, wkd)
*/
        __pyx_v_pos = 8;
      }
      __pyx_L11:;

      /* "cytimes/parser.py":2744
 *                     pos = 8  # after: YYYY-Www
 *                 # . calculate MM/DD
 *                 _ymd = utils.ymd_fr_iso(year, week, wkd)             # <<<<<<<<<<<<<<
 *                 year, month, day = _ymd.year, _ymd.month, _ymd.day
 * 
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_iso(__pyx_v_year, __pyx_v_week, __pyx_v_wkd);

      /* "cytimes/parser.py":2745
 *                 # . calculate MM/DD
 *                 _ymd = utils.ymd_fr_iso(year, week, wkd)
 *                 year, month, day = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *             # . YYYY-DD[D]
*/
      __pyx_t_3 = __pyx_v__ymd.year;
      __pyx_t_10 = __pyx_v__ymd.month;
      __pyx_t_11 = __pyx_v__ymd.day;
      __pyx_v_year = __pyx_t_3;
      __pyx_v_month = __pyx_t_10;
      __pyx_v_day = __pyx_t_11;

      /* "cytimes/parser.py":2729
 * 
 *             # YYYY-[W]
 *             elif utils.is_isoweek_sep(str_read(dtstr, 5)):             # <<<<<<<<<<<<<<
 *                 # . parse week: YYYY-W[ww]
 *                 week: cython.int = utils.parse_isoweek(dtstr, 6, length)
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":2748
 * 
 *             # . YYYY-DD[D]
 *             elif utils.is_ascii_digit(ch7):             # <<<<<<<<<<<<<<
 *                 # . parse days of the year: YYYY-[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)
*/
    __pyx_t_2 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch7);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2750
 *             elif utils.is_ascii_digit(ch7):
 *                 # . parse days of the year: YYYY-[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)             # <<<<<<<<<<<<<<
 *                 if days == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_12.__pyx_n = 1;
      __pyx_t_12.token_len = __pyx_v_length;
      __pyx_t_11 = __pyx_f_7cytimes_5utils_parse_isodoy(__pyx_v_dtstr, 5, &__pyx_t_12); if (unlikely(__pyx_t_11 == ((int)-2))) __PYX_ERR(0, 2750, __pyx_L1_error)
      __pyx_v_days = __pyx_t_11;

      /* "cytimes/parser.py":2751
 *                 # . parse days of the year: YYYY-[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)
 *                 if days == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
*/
      __pyx_t_2 = (__pyx_v_days == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2752
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)
 *                 if days == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2751
 *                 # . parse days of the year: YYYY-[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)
 *                 if days == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
*/
      }

      /* "cytimes/parser.py":2754
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)             # <<<<<<<<<<<<<<
 *                 month, day = _ymd.month, _ymd.day
 *                 pos = 8  # after: YYYY-DDD
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_doy(__pyx_v_year, __pyx_v_days);

      /* "cytimes/parser.py":2755
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)
 *                 month, day = _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 *                 pos = 8  # after: YYYY-DDD
 * 
*/
      __pyx_t_11 = __pyx_v__ymd.month;
      __pyx_t_10 = __pyx_v__ymd.day;
      __pyx_v_month = __pyx_t_11;
      __pyx_v_day = __pyx_t_10;

      /* "cytimes/parser.py":2756
 *                 _ymd = utils.ymd_fr_doy(year, days)
 *                 month, day = _ymd.month, _ymd.day
 *                 pos = 8  # after: YYYY-DDD             # <<<<<<<<<<<<<<
 * 
 *             # . Invalid ISO format
*/
      __pyx_v_pos = 8;

      /* "cytimes/parser.py":2748
 * 
 *             # . YYYY-DD[D]
 *             elif utils.is_ascii_digit(ch7):             # <<<<<<<<<<<<<<
 *                 # . parse days of the year: YYYY-[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 5, length)
*/
      goto __pyx_L7;
    }

    /* "cytimes/parser.py":2760
 *             # . Invalid ISO format
 *             else:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # . YYYY[W]
*/
    /*else*/ {
      __pyx_r = 0;
      goto __pyx_L0;
    }
    __pyx_L7:;

    /* "cytimes/parser.py":2709
 *         ch4: cython.Py_UCS4 = str_read(dtstr, 4)
 *         pos: cython.Py_ssize_t
 *         if utils.is_date_sep(ch4):             # <<<<<<<<<<<<<<
 *             if length < 8:
 *                 #: For ISO format with "-" separator,
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2763
 * 
 *         # . YYYY[W]
 *         elif utils.is_isoweek_sep(ch4):             # <<<<<<<<<<<<<<
 *             # . parse week: YYYYW[ww]
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_isoweek_sep(__pyx_v_ch4);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2765
 *         elif utils.is_isoweek_sep(ch4):
 *             # . parse week: YYYYW[ww]
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)             # <<<<<<<<<<<<<<
 *             if week == -1:
 *                 return False  # exit: invalid
*/
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.token_len = __pyx_v_length;
    __pyx_t_10 = __pyx_f_7cytimes_5utils_parse_isoweek(__pyx_v_dtstr, 5, &__pyx_t_7); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 2765, __pyx_L1_error)
    __pyx_v_week = __pyx_t_10;

    /* "cytimes/parser.py":2766
 *             # . parse week: YYYYW[ww]
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)
 *             if week == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . parse weekday
*/
    __pyx_t_2 = (__pyx_v_week == -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2767
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)
 *             if week == -1:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . parse weekday
 *             wkd: cython.int
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2766
 *             # . parse week: YYYYW[ww]
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)
 *             if week == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . parse weekday
*/
    }

    /* "cytimes/parser.py":2770
 *             # . parse weekday
 *             wkd: cython.int
 *             if length > 7:             # <<<<<<<<<<<<<<
 *                 # . YYYYWww[-D]
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):
*/
    __pyx_t_2 = (__pyx_v_length > 7);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2772
 *             if length > 7:
 *                 # . YYYYWww[-D]
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):             # <<<<<<<<<<<<<<
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)
 *                     if wkd == -1:
*/
      __pyx_t_8 = (__pyx_v_length > 8);
      if (__pyx_t_8) {
      } else {
        __pyx_t_2 = __pyx_t_8;
        goto __pyx_L19_bool_binop_done;
      }
      __pyx_t_8 = __pyx_f_7cytimes_5utils_is_date_sep(PyUnicode_READ_CHAR(__pyx_v_dtstr, 7));
      __pyx_t_2 = __pyx_t_8;
      __pyx_L19_bool_binop_done:;
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2773
 *                 # . YYYYWww[-D]
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)             # <<<<<<<<<<<<<<
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday
*/
        __pyx_t_9.__pyx_n = 1;
        __pyx_t_9.token_len = __pyx_v_length;
        __pyx_t_10 = __pyx_f_7cytimes_5utils_parse_isoweekday(__pyx_v_dtstr, 8, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 2773, __pyx_L1_error)
        __pyx_v_wkd = __pyx_t_10;

        /* "cytimes/parser.py":2774
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww
*/
        __pyx_t_2 = (__pyx_v_wkd == -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":2775
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday             # <<<<<<<<<<<<<<
 *                         pos = 7  # after: YYYYWww
 *                     else:
*/
          __pyx_v_wkd = 1;

          /* "cytimes/parser.py":2776
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww             # <<<<<<<<<<<<<<
 *                     else:
 *                         pos = 9  # after: YYYYWww-D
*/
          __pyx_v_pos = 7;

          /* "cytimes/parser.py":2774
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww
*/
          goto __pyx_L21;
        }

        /* "cytimes/parser.py":2778
 *                         pos = 7  # after: YYYYWww
 *                     else:
 *                         pos = 9  # after: YYYYWww-D             # <<<<<<<<<<<<<<
 *                 # . YYYYWww[D]
 *                 else:
*/
        /*else*/ {
          __pyx_v_pos = 9;
        }
        __pyx_L21:;

        /* "cytimes/parser.py":2772
 *             if length > 7:
 *                 # . YYYYWww[-D]
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):             # <<<<<<<<<<<<<<
 *                     wkd = utils.parse_isoweekday(dtstr, 8, length)
 *                     if wkd == -1:
*/
        goto __pyx_L18;
      }

      /* "cytimes/parser.py":2781
 *                 # . YYYYWww[D]
 *                 else:
 *                     wkd = utils.parse_isoweekday(dtstr, 7, length)             # <<<<<<<<<<<<<<
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday
*/
      /*else*/ {
        __pyx_t_9.__pyx_n = 1;
        __pyx_t_9.token_len = __pyx_v_length;
        __pyx_t_10 = __pyx_f_7cytimes_5utils_parse_isoweekday(__pyx_v_dtstr, 7, &__pyx_t_9); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 2781, __pyx_L1_error)
        __pyx_v_wkd = __pyx_t_10;

        /* "cytimes/parser.py":2782
 *                 else:
 *                     wkd = utils.parse_isoweekday(dtstr, 7, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww
*/
        __pyx_t_2 = (__pyx_v_wkd == -1L);
        if (__pyx_t_2) {

          /* "cytimes/parser.py":2783
 *                     wkd = utils.parse_isoweekday(dtstr, 7, length)
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday             # <<<<<<<<<<<<<<
 *                         pos = 7  # after: YYYYWww
 *                     else:
*/
          __pyx_v_wkd = 1;

          /* "cytimes/parser.py":2784
 *                     if wkd == -1:
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww             # <<<<<<<<<<<<<<
 *                     else:
 *                         pos = 8  # after: YYYYWwwD
*/
          __pyx_v_pos = 7;

          /* "cytimes/parser.py":2782
 *                 else:
 *                     wkd = utils.parse_isoweekday(dtstr, 7, length)
 *                     if wkd == -1:             # <<<<<<<<<<<<<<
 *                         wkd = 1  # default to Monday
 *                         pos = 7  # after: YYYYWww
*/
          goto __pyx_L22;
        }

        /* "cytimes/parser.py":2786
 *                         pos = 7  # after: YYYYWww
 *                     else:
 *                         pos = 8  # after: YYYYWwwD             # <<<<<<<<<<<<<<
 *             else:
 *                 wkd = 1  # default to Monday
*/
        /*else*/ {
          __pyx_v_pos = 8;
        }
        __pyx_L22:;
      }
      __pyx_L18:;

      /* "cytimes/parser.py":2770
 *             # . parse weekday
 *             wkd: cython.int
 *             if length > 7:             # <<<<<<<<<<<<<<
 *                 # . YYYYWww[-D]
 *                 if length > 8 and utils.is_date_sep(str_read(dtstr, 7)):
*/
      goto __pyx_L17;
    }

    /* "cytimes/parser.py":2788
 *                         pos = 8  # after: YYYYWwwD
 *             else:
 *                 wkd = 1  # default to Monday             # <<<<<<<<<<<<<<
 *                 pos = 7  # after: YYYYWww
 *             # . calculate MM/DD
*/
    /*else*/ {
      __pyx_v_wkd = 1;

      /* "cytimes/parser.py":2789
 *             else:
 *                 wkd = 1  # default to Monday
 *                 pos = 7  # after: YYYYWww             # <<<<<<<<<<<<<<
 *             # . calculate MM/DD
 *             _ymd = utils.ymd_fr_iso(year, week, wkd)
*/
      __pyx_v_pos = 7;
    }
    __pyx_L17:;

    /* "cytimes/parser.py":2791
 *                 pos = 7  # after: YYYYWww
 *             # . calculate MM/DD
 *             _ymd = utils.ymd_fr_iso(year, week, wkd)             # <<<<<<<<<<<<<<
 *             year, month, day = _ymd.year, _ymd.month, _ymd.day
 * 
*/
    __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_iso(__pyx_v_year, __pyx_v_week, __pyx_v_wkd);

    /* "cytimes/parser.py":2792
 *             # . calculate MM/DD
 *             _ymd = utils.ymd_fr_iso(year, week, wkd)
 *             year, month, day = _ymd.year, _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 * 
 *         # . YYYY[D]
*/
    __pyx_t_10 = __pyx_v__ymd.year;
    __pyx_t_11 = __pyx_v__ymd.month;
    __pyx_t_3 = __pyx_v__ymd.day;
    __pyx_v_year = __pyx_t_10;
    __pyx_v_month = __pyx_t_11;
    __pyx_v_day = __pyx_t_3;

    /* "cytimes/parser.py":2763
 * 
 *         # . YYYY[W]
 *         elif utils.is_isoweek_sep(ch4):             # <<<<<<<<<<<<<<
 *             # . parse week: YYYYW[ww]
 *             week: cython.int = utils.parse_isoweek(dtstr, 5, length)
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2795
 * 
 *         # . YYYY[D]
 *         elif utils.is_ascii_digit(ch4):             # <<<<<<<<<<<<<<
 *             # . YYYYMMD[D]
 *             if length > 7 and utils.is_ascii_digit(str_read(dtstr, 7)):
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch4);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2797
 *         elif utils.is_ascii_digit(ch4):
 *             # . YYYYMMD[D]
 *             if length > 7 and utils.is_ascii_digit(str_read(dtstr, 7)):             # <<<<<<<<<<<<<<
 *                 # . parse month: YYYY[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)
*/
    __pyx_t_8 = (__pyx_v_length > 7);
    if (__pyx_t_8) {
    } else {
      __pyx_t_2 = __pyx_t_8;
      goto __pyx_L24_bool_binop_done;
    }
    __pyx_t_8 = __pyx_f_7cytimes_5utils_is_ascii_digit(PyUnicode_READ_CHAR(__pyx_v_dtstr, 7));
    __pyx_t_2 = __pyx_t_8;
    __pyx_L24_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2799
 *             if length > 7 and utils.is_ascii_digit(str_read(dtstr, 7)):
 *                 # . parse month: YYYY[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)             # <<<<<<<<<<<<<<
 *                 if month == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_5.__pyx_n = 1;
      __pyx_t_5.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isomonth(__pyx_v_dtstr, 4, &__pyx_t_5); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2799, __pyx_L1_error)
      __pyx_v_month = __pyx_t_3;

      /* "cytimes/parser.py":2800
 *                 # . parse month: YYYY[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)
 *                 if month == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse day: YYYYMM[DD]
*/
      __pyx_t_2 = (__pyx_v_month == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2801
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)
 *                 if month == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 # . parse day: YYYYMM[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 6, length)
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2800
 *                 # . parse month: YYYY[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)
 *                 if month == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # . parse day: YYYYMM[DD]
*/
      }

      /* "cytimes/parser.py":2803
 *                     return False  # exit: invalid
 *                 # . parse day: YYYYMM[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 6, length)             # <<<<<<<<<<<<<<
 *                 if day == -1:
 *                     return False  # exit: invalid
*/
      __pyx_t_6.__pyx_n = 1;
      __pyx_t_6.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isoday(__pyx_v_dtstr, 6, &__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2803, __pyx_L1_error)
      __pyx_v_day = __pyx_t_3;

      /* "cytimes/parser.py":2804
 *                 # . parse day: YYYYMM[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 6, length)
 *                 if day == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 pos = 8  # after: YYYYMMDD
*/
      __pyx_t_2 = (__pyx_v_day == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2805
 *                 day: cython.int = utils.parse_isoday(dtstr, 6, length)
 *                 if day == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 pos = 8  # after: YYYYMMDD
 *             # . YYYYDDD
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2804
 *                 # . parse day: YYYYMM[DD]
 *                 day: cython.int = utils.parse_isoday(dtstr, 6, length)
 *                 if day == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 pos = 8  # after: YYYYMMDD
*/
      }

      /* "cytimes/parser.py":2806
 *                 if day == -1:
 *                     return False  # exit: invalid
 *                 pos = 8  # after: YYYYMMDD             # <<<<<<<<<<<<<<
 *             # . YYYYDDD
 *             else:
*/
      __pyx_v_pos = 8;

      /* "cytimes/parser.py":2797
 *         elif utils.is_ascii_digit(ch4):
 *             # . YYYYMMD[D]
 *             if length > 7 and utils.is_ascii_digit(str_read(dtstr, 7)):             # <<<<<<<<<<<<<<
 *                 # . parse month: YYYY[MM]
 *                 month: cython.int = utils.parse_isomonth(dtstr, 4, length)
*/
      goto __pyx_L23;
    }

    /* "cytimes/parser.py":2811
 *                 # . YYYYDDD requires at least 7 characters (already guarded)
 *                 # . parse days of the year: YYYY[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 4, length)             # <<<<<<<<<<<<<<
 *                 if days == -1:
 *                     return False  # exit: invalid
*/
    /*else*/ {
      __pyx_t_12.__pyx_n = 1;
      __pyx_t_12.token_len = __pyx_v_length;
      __pyx_t_3 = __pyx_f_7cytimes_5utils_parse_isodoy(__pyx_v_dtstr, 4, &__pyx_t_12); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 2811, __pyx_L1_error)
      __pyx_v_days = __pyx_t_3;

      /* "cytimes/parser.py":2812
 *                 # . parse days of the year: YYYY[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 4, length)
 *                 if days == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
*/
      __pyx_t_2 = (__pyx_v_days == -1L);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2813
 *                 days: cython.int = utils.parse_isodoy(dtstr, 4, length)
 *                 if days == -1:
 *                     return False  # exit: invalid             # <<<<<<<<<<<<<<
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)
*/
        __pyx_r = 0;
        goto __pyx_L0;

        /* "cytimes/parser.py":2812
 *                 # . parse days of the year: YYYY[DDD]
 *                 days: cython.int = utils.parse_isodoy(dtstr, 4, length)
 *                 if days == -1:             # <<<<<<<<<<<<<<
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
*/
      }

      /* "cytimes/parser.py":2815
 *                     return False  # exit: invalid
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)             # <<<<<<<<<<<<<<
 *                 month, day = _ymd.month, _ymd.day
 *                 pos = 7  # after: YYYYDDD
*/
      __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_doy(__pyx_v_year, __pyx_v_days);

      /* "cytimes/parser.py":2816
 *                 # Calculate MM/DD
 *                 _ymd = utils.ymd_fr_doy(year, days)
 *                 month, day = _ymd.month, _ymd.day             # <<<<<<<<<<<<<<
 *                 pos = 7  # after: YYYYDDD
 * 
*/
      __pyx_t_3 = __pyx_v__ymd.month;
      __pyx_t_11 = __pyx_v__ymd.day;
      __pyx_v_month = __pyx_t_3;
      __pyx_v_day = __pyx_t_11;

      /* "cytimes/parser.py":2817
 *                 _ymd = utils.ymd_fr_doy(year, days)
 *                 month, day = _ymd.month, _ymd.day
 *                 pos = 7  # after: YYYYDDD             # <<<<<<<<<<<<<<
 * 
 *         # . Invalid ISO format
*/
      __pyx_v_pos = 7;
    }
    __pyx_L23:;

    /* "cytimes/parser.py":2795
 * 
 *         # . YYYY[D]
 *         elif utils.is_ascii_digit(ch4):             # <<<<<<<<<<<<<<
 *             # . YYYYMMD[D]
 *             if length > 7 and utils.is_ascii_digit(str_read(dtstr, 7)):
*/
    goto __pyx_L5;
  }

  /* "cytimes/parser.py":2821
 *         # . Invalid ISO format
 *         else:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Update position & Set Y/M/D
*/
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L5:;

  /* "cytimes/parser.py":2824
 * 
 *         # Update position & Set Y/M/D
 *         self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *         self._res.century_specified = True
 *         self._res.set_ymd_int(1, year)
*/
  __pyx_v_self->_pos = __pyx_v_pos;

  /* "cytimes/parser.py":2825
 *         # Update position & Set Y/M/D
 *         self._pos = pos  # update position
 *         self._res.century_specified = True             # <<<<<<<<<<<<<<
 *         self._res.set_ymd_int(1, year)
 *         self._res.set_ymd_int(2, month)
*/
  __pyx_v_self->_res->century_specified = 1;

  /* "cytimes/parser.py":2826
 *         self._pos = pos  # update position
 *         self._res.century_specified = True
 *         self._res.set_ymd_int(1, year)             # <<<<<<<<<<<<<<
 *         self._res.set_ymd_int(2, month)
 *         self._res.set_ymd_int(3, day)
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 1, __pyx_v_year); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2826, __pyx_L1_error)

  /* "cytimes/parser.py":2827
 *         self._res.century_specified = True
 *         self._res.set_ymd_int(1, year)
 *         self._res.set_ymd_int(2, month)             # <<<<<<<<<<<<<<
 *         self._res.set_ymd_int(3, day)
 *         return True  # exit: complete
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 2, __pyx_v_month); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2827, __pyx_L1_error)

  /* "cytimes/parser.py":2828
 *         self._res.set_ymd_int(1, year)
 *         self._res.set_ymd_int(2, month)
 *         self._res.set_ymd_int(3, day)             # <<<<<<<<<<<<<<
 *         return True  # exit: complete
 * 
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 3, __pyx_v_day); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 2828, __pyx_L1_error)

  /* "cytimes/parser.py":2829
 *         self._res.set_ymd_int(2, month)
 *         self._res.set_ymd_int(3, day)
 *         return True  # exit: complete             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":2669
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_iso_date", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":2831
 *         return True  # exit: complete
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_time(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr) {
  Py_ssize_t __pyx_v_pos;
  Py_ssize_t __pyx_v_length;
  int __pyx_v_hour;
  int __pyx_v_minute;
  int __pyx_v_second;
  int __pyx_v_f_size;
  int __pyx_v_us;
  Py_UCS4 __pyx_v_ch;
  Py_ssize_t __pyx_v_extra;
  int __pyx_v_sign;
  int __pyx_v_hh;
  int __pyx_v_mi;
  int __pyx_r;
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_parse_isohour __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_parse_isominute __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_parse_isosecond __pyx_t_7;
  Py_UCS4 __pyx_t_8;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":2874
 *         """
 *         # Validate
 *         pos: cython.Py_ssize_t = self._pos             # <<<<<<<<<<<<<<
 *         length: cython.Py_ssize_t = self._length
 *         if pos == length:
*/
  __pyx_t_1 = __pyx_v_self->_pos;
  __pyx_v_pos = __pyx_t_1;

  /* "cytimes/parser.py":2875
 *         # Validate
 *         pos: cython.Py_ssize_t = self._pos
 *         length: cython.Py_ssize_t = self._length             # <<<<<<<<<<<<<<
 *         if pos == length:
 *             # eof: no time component
*/
  __pyx_t_1 = __pyx_v_self->_length;
  __pyx_v_length = __pyx_t_1;

  /* "cytimes/parser.py":2876
 *         pos: cython.Py_ssize_t = self._pos
 *         length: cython.Py_ssize_t = self._length
 *         if pos == length:             # <<<<<<<<<<<<<<
 *             # eof: no time component
 *             return True  # exit: success
*/
  __pyx_t_2 = (__pyx_v_pos == __pyx_v_length);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2878
 *         if pos == length:
 *             # eof: no time component
 *             return True  # exit: success             # <<<<<<<<<<<<<<
 *         if pos < 7 or length - pos < 7:
 *             #: The minimum time component is [HHMMSS],
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2876
 *         pos: cython.Py_ssize_t = self._pos
 *         length: cython.Py_ssize_t = self._length
 *         if pos == length:             # <<<<<<<<<<<<<<
 *             # eof: no time component
 *             return True  # exit: success
*/
  }

  /* "cytimes/parser.py":2879
 *             # eof: no time component
 *             return True  # exit: success
 *         if pos < 7 or length - pos < 7:             # <<<<<<<<<<<<<<
 *             #: The minimum time component is [HHMMSS],
 *             #: adding iso separator "T", the length
*/
  __pyx_t_3 = (__pyx_v_pos < 7);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_3 = ((__pyx_v_length - __pyx_v_pos) < 7);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2884
 *             #: of the 'dtstr' should have at least
 *             #: 7 or more characters.
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         if not utils.is_iso_sep(str_read(dtstr, pos)):
 *             #: The charactor right after date components
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2879
 *             # eof: no time component
 *             return True  # exit: success
 *         if pos < 7 or length - pos < 7:             # <<<<<<<<<<<<<<
 *             #: The minimum time component is [HHMMSS],
 *             #: adding iso separator "T", the length
*/
  }

  /* "cytimes/parser.py":2885
 *             #: 7 or more characters.
 *             return False  # exit: invalid
 *         if not utils.is_iso_sep(str_read(dtstr, pos)):             # <<<<<<<<<<<<<<
 *             #: The charactor right after date components
 *             #: should be either "T" or " ".
*/
  __pyx_t_2 = (!__pyx_f_7cytimes_5utils_is_iso_sep(PyUnicode_READ_CHAR(__pyx_v_dtstr, __pyx_v_pos)));
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2888
 *             #: The charactor right after date components
 *             #: should be either "T" or " ".
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Parse HH:MM:SS / HHMMSS
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2885
 *             #: 7 or more characters.
 *             return False  # exit: invalid
 *         if not utils.is_iso_sep(str_read(dtstr, pos)):             # <<<<<<<<<<<<<<
 *             #: The charactor right after date components
 *             #: should be either "T" or " ".
*/
  }

  /* "cytimes/parser.py":2892
 *         # Parse HH:MM:SS / HHMMSS
 *         # . hour: ...T[HH]
 *         hour: cython.int = utils.parse_isohour(dtstr, pos + 1, length)             # <<<<<<<<<<<<<<
 *         if hour == -1:
 *             return False  # exit: invalid
*/
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.token_len = __pyx_v_length;
  __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_dtstr, (__pyx_v_pos + 1), &__pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2892, __pyx_L1_error)
  __pyx_v_hour = __pyx_t_4;

  /* "cytimes/parser.py":2893
 *         # . hour: ...T[HH]
 *         hour: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *         if hour == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         # . with separator: ...THH[:]
*/
  __pyx_t_2 = (__pyx_v_hour == -1L);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2894
 *         hour: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *         if hour == -1:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         # . with separator: ...THH[:]
 *         if utils.is_time_sep(str_read(dtstr, pos + 3)):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":2893
 *         # . hour: ...T[HH]
 *         hour: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *         if hour == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         # . with separator: ...THH[:]
*/
  }

  /* "cytimes/parser.py":2896
 *             return False  # exit: invalid
 *         # . with separator: ...THH[:]
 *         if utils.is_time_sep(str_read(dtstr, pos + 3)):             # <<<<<<<<<<<<<<
 *             # . THH:MM:SS requires at least 9 characters.
 *             if length - pos < 9:
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_time_sep(PyUnicode_READ_CHAR(__pyx_v_dtstr, (__pyx_v_pos + 3)));
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2898
 *         if utils.is_time_sep(str_read(dtstr, pos + 3)):
 *             # . THH:MM:SS requires at least 9 characters.
 *             if length - pos < 9:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . minute: ...THH:[MM]
*/
    __pyx_t_2 = ((__pyx_v_length - __pyx_v_pos) < 9);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2899
 *             # . THH:MM:SS requires at least 9 characters.
 *             if length - pos < 9:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . minute: ...THH:[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2898
 *         if utils.is_time_sep(str_read(dtstr, pos + 3)):
 *             # . THH:MM:SS requires at least 9 characters.
 *             if length - pos < 9:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . minute: ...THH:[MM]
*/
    }

    /* "cytimes/parser.py":2901
 *                 return False  # exit: invalid
 *             # . minute: ...THH:[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 4, length)             # <<<<<<<<<<<<<<
 *             if minute == -1:
 *                 return False  # exit: invalid
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.token_len = __pyx_v_length;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_dtstr, (__pyx_v_pos + 4), &__pyx_t_6); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2901, __pyx_L1_error)
    __pyx_v_minute = __pyx_t_4;

    /* "cytimes/parser.py":2902
 *             # . minute: ...THH:[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *             if minute == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . second: ...THH:MM:[SS]
*/
    __pyx_t_2 = (__pyx_v_minute == -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2903
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *             if minute == -1:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . second: ...THH:MM:[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 7, length)
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2902
 *             # . minute: ...THH:[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *             if minute == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . second: ...THH:MM:[SS]
*/
    }

    /* "cytimes/parser.py":2905
 *                 return False  # exit: invalid
 *             # . second: ...THH:MM:[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 7, length)             # <<<<<<<<<<<<<<
 *             if second == -1:
 *                 return False  # exit: invalid
*/
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.token_len = __pyx_v_length;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isosecond(__pyx_v_dtstr, (__pyx_v_pos + 7), &__pyx_t_7); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2905, __pyx_L1_error)
    __pyx_v_second = __pyx_t_4;

    /* "cytimes/parser.py":2906
 *             # . second: ...THH:MM:[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 7, length)
 *             if second == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
*/
    __pyx_t_2 = (__pyx_v_second == -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2907
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 7, length)
 *             if second == -1:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . Update position & Set H/M/S
 *             pos += 9  # after: ...THH:MM:SS
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2906
 *             # . second: ...THH:MM:[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 7, length)
 *             if second == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
*/
    }

    /* "cytimes/parser.py":2909
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
 *             pos += 9  # after: ...THH:MM:SS             # <<<<<<<<<<<<<<
 *             self._res.hour = hour
 *             self._res.minute = minute
*/
    __pyx_v_pos = (__pyx_v_pos + 9);

    /* "cytimes/parser.py":2910
 *             # . Update position & Set H/M/S
 *             pos += 9  # after: ...THH:MM:SS
 *             self._res.hour = hour             # <<<<<<<<<<<<<<
 *             self._res.minute = minute
 *             self._res.second = second
*/
    __pyx_v_self->_res->hour = __pyx_v_hour;

    /* "cytimes/parser.py":2911
 *             pos += 9  # after: ...THH:MM:SS
 *             self._res.hour = hour
 *             self._res.minute = minute             # <<<<<<<<<<<<<<
 *             self._res.second = second
 *             # . eof: ...THH:MM:SS
*/
    __pyx_v_self->_res->minute = __pyx_v_minute;

    /* "cytimes/parser.py":2912
 *             self._res.hour = hour
 *             self._res.minute = minute
 *             self._res.second = second             # <<<<<<<<<<<<<<
 *             # . eof: ...THH:MM:SS
 *             if pos == length:
*/
    __pyx_v_self->_res->second = __pyx_v_second;

    /* "cytimes/parser.py":2914
 *             self._res.second = second
 *             # . eof: ...THH:MM:SS
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    __pyx_t_2 = (__pyx_v_pos == __pyx_v_length);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2915
 *             # . eof: ...THH:MM:SS
 *             if pos == length:
 *                 self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                 return True  # exit: success
 *         # . without separator: ...THH[]
*/
      __pyx_v_self->_pos = __pyx_v_pos;

      /* "cytimes/parser.py":2916
 *             if pos == length:
 *                 self._pos = pos  # update position
 *                 return True  # exit: success             # <<<<<<<<<<<<<<
 *         # . without separator: ...THH[]
 *         else:
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":2914
 *             self._res.second = second
 *             # . eof: ...THH:MM:SS
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    }

    /* "cytimes/parser.py":2896
 *             return False  # exit: invalid
 *         # . with separator: ...THH[:]
 *         if utils.is_time_sep(str_read(dtstr, pos + 3)):             # <<<<<<<<<<<<<<
 *             # . THH:MM:SS requires at least 9 characters.
 *             if length - pos < 9:
*/
    goto __pyx_L9;
  }

  /* "cytimes/parser.py":2921
 *             # . THHMMSS requires at least 7 characters (already guarded)
 *             # . minute: ...THH[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 3, length)             # <<<<<<<<<<<<<<
 *             if minute == -1:
 *                 return False  # exit: invalid
*/
  /*else*/ {
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.token_len = __pyx_v_length;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_dtstr, (__pyx_v_pos + 3), &__pyx_t_6); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2921, __pyx_L1_error)
    __pyx_v_minute = __pyx_t_4;

    /* "cytimes/parser.py":2922
 *             # . minute: ...THH[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *             if minute == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . second: ...THHMM[SS]
*/
    __pyx_t_2 = (__pyx_v_minute == -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2923
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *             if minute == -1:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . second: ...THHMM[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 5, length)
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2922
 *             # . minute: ...THH[MM]
 *             minute: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *             if minute == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . second: ...THHMM[SS]
*/
    }

    /* "cytimes/parser.py":2925
 *                 return False  # exit: invalid
 *             # . second: ...THHMM[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 5, length)             # <<<<<<<<<<<<<<
 *             if second == -1:
 *                 return False  # exit: invalid
*/
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.token_len = __pyx_v_length;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isosecond(__pyx_v_dtstr, (__pyx_v_pos + 5), &__pyx_t_7); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2925, __pyx_L1_error)
    __pyx_v_second = __pyx_t_4;

    /* "cytimes/parser.py":2926
 *             # . second: ...THHMM[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 5, length)
 *             if second == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
*/
    __pyx_t_2 = (__pyx_v_second == -1L);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2927
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 5, length)
 *             if second == -1:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             # . Update position & Set H/M/S
 *             pos += 7  # after: ...THHMMSS
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":2926
 *             # . second: ...THHMM[SS]
 *             second: cython.int = utils.parse_isosecond(dtstr, pos + 5, length)
 *             if second == -1:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
*/
    }

    /* "cytimes/parser.py":2929
 *                 return False  # exit: invalid
 *             # . Update position & Set H/M/S
 *             pos += 7  # after: ...THHMMSS             # <<<<<<<<<<<<<<
 *             self._res.hour = hour
 *             self._res.minute = minute
*/
    __pyx_v_pos = (__pyx_v_pos + 7);

    /* "cytimes/parser.py":2930
 *             # . Update position & Set H/M/S
 *             pos += 7  # after: ...THHMMSS
 *             self._res.hour = hour             # <<<<<<<<<<<<<<
 *             self._res.minute = minute
 *             self._res.second = second
*/
    __pyx_v_self->_res->hour = __pyx_v_hour;

    /* "cytimes/parser.py":2931
 *             pos += 7  # after: ...THHMMSS
 *             self._res.hour = hour
 *             self._res.minute = minute             # <<<<<<<<<<<<<<
 *             self._res.second = second
 *             # . eof: ...THHMMSS
*/
    __pyx_v_self->_res->minute = __pyx_v_minute;

    /* "cytimes/parser.py":2932
 *             self._res.hour = hour
 *             self._res.minute = minute
 *             self._res.second = second             # <<<<<<<<<<<<<<
 *             # . eof: ...THHMMSS
 *             if pos == length:
*/
    __pyx_v_self->_res->second = __pyx_v_second;

    /* "cytimes/parser.py":2934
 *             self._res.second = second
 *             # . eof: ...THHMMSS
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    __pyx_t_2 = (__pyx_v_pos == __pyx_v_length);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2935
 *             # . eof: ...THHMMSS
 *             if pos == length:
 *                 self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                 return True  # exit: success
 * 
*/
      __pyx_v_self->_pos = __pyx_v_pos;

      /* "cytimes/parser.py":2936
 *             if pos == length:
 *                 self._pos = pos  # update position
 *                 return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Parse fraction: ...THH:MM:SS[.fff] / ...THH:MM:SS[,fff]
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":2934
 *             self._res.second = second
 *             # . eof: ...THHMMSS
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    }
  }
  __pyx_L9:;

  /* "cytimes/parser.py":2939
 * 
 *         # Parse fraction: ...THH:MM:SS[.fff] / ...THH:MM:SS[,fff]
 *         if length - pos > 1 and str_read(dtstr, pos) in (46, 44):  # '.' or ','             # <<<<<<<<<<<<<<
 *             pos += 1  # skip: [./,]
 *             f_size: cython.int = 0
*/
  __pyx_t_3 = ((__pyx_v_length - __pyx_v_pos) > 1);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L18_bool_binop_done;
  }
  __pyx_t_8 = PyUnicode_READ_CHAR(__pyx_v_dtstr, __pyx_v_pos);
  __pyx_t_9 = (__pyx_t_8 == 46);
  if (!__pyx_t_9) {
  } else {
    __pyx_t_3 = __pyx_t_9;
    goto __pyx_L20_bool_binop_done;
  }
  __pyx_t_9 = (__pyx_t_8 == 44);
  __pyx_t_3 = __pyx_t_9;
  __pyx_L20_bool_binop_done:;
  __pyx_t_9 = __pyx_t_3;
  __pyx_t_2 = __pyx_t_9;
  __pyx_L18_bool_binop_done:;
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2940
 *         # Parse fraction: ...THH:MM:SS[.fff] / ...THH:MM:SS[,fff]
 *         if length - pos > 1 and str_read(dtstr, pos) in (46, 44):  # '.' or ','
 *             pos += 1  # skip: [./,]             # <<<<<<<<<<<<<<
 *             f_size: cython.int = 0
 *             us: cython.int = 0
*/
    __pyx_v_pos = (__pyx_v_pos + 1);

    /* "cytimes/parser.py":2941
 *         if length - pos > 1 and str_read(dtstr, pos) in (46, 44):  # '.' or ','
 *             pos += 1  # skip: [./,]
 *             f_size: cython.int = 0             # <<<<<<<<<<<<<<
 *             us: cython.int = 0
 *             ch: cython.Py_UCS4
*/
    __pyx_v_f_size = 0;

    /* "cytimes/parser.py":2942
 *             pos += 1  # skip: [./,]
 *             f_size: cython.int = 0
 *             us: cython.int = 0             # <<<<<<<<<<<<<<
 *             ch: cython.Py_UCS4
 *             while pos < length:
*/
    __pyx_v_us = 0;

    /* "cytimes/parser.py":2944
 *             us: cython.int = 0
 *             ch: cython.Py_UCS4
 *             while pos < length:             # <<<<<<<<<<<<<<
 *                 ch = str_read(dtstr, pos)
 *                 if not utils.is_ascii_digit(ch):
*/
    while (1) {
      __pyx_t_2 = (__pyx_v_pos < __pyx_v_length);
      if (!__pyx_t_2) break;

      /* "cytimes/parser.py":2945
 *             ch: cython.Py_UCS4
 *             while pos < length:
 *                 ch = str_read(dtstr, pos)             # <<<<<<<<<<<<<<
 *                 if not utils.is_ascii_digit(ch):
 *                     break  # non-digit: end of fraction
*/
      __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_dtstr, __pyx_v_pos);

      /* "cytimes/parser.py":2946
 *             while pos < length:
 *                 ch = str_read(dtstr, pos)
 *                 if not utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     break  # non-digit: end of fraction
 *                 if f_size < 6:
*/
      __pyx_t_2 = (!__pyx_f_7cytimes_5utils_is_ascii_digit(__pyx_v_ch));
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2947
 *                 ch = str_read(dtstr, pos)
 *                 if not utils.is_ascii_digit(ch):
 *                     break  # non-digit: end of fraction             # <<<<<<<<<<<<<<
 *                 if f_size < 6:
 *                     us = us * 10 + (ord(ch) - 48)
*/
        goto __pyx_L23_break;

        /* "cytimes/parser.py":2946
 *             while pos < length:
 *                 ch = str_read(dtstr, pos)
 *                 if not utils.is_ascii_digit(ch):             # <<<<<<<<<<<<<<
 *                     break  # non-digit: end of fraction
 *                 if f_size < 6:
*/
      }

      /* "cytimes/parser.py":2948
 *                 if not utils.is_ascii_digit(ch):
 *                     break  # non-digit: end of fraction
 *                 if f_size < 6:             # <<<<<<<<<<<<<<
 *                     us = us * 10 + (ord(ch) - 48)
 *                     f_size += 1
*/
      __pyx_t_2 = (__pyx_v_f_size < 6);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":2949
 *                     break  # non-digit: end of fraction
 *                 if f_size < 6:
 *                     us = us * 10 + (ord(ch) - 48)             # <<<<<<<<<<<<<<
 *                     f_size += 1
 *                 pos += 1  # digit beyond 6 are skipped
*/
        __pyx_v_us = ((__pyx_v_us * 10) + (__Pyx_long_cast(__pyx_v_ch) - 48));

        /* "cytimes/parser.py":2950
 *                 if f_size < 6:
 *                     us = us * 10 + (ord(ch) - 48)
 *                     f_size += 1             # <<<<<<<<<<<<<<
 *                 pos += 1  # digit beyond 6 are skipped
 *             # . set microsecond
*/
        __pyx_v_f_size = (__pyx_v_f_size + 1);

        /* "cytimes/parser.py":2948
 *                 if not utils.is_ascii_digit(ch):
 *                     break  # non-digit: end of fraction
 *                 if f_size < 6:             # <<<<<<<<<<<<<<
 *                     us = us * 10 + (ord(ch) - 48)
 *                     f_size += 1
*/
      }

      /* "cytimes/parser.py":2951
 *                     us = us * 10 + (ord(ch) - 48)
 *                     f_size += 1
 *                 pos += 1  # digit beyond 6 are skipped             # <<<<<<<<<<<<<<
 *             # . set microsecond
 *             self._res.microsecond = utils.scale_fraction_to_us(us, f_size)
*/
      __pyx_v_pos = (__pyx_v_pos + 1);
    }
    __pyx_L23_break:;

    /* "cytimes/parser.py":2953
 *                 pos += 1  # digit beyond 6 are skipped
 *             # . set microsecond
 *             self._res.microsecond = utils.scale_fraction_to_us(us, f_size)             # <<<<<<<<<<<<<<
 *             # . eof: ...THH:MM:SS.ffffff[fff]
 *             if pos == length:
*/
    __pyx_v_self->_res->microsecond = __pyx_f_7cytimes_5utils_scale_fraction_to_us(__pyx_v_us, __pyx_v_f_size);

    /* "cytimes/parser.py":2955
 *             self._res.microsecond = utils.scale_fraction_to_us(us, f_size)
 *             # . eof: ...THH:MM:SS.ffffff[fff]
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    __pyx_t_2 = (__pyx_v_pos == __pyx_v_length);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":2956
 *             # . eof: ...THH:MM:SS.ffffff[fff]
 *             if pos == length:
 *                 self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                 return True  # exit: success
 * 
*/
      __pyx_v_self->_pos = __pyx_v_pos;

      /* "cytimes/parser.py":2957
 *             if pos == length:
 *                 self._pos = pos  # update position
 *                 return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Skip spaces
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":2955
 *             self._res.microsecond = utils.scale_fraction_to_us(us, f_size)
 *             # . eof: ...THH:MM:SS.ffffff[fff]
 *             if pos == length:             # <<<<<<<<<<<<<<
 *                 self._pos = pos  # update position
 *                 return True  # exit: success
*/
    }

    /* "cytimes/parser.py":2939
 * 
 *         # Parse fraction: ...THH:MM:SS[.fff] / ...THH:MM:SS[,fff]
 *         if length - pos > 1 and str_read(dtstr, pos) in (46, 44):  # '.' or ','             # <<<<<<<<<<<<<<
 *             pos += 1  # skip: [./,]
 *             f_size: cython.int = 0
*/
  }

  /* "cytimes/parser.py":2960
 * 
 *         # Skip spaces
 *         while pos < length and str_read(dtstr, pos) == 32:  # ' '             # <<<<<<<<<<<<<<
 *             pos += 1
 *         if pos == length:
*/
  while (1) {
    __pyx_t_9 = (__pyx_v_pos < __pyx_v_length);
    if (__pyx_t_9) {
    } else {
      __pyx_t_2 = __pyx_t_9;
      goto __pyx_L29_bool_binop_done;
    }
    __pyx_t_9 = (PyUnicode_READ_CHAR(__pyx_v_dtstr, __pyx_v_pos) == 32);
    __pyx_t_2 = __pyx_t_9;
    __pyx_L29_bool_binop_done:;
    if (!__pyx_t_2) break;

    /* "cytimes/parser.py":2961
 *         # Skip spaces
 *         while pos < length and str_read(dtstr, pos) == 32:  # ' '
 *             pos += 1             # <<<<<<<<<<<<<<
 *         if pos == length:
 *             self._pos = pos  # update position
*/
    __pyx_v_pos = (__pyx_v_pos + 1);
  }

  /* "cytimes/parser.py":2962
 *         while pos < length and str_read(dtstr, pos) == 32:  # ' '
 *             pos += 1
 *         if pos == length:             # <<<<<<<<<<<<<<
 *             self._pos = pos  # update position
 *             return True  # exit: success
*/
  __pyx_t_2 = (__pyx_v_pos == __pyx_v_length);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2963
 *             pos += 1
 *         if pos == length:
 *             self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *             return True  # exit: success
 * 
*/
    __pyx_v_self->_pos = __pyx_v_pos;

    /* "cytimes/parser.py":2964
 *         if pos == length:
 *             self._pos = pos  # update position
 *             return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Parse UTC offset
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":2962
 *         while pos < length and str_read(dtstr, pos) == 32:  # ' '
 *             pos += 1
 *         if pos == length:             # <<<<<<<<<<<<<<
 *             self._pos = pos  # update position
 *             return True  # exit: success
*/
  }

  /* "cytimes/parser.py":2967
 * 
 *         # Parse UTC offset
 *         if not self._ignoretz:             # <<<<<<<<<<<<<<
 *             ch: cython.Py_UCS4 = str_read(dtstr, pos)
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
*/
  __pyx_t_2 = (!__pyx_v_self->_ignoretz);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":2968
 *         # Parse UTC offset
 *         if not self._ignoretz:
 *             ch: cython.Py_UCS4 = str_read(dtstr, pos)             # <<<<<<<<<<<<<<
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
 *             if ch in (90, 122):  # 'Z' or 'z'
*/
    __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_dtstr, __pyx_v_pos);

    /* "cytimes/parser.py":2970
 *             ch: cython.Py_UCS4 = str_read(dtstr, pos)
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
 *             if ch in (90, 122):  # 'Z' or 'z'             # <<<<<<<<<<<<<<
 *                 extra: cython.Py_ssize_t = length - pos
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
*/
    switch (__pyx_v_ch) {
      case 90:
      case 0x7A:
      __pyx_t_2 = 1;
      break;
      default:
      __pyx_t_2 = 0;
      break;
    }
    __pyx_t_9 = __pyx_t_2;
    if (__pyx_t_9) {

      /* "cytimes/parser.py":2971
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
 *             if ch in (90, 122):  # 'Z' or 'z'
 *                 extra: cython.Py_ssize_t = length - pos             # <<<<<<<<<<<<<<
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
 *                 if extra == 1:
*/
      __pyx_v_extra = (__pyx_v_length - __pyx_v_pos);

      /* "cytimes/parser.py":2973
 *                 extra: cython.Py_ssize_t = length - pos
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
 *                 if extra == 1:             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
*/
      __pyx_t_9 = (__pyx_v_extra == 1);
      if (__pyx_t_9) {

        /* "cytimes/parser.py":2974
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
 *                 if extra == 1:
 *                     self._res.tzoffset = 0             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     self._pos = length  # update position
*/
        __pyx_v_self->_res->tzoffset = 0;

        /* "cytimes/parser.py":2975
 *                 if extra == 1:
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes             # <<<<<<<<<<<<<<
 *                     self._pos = length  # update position
 *                     return True  # exit: success
*/
        __pyx_v_self->_res->tzoffset_finalized = 1;

        /* "cytimes/parser.py":2976
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     self._pos = length  # update position             # <<<<<<<<<<<<<<
 *                     return True  # exit: success
 *                 # . Z[space]: ...THH:MM:SS[.ffffff]Z[space]
*/
        __pyx_v_self->_pos = __pyx_v_length;

        /* "cytimes/parser.py":2977
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     self._pos = length  # update position
 *                     return True  # exit: success             # <<<<<<<<<<<<<<
 *                 # . Z[space]: ...THH:MM:SS[.ffffff]Z[space]
 *                 elif extra > 1 and str_read(dtstr, pos + 1) == 32:  # ' '
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":2973
 *                 extra: cython.Py_ssize_t = length - pos
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
 *                 if extra == 1:             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
*/
      }

      /* "cytimes/parser.py":2979
 *                     return True  # exit: success
 *                 # . Z[space]: ...THH:MM:SS[.ffffff]Z[space]
 *                 elif extra > 1 and str_read(dtstr, pos + 1) == 32:  # ' '             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
*/
      __pyx_t_2 = (__pyx_v_extra > 1);
      if (__pyx_t_2) {
      } else {
        __pyx_t_9 = __pyx_t_2;
        goto __pyx_L35_bool_binop_done;
      }
      __pyx_t_2 = (PyUnicode_READ_CHAR(__pyx_v_dtstr, (__pyx_v_pos + 1)) == 32);
      __pyx_t_9 = __pyx_t_2;
      __pyx_L35_bool_binop_done:;
      if (__pyx_t_9) {

        /* "cytimes/parser.py":2980
 *                 # . Z[space]: ...THH:MM:SS[.ffffff]Z[space]
 *                 elif extra > 1 and str_read(dtstr, pos + 1) == 32:  # ' '
 *                     self._res.tzoffset = 0             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     pos += 2  # skip: [Z][space]
*/
        __pyx_v_self->_res->tzoffset = 0;

        /* "cytimes/parser.py":2981
 *                 elif extra > 1 and str_read(dtstr, pos + 1) == 32:  # ' '
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes             # <<<<<<<<<<<<<<
 *                     pos += 2  # skip: [Z][space]
 *                     if pos == length:
*/
        __pyx_v_self->_res->tzoffset_finalized = 1;

        /* "cytimes/parser.py":2982
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     pos += 2  # skip: [Z][space]             # <<<<<<<<<<<<<<
 *                     if pos == length:
 *                         self._pos = pos  # update position
*/
        __pyx_v_pos = (__pyx_v_pos + 2);

        /* "cytimes/parser.py":2983
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     pos += 2  # skip: [Z][space]
 *                     if pos == length:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return True  # exit: success
*/
        __pyx_t_9 = (__pyx_v_pos == __pyx_v_length);
        if (__pyx_t_9) {

          /* "cytimes/parser.py":2984
 *                     pos += 2  # skip: [Z][space]
 *                     if pos == length:
 *                         self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                         return True  # exit: success
 * 
*/
          __pyx_v_self->_pos = __pyx_v_pos;

          /* "cytimes/parser.py":2985
 *                     if pos == length:
 *                         self._pos = pos  # update position
 *                         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *             # Could be: ...[+/-HHMM] / ...[+/-HH:MM]
*/
          __pyx_r = 1;
          goto __pyx_L0;

          /* "cytimes/parser.py":2983
 *                     self._res.tzoffset_finalized = True  # prevent further changes
 *                     pos += 2  # skip: [Z][space]
 *                     if pos == length:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return True  # exit: success
*/
        }

        /* "cytimes/parser.py":2979
 *                     return True  # exit: success
 *                 # . Z[space]: ...THH:MM:SS[.ffffff]Z[space]
 *                 elif extra > 1 and str_read(dtstr, pos + 1) == 32:  # ' '             # <<<<<<<<<<<<<<
 *                     self._res.tzoffset = 0
 *                     self._res.tzoffset_finalized = True  # prevent further changes
*/
      }

      /* "cytimes/parser.py":2970
 *             ch: cython.Py_UCS4 = str_read(dtstr, pos)
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
 *             if ch in (90, 122):  # 'Z' or 'z'             # <<<<<<<<<<<<<<
 *                 extra: cython.Py_ssize_t = length - pos
 *                 # . eof: ...THH:MM:SS[.ffffff]Z
*/
      goto __pyx_L33;
    }

    /* "cytimes/parser.py":2988
 * 
 *             # Could be: ...[+/-HHMM] / ...[+/-HH:MM]
 *             elif length - pos > 4 and utils.is_plus_or_minus_sign(ch):             # <<<<<<<<<<<<<<
 *                 # . offset sign: ...[+/-]
 *                 sign: cython.int = 1 if utils.is_plus_sign(ch) else -1
*/
    __pyx_t_2 = ((__pyx_v_length - __pyx_v_pos) > 4);
    if (__pyx_t_2) {
    } else {
      __pyx_t_9 = __pyx_t_2;
      goto __pyx_L38_bool_binop_done;
    }
    __pyx_t_2 = __pyx_f_7cytimes_5utils_is_plus_or_minus_sign(__pyx_v_ch);
    __pyx_t_9 = __pyx_t_2;
    __pyx_L38_bool_binop_done:;
    if (__pyx_t_9) {

      /* "cytimes/parser.py":2990
 *             elif length - pos > 4 and utils.is_plus_or_minus_sign(ch):
 *                 # . offset sign: ...[+/-]
 *                 sign: cython.int = 1 if utils.is_plus_sign(ch) else -1             # <<<<<<<<<<<<<<
 *                 # . offset hour: ...+[HH]
 *                 hh: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
*/
      __pyx_t_9 = __pyx_f_7cytimes_5utils_is_plus_sign(__pyx_v_ch);
      if (__pyx_t_9) {
        __pyx_t_4 = 1;
      } else {
        __pyx_t_4 = -1;
      }
      __pyx_v_sign = __pyx_t_4;

      /* "cytimes/parser.py":2992
 *                 sign: cython.int = 1 if utils.is_plus_sign(ch) else -1
 *                 # . offset hour: ...+[HH]
 *                 hh: cython.int = utils.parse_isohour(dtstr, pos + 1, length)             # <<<<<<<<<<<<<<
 *                 if hh == -1:
 *                     self._pos = pos  # update position
*/
      __pyx_t_5.__pyx_n = 1;
      __pyx_t_5.token_len = __pyx_v_length;
      __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_dtstr, (__pyx_v_pos + 1), &__pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 2992, __pyx_L1_error)
      __pyx_v_hh = __pyx_t_4;

      /* "cytimes/parser.py":2993
 *                 # . offset hour: ...+[HH]
 *                 hh: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *                 if hh == -1:             # <<<<<<<<<<<<<<
 *                     self._pos = pos  # update position
 *                     return self._parse_iso_extra(dtstr)  # exit: fallback
*/
      __pyx_t_9 = (__pyx_v_hh == -1L);
      if (__pyx_t_9) {

        /* "cytimes/parser.py":2994
 *                 hh: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *                 if hh == -1:
 *                     self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                     return self._parse_iso_extra(dtstr)  # exit: fallback
 *                 # . offset minute: ...+HH[:]
*/
        __pyx_v_self->_pos = __pyx_v_pos;

        /* "cytimes/parser.py":2995
 *                 if hh == -1:
 *                     self._pos = pos  # update position
 *                     return self._parse_iso_extra(dtstr)  # exit: fallback             # <<<<<<<<<<<<<<
 *                 # . offset minute: ...+HH[:]
 *                 ch = str_read(dtstr, pos + 3)
*/
        __pyx_t_9 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2995, __pyx_L1_error)
        __pyx_r = __pyx_t_9;
        goto __pyx_L0;

        /* "cytimes/parser.py":2993
 *                 # . offset hour: ...+[HH]
 *                 hh: cython.int = utils.parse_isohour(dtstr, pos + 1, length)
 *                 if hh == -1:             # <<<<<<<<<<<<<<
 *                     self._pos = pos  # update position
 *                     return self._parse_iso_extra(dtstr)  # exit: fallback
*/
      }

      /* "cytimes/parser.py":2997
 *                     return self._parse_iso_extra(dtstr)  # exit: fallback
 *                 # . offset minute: ...+HH[:]
 *                 ch = str_read(dtstr, pos + 3)             # <<<<<<<<<<<<<<
 *                 if utils.is_time_sep(ch):
 *                     # . +HH:[MM]
*/
      __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_dtstr, (__pyx_v_pos + 3));

      /* "cytimes/parser.py":2998
 *                 # . offset minute: ...+HH[:]
 *                 ch = str_read(dtstr, pos + 3)
 *                 if utils.is_time_sep(ch):             # <<<<<<<<<<<<<<
 *                     # . +HH:[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
*/
      __pyx_t_9 = __pyx_f_7cytimes_5utils_is_time_sep(__pyx_v_ch);
      if (__pyx_t_9) {

        /* "cytimes/parser.py":3000
 *                 if utils.is_time_sep(ch):
 *                     # . +HH:[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)             # <<<<<<<<<<<<<<
 *                     if mi == -1:
 *                         self._pos = pos  # update position
*/
        __pyx_t_6.__pyx_n = 1;
        __pyx_t_6.token_len = __pyx_v_length;
        __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_dtstr, (__pyx_v_pos + 4), &__pyx_t_6); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 3000, __pyx_L1_error)
        __pyx_v_mi = __pyx_t_4;

        /* "cytimes/parser.py":3001
 *                     # . +HH:[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *                     if mi == -1:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
*/
        __pyx_t_9 = (__pyx_v_mi == -1L);
        if (__pyx_t_9) {

          /* "cytimes/parser.py":3002
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *                     if mi == -1:
 *                         self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
 *                     pos += 6  # after: +HH:MM
*/
          __pyx_v_self->_pos = __pyx_v_pos;

          /* "cytimes/parser.py":3003
 *                     if mi == -1:
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback             # <<<<<<<<<<<<<<
 *                     pos += 6  # after: +HH:MM
 *                 else:
*/
          __pyx_t_9 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 3003, __pyx_L1_error)
          __pyx_r = __pyx_t_9;
          goto __pyx_L0;

          /* "cytimes/parser.py":3001
 *                     # . +HH:[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
 *                     if mi == -1:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
*/
        }

        /* "cytimes/parser.py":3004
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
 *                     pos += 6  # after: +HH:MM             # <<<<<<<<<<<<<<
 *                 else:
 *                     # . +HH[MM]
*/
        __pyx_v_pos = (__pyx_v_pos + 6);

        /* "cytimes/parser.py":2998
 *                 # . offset minute: ...+HH[:]
 *                 ch = str_read(dtstr, pos + 3)
 *                 if utils.is_time_sep(ch):             # <<<<<<<<<<<<<<
 *                     # . +HH:[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 4, length)
*/
        goto __pyx_L41;
      }

      /* "cytimes/parser.py":3007
 *                 else:
 *                     # . +HH[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 3, length)             # <<<<<<<<<<<<<<
 *                     if mi == -1:
 *                         self._pos = pos  # update position
*/
      /*else*/ {
        __pyx_t_6.__pyx_n = 1;
        __pyx_t_6.token_len = __pyx_v_length;
        __pyx_t_4 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_dtstr, (__pyx_v_pos + 3), &__pyx_t_6); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 3007, __pyx_L1_error)
        __pyx_v_mi = __pyx_t_4;

        /* "cytimes/parser.py":3008
 *                     # . +HH[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *                     if mi == -1:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
*/
        __pyx_t_9 = (__pyx_v_mi == -1L);
        if (__pyx_t_9) {

          /* "cytimes/parser.py":3009
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *                     if mi == -1:
 *                         self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
 *                     pos += 5  # after: +HHMM
*/
          __pyx_v_self->_pos = __pyx_v_pos;

          /* "cytimes/parser.py":3010
 *                     if mi == -1:
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback             # <<<<<<<<<<<<<<
 *                     pos += 5  # after: +HHMM
 *                 # . set UTC offset
*/
          __pyx_t_9 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 3010, __pyx_L1_error)
          __pyx_r = __pyx_t_9;
          goto __pyx_L0;

          /* "cytimes/parser.py":3008
 *                     # . +HH[MM]
 *                     mi: cython.int = utils.parse_isominute(dtstr, pos + 3, length)
 *                     if mi == -1:             # <<<<<<<<<<<<<<
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
*/
        }

        /* "cytimes/parser.py":3011
 *                         self._pos = pos  # update position
 *                         return self._parse_iso_extra(dtstr)  # exit: fallback
 *                     pos += 5  # after: +HHMM             # <<<<<<<<<<<<<<
 *                 # . set UTC offset
 *                 self._res.tzoffset = sign * (hh * 3_600 + mi * 60)
*/
        __pyx_v_pos = (__pyx_v_pos + 5);
      }
      __pyx_L41:;

      /* "cytimes/parser.py":3013
 *                     pos += 5  # after: +HHMM
 *                 # . set UTC offset
 *                 self._res.tzoffset = sign * (hh * 3_600 + mi * 60)             # <<<<<<<<<<<<<<
 *                 self._res.tzoffset_finalized = True  # prevent further changes
 *                 # . eof: ...THH:MM:SS[.ffffff]+HH:MM
*/
      __pyx_v_self->_res->tzoffset = (__pyx_v_sign * ((__pyx_v_hh * 0xE10) + (__pyx_v_mi * 60)));

      /* "cytimes/parser.py":3014
 *                 # . set UTC offset
 *                 self._res.tzoffset = sign * (hh * 3_600 + mi * 60)
 *                 self._res.tzoffset_finalized = True  # prevent further changes             # <<<<<<<<<<<<<<
 *                 # . eof: ...THH:MM:SS[.ffffff]+HH:MM
 *                 if pos == length:
*/
      __pyx_v_self->_res->tzoffset_finalized = 1;

      /* "cytimes/parser.py":3016
 *                 self._res.tzoffset_finalized = True  # prevent further changes
 *                 # . eof: ...THH:MM:SS[.ffffff]+HH:MM
 *                 if pos == length:             # <<<<<<<<<<<<<<
 *                     self._pos = pos  # update position
 *                     return True  # exit: success
*/
      __pyx_t_9 = (__pyx_v_pos == __pyx_v_length);
      if (__pyx_t_9) {

        /* "cytimes/parser.py":3017
 *                 # . eof: ...THH:MM:SS[.ffffff]+HH:MM
 *                 if pos == length:
 *                     self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *                     return True  # exit: success
 * 
*/
        __pyx_v_self->_pos = __pyx_v_pos;

        /* "cytimes/parser.py":3018
 *                 if pos == length:
 *                     self._pos = pos  # update position
 *                     return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Still have extra characters
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3016
 *                 self._res.tzoffset_finalized = True  # prevent further changes
 *                 # . eof: ...THH:MM:SS[.ffffff]+HH:MM
 *                 if pos == length:             # <<<<<<<<<<<<<<
 *                     self._pos = pos  # update position
 *                     return True  # exit: success
*/
      }

      /* "cytimes/parser.py":2988
 * 
 *             # Could be: ...[+/-HHMM] / ...[+/-HH:MM]
 *             elif length - pos > 4 and utils.is_plus_or_minus_sign(ch):             # <<<<<<<<<<<<<<
 *                 # . offset sign: ...[+/-]
 *                 sign: cython.int = 1 if utils.is_plus_sign(ch) else -1
*/
    }
    __pyx_L33:;

    /* "cytimes/parser.py":2967
 * 
 *         # Parse UTC offset
 *         if not self._ignoretz:             # <<<<<<<<<<<<<<
 *             ch: cython.Py_UCS4 = str_read(dtstr, pos)
 *             # Could be: ...THH:MM:SS[.ffffff][Z]
*/
  }

  /* "cytimes/parser.py":3021
 * 
 *         # Still have extra characters
 *         self._pos = pos  # update position             # <<<<<<<<<<<<<<
 *         return self._parse_iso_extra(dtstr)  # exit: fallback
 * 
*/
  __pyx_v_self->_pos = __pyx_v_pos;

  /* "cytimes/parser.py":3022
 *         # Still have extra characters
 *         self._pos = pos  # update position
 *         return self._parse_iso_extra(dtstr)  # exit: fallback             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_9 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(__pyx_v_self, __pyx_v_dtstr); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 3022, __pyx_L1_error)
  __pyx_r = __pyx_t_9;
  goto __pyx_L0;

  /* "cytimes/parser.py":2831
 *         return True  # exit: complete
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_iso_time", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":3024
 *         return self._parse_iso_extra(dtstr)  # exit: fallback
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_extra(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr) {
  PyObject *__pyx_v_token = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser__timelex __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_iso_extra", 0);

  /* "cytimes/parser.py":3054
 *         """
 *         # Reset tokens and (dtstr) position / length
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore             # <<<<<<<<<<<<<<
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.length = __pyx_v_self->_length;
  __pyx_t_1 = __pyx_f_7cytimes_6parser__timelex(__pyx_v_dtstr, __pyx_v_self->_pos, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tokens);
  __Pyx_DECREF(__pyx_v_self->_tokens);
  __pyx_v_self->_tokens = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":3055
 *         # Reset tokens and (dtstr) position / length
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)             # <<<<<<<<<<<<<<
 *         if self._length == 0:
 *             return True  # exit: no valid tokens
*/
  __pyx_t_1 = __pyx_v_self->_tokens;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_self->_length = PyList_GET_SIZE(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":3056
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:             # <<<<<<<<<<<<<<
 *             return True  # exit: no valid tokens
 * 
*/
  __pyx_t_3 = (__pyx_v_self->_length == 0);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3057
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:
 *             return True  # exit: no valid tokens             # <<<<<<<<<<<<<<
 * 
 *         # Position start at -1:
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3056
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:             # <<<<<<<<<<<<<<
 *             return True  # exit: no valid tokens
 * 
*/
  }

  /* "cytimes/parser.py":3061
 *         # Position start at -1:
 *         # '_get_next_token' will advance position
 *         self._pos = -1             # <<<<<<<<<<<<<<
 * 
 *         # Parse tokens
*/
  __pyx_v_self->_pos = -1L;

  /* "cytimes/parser.py":3064
 * 
 *         # Parse tokens
 *         while True:             # <<<<<<<<<<<<<<
 *             # Get next token
 *             token: str = self._get_next_token()
*/
  while (1) {

    /* "cytimes/parser.py":3066
 *         while True:
 *             # Get next token
 *             token: str = self._get_next_token()             # <<<<<<<<<<<<<<
 *             if token is None:
 *                 break
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__get_next_token(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3066, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":3067
 *             # Get next token
 *             token: str = self._get_next_token()
 *             if token is None:             # <<<<<<<<<<<<<<
 *                 break
 *             # . control or space character
*/
    __pyx_t_3 = (__pyx_v_token == ((PyObject*)Py_None));
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3068
 *             token: str = self._get_next_token()
 *             if token is None:
 *                 break             # <<<<<<<<<<<<<<
 *             # . control or space character
 *             elif utils.is_str_ascii_ctl_or_space(token):
*/
      goto __pyx_L5_break;

      /* "cytimes/parser.py":3067
 *             # Get next token
 *             token: str = self._get_next_token()
 *             if token is None:             # <<<<<<<<<<<<<<
 *                 break
 *             # . control or space character
*/
    }

    /* "cytimes/parser.py":3070
 *                 break
 *             # . control or space character
 *             elif utils.is_str_ascii_ctl_or_space(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . weekday token
*/
    __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(__pyx_v_token, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3070, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3073
 *                 pass
 *             # . weekday token
 *             elif self._parse_token_weekday(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . am/pm token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3073, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_weekday(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3073, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3076
 *                 pass
 *             # . am/pm token
 *             elif self._parse_token_ampm(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . tzname token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3076, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_ampm(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3076, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3079
 *                 pass
 *             # . tzname token
 *             elif self._parse_token_tzname(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . tzoffset token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3079, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzname(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3079, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3082
 *                 pass
 *             # . tzoffset token
 *             elif self._parse_token_tzoffset(token):             # <<<<<<<<<<<<<<
 *                 pass
 * 
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3082, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3082, __pyx_L1_error)
    if (__pyx_t_3) {
    }
    __pyx_L6:;
  }
  __pyx_L5_break:;

  /* "cytimes/parser.py":3086
 * 
 *         # Success
 *         self._tokens = None             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_tokens);
  __Pyx_DECREF(__pyx_v_self->_tokens);
  __pyx_v_self->_tokens = ((PyObject*)Py_None);

  /* "cytimes/parser.py":3087
 *         # Success
 *         self._tokens = None
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # Timelex tokens -----------------------------------------------------------------------
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3024
 *         return self._parse_iso_extra(dtstr)  # exit: fallback
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_iso_extra", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3090
 * 
 *     # Timelex tokens -----------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_dtstr) {
  PyObject *__pyx_v_token = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser__timelex __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_process_timelex_tokens", 0);

  /* "cytimes/parser.py":3122
 *         """
 *         # Reset tokens and (dtstr) position / length
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore             # <<<<<<<<<<<<<<
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.length = __pyx_v_self->_length;
  __pyx_t_1 = __pyx_f_7cytimes_6parser__timelex(__pyx_v_dtstr, __pyx_v_self->_pos, &__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3122, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->_tokens);
  __Pyx_DECREF(__pyx_v_self->_tokens);
  __pyx_v_self->_tokens = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "cytimes/parser.py":3123
 *         # Reset tokens and (dtstr) position / length
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)             # <<<<<<<<<<<<<<
 *         if self._length == 0:
 *             return True  # exit: no valid tokens
*/
  __pyx_t_1 = __pyx_v_self->_tokens;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_self->_length = PyList_GET_SIZE(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "cytimes/parser.py":3124
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:             # <<<<<<<<<<<<<<
 *             return True  # exit: no valid tokens
 * 
*/
  __pyx_t_3 = (__pyx_v_self->_length == 0);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3125
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:
 *             return True  # exit: no valid tokens             # <<<<<<<<<<<<<<
 * 
 *         # Position start at -1:
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3124
 *         self._tokens = _timelex(dtstr, self._pos, self._length)  # type: ignore
 *         self._length = list_len(self._tokens)
 *         if self._length == 0:             # <<<<<<<<<<<<<<
 *             return True  # exit: no valid tokens
 * 
*/
  }

  /* "cytimes/parser.py":3129
 *         # Position start at -1:
 *         # '_get_next_token' will advance position
 *         self._pos = -1             # <<<<<<<<<<<<<<
 * 
 *         # Parse tokens
*/
  __pyx_v_self->_pos = -1L;

  /* "cytimes/parser.py":3132
 * 
 *         # Parse tokens
 *         while True:             # <<<<<<<<<<<<<<
 *             # Get next token
 *             token: str = self._get_next_token()
*/
  while (1) {

    /* "cytimes/parser.py":3134
 *         while True:
 *             # Get next token
 *             token: str = self._get_next_token()             # <<<<<<<<<<<<<<
 *             if token is None:
 *                 break
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__get_next_token(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3134, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_XDECREF_SET(__pyx_v_token, ((PyObject*)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "cytimes/parser.py":3135
 *             # Get next token
 *             token: str = self._get_next_token()
 *             if token is None:             # <<<<<<<<<<<<<<
 *                 break
 *             # . control or space character
*/
    __pyx_t_3 = (__pyx_v_token == ((PyObject*)Py_None));
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3136
 *             token: str = self._get_next_token()
 *             if token is None:
 *                 break             # <<<<<<<<<<<<<<
 *             # . control or space character
 *             elif utils.is_str_ascii_ctl_or_space(token):
*/
      goto __pyx_L5_break;

      /* "cytimes/parser.py":3135
 *             # Get next token
 *             token: str = self._get_next_token()
 *             if token is None:             # <<<<<<<<<<<<<<
 *                 break
 *             # . control or space character
*/
    }

    /* "cytimes/parser.py":3138
 *                 break
 *             # . control or space character
 *             elif utils.is_str_ascii_ctl_or_space(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . numeric token
*/
    __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(__pyx_v_token, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3138, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3141
 *                 pass
 *             # . numeric token
 *             elif self._parse_token_numeric(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . month token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3141, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_numeric(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3141, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3144
 *                 pass
 *             # . month token
 *             elif self._parse_token_month(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . iso week
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3144, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_month(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3144, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3147
 *                 pass
 *             # . iso week
 *             elif self._parse_iso_week(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . weekday token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3147, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_iso_week(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3147, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3150
 *                 pass
 *             # . weekday token
 *             elif self._parse_token_weekday(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . am/pm token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3150, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_weekday(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3150, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3153
 *                 pass
 *             # . am/pm token
 *             elif self._parse_token_ampm(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . tzname token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3153, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_ampm(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3153, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3156
 *                 pass
 *             # . tzname token
 *             elif self._parse_token_tzname(token):             # <<<<<<<<<<<<<<
 *                 pass
 *             # . tzoffset token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3156, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzname(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3156, __pyx_L1_error)
    if (__pyx_t_3) {
      goto __pyx_L6;
    }

    /* "cytimes/parser.py":3159
 *                 pass
 *             # . tzoffset token
 *             elif self._parse_token_tzoffset(token):             # <<<<<<<<<<<<<<
 *                 pass
 * 
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3159, __pyx_L1_error)
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(__pyx_v_self, __pyx_v_token); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3159, __pyx_L1_error)
    if (__pyx_t_3) {
    }
    __pyx_L6:;
  }
  __pyx_L5_break:;

  /* "cytimes/parser.py":3163
 * 
 *         # Success
 *         self._tokens = None             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_tokens);
  __Pyx_DECREF(__pyx_v_self->_tokens);
  __pyx_v_self->_tokens = ((PyObject*)Py_None);

  /* "cytimes/parser.py":3164
 *         # Success
 *         self._tokens = None
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3090
 * 
 *     # Timelex tokens -----------------------------------------------------------------------
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.Parser._process_timelex_tokens", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3167
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_numeric(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  Py_ssize_t __pyx_v_token_len;
  int __pyx_v_token_kind;
  PyObject *__pyx_v_token1 = 0;
  int __pyx_v_flag;
  int __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind __pyx_t_2;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_parse_isohour __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_parse_isominute __pyx_t_8;
  unsigned PY_LONG_LONG __pyx_t_9;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_10;
  struct __pyx_opt_args_7cytimes_5utils_parse_isosecond __pyx_t_11;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token __pyx_t_12;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token __pyx_t_13;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token __pyx_t_14;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token __pyx_t_15;
  struct __pyx_opt_args_7cytimes_5utils_parse_isofraction __pyx_t_16;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_token_numeric", 0);

  /* "cytimes/parser.py":3196
 *         """
 *         # Validate if is a numeric token
 *         token_len: cython.Py_ssize_t = str_len(token)             # <<<<<<<<<<<<<<
 *         token_kind: cython.int = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

  /* "cytimes/parser.py":3197
 *         # Validate if is a numeric token
 *         token_len: cython.Py_ssize_t = str_len(token)
 *         token_kind: cython.int = utils.parse_numeric_kind(token, token_len)             # <<<<<<<<<<<<<<
 *         if token_kind == 0:
 *             return False  # exit: not numeric token
*/
  __pyx_t_2.__pyx_n = 1;
  __pyx_t_2.token_len = __pyx_v_token_len;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_numeric_kind(__pyx_v_token, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3197, __pyx_L1_error)
  __pyx_v_token_kind = __pyx_t_1;

  /* "cytimes/parser.py":3198
 *         token_len: cython.Py_ssize_t = str_len(token)
 *         token_kind: cython.int = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: not numeric token
 * 
*/
  __pyx_t_3 = (__pyx_v_token_kind == 0);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3199
 *         token_kind: cython.int = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
 *             return False  # exit: not numeric token             # <<<<<<<<<<<<<<
 * 
 *         # Pure Integer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3198
 *         token_len: cython.Py_ssize_t = str_len(token)
 *         token_kind: cython.int = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: not numeric token
 * 
*/
  }

  /* "cytimes/parser.py":3202
 * 
 *         # Pure Integer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             # . (Y/M/D)HH[MM]
 *             if (
*/
  __pyx_t_3 = (__pyx_v_token_kind == 1);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3205
 *             # . (Y/M/D)HH[MM]
 *             if (
 *                 token_len in (2, 4)  # HH or HHMM             # <<<<<<<<<<<<<<
 *                 and not self._res.is_hour_set()  # hour not set
 *                 and self._res.ymd_slots_filled() == 3  # Y/M/D recorded
*/
    switch (__pyx_v_token_len) {
      case 2:
      case 4:
      __pyx_t_4 = 1;
      break;
      default:
      __pyx_t_4 = 0;
      break;
    }
    __pyx_t_5 = __pyx_t_4;
    if (__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }

    /* "cytimes/parser.py":3206
 *             if (
 *                 token_len in (2, 4)  # HH or HHMM
 *                 and not self._res.is_hour_set()  # hour not set             # <<<<<<<<<<<<<<
 *                 and self._res.ymd_slots_filled() == 3  # Y/M/D recorded
 *                 and (
*/
    __pyx_t_5 = (!__pyx_f_7cytimes_6parser_6Result_is_hour_set(__pyx_v_self->_res));
    if (__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }

    /* "cytimes/parser.py":3207
 *                 token_len in (2, 4)  # HH or HHMM
 *                 and not self._res.is_hour_set()  # hour not set
 *                 and self._res.ymd_slots_filled() == 3  # Y/M/D recorded             # <<<<<<<<<<<<<<
 *                 and (
 *                     not self._has_token(1)  # no more tokens
*/
    __pyx_t_5 = (__pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(__pyx_v_self->_res) == 3);
    if (__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }

    /* "cytimes/parser.py":3209
 *                 and self._res.ymd_slots_filled() == 3  # Y/M/D recorded
 *                 and (
 *                     not self._has_token(1)  # no more tokens             # <<<<<<<<<<<<<<
 *                     or (
 *                         # next token is not time-field separator
*/
    __pyx_t_5 = (!__pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 1));
    if (!__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L6_bool_binop_done;
    }

    /* "cytimes/parser.py":3212
 *                     or (
 *                         # next token is not time-field separator
 *                         not utils.is_str_time_sep(self._get_token1())             # <<<<<<<<<<<<<<
 *                         # next token is not H/M/S flag
 *                         and not self._cfg.is_hms(self._get_token1())
*/
    __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3212, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_f_7cytimes_5utils_is_str_time_sep(((PyObject*)__pyx_t_6), NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3212, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_4 = (!__pyx_t_5);
    if (__pyx_t_4) {
    } else {
      __pyx_t_3 = __pyx_t_4;
      goto __pyx_L6_bool_binop_done;
    }

    /* "cytimes/parser.py":3214
 *                         not utils.is_str_time_sep(self._get_token1())
 *                         # next token is not H/M/S flag
 *                         and not self._cfg.is_hms(self._get_token1())             # <<<<<<<<<<<<<<
 *                     )
 *                 )
*/
    __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3214, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->is_hms(__pyx_v_self->_cfg, ((PyObject*)__pyx_t_6), 0); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 3214, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = (!__pyx_t_4);
    __pyx_t_3 = __pyx_t_5;
    __pyx_L6_bool_binop_done:;

    /* "cytimes/parser.py":3204
 *         if token_kind == 1:
 *             # . (Y/M/D)HH[MM]
 *             if (             # <<<<<<<<<<<<<<
 *                 token_len in (2, 4)  # HH or HHMM
 *                 and not self._res.is_hour_set()  # hour not set
*/
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3219
 *             ):
 *                 # . (Y/M/D)[HH]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)             # <<<<<<<<<<<<<<
 *                 if token_len == 4:
 *                     # . (Y/M/D)HH[MM]
*/
      __pyx_t_7.__pyx_n = 1;
      __pyx_t_7.token_len = __pyx_v_token_len;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_token, 0, &__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3219, __pyx_L1_error)
      __pyx_v_self->_res->hour = __pyx_t_1;

      /* "cytimes/parser.py":3220
 *                 # . (Y/M/D)[HH]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                 if token_len == 4:             # <<<<<<<<<<<<<<
 *                     # . (Y/M/D)HH[MM]
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
*/
      __pyx_t_3 = (__pyx_v_token_len == 4);
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3222
 *                 if token_len == 4:
 *                     # . (Y/M/D)HH[MM]
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)             # <<<<<<<<<<<<<<
 *                 return True  # exit
 * 
*/
        __pyx_t_8.__pyx_n = 1;
        __pyx_t_8.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token, 2, &__pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3222, __pyx_L1_error)
        __pyx_v_self->_res->minute = __pyx_t_1;

        /* "cytimes/parser.py":3220
 *                 # . (Y/M/D)[HH]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                 if token_len == 4:             # <<<<<<<<<<<<<<
 *                     # . (Y/M/D)HH[MM]
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
*/
      }

      /* "cytimes/parser.py":3223
 *                     # . (Y/M/D)HH[MM]
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *             # . YYMMDD / HHMMSS
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3204
 *         if token_kind == 1:
 *             # . (Y/M/D)HH[MM]
 *             if (             # <<<<<<<<<<<<<<
 *                 token_len in (2, 4)  # HH or HHMM
 *                 and not self._res.is_hour_set()  # hour not set
*/
    }

    /* "cytimes/parser.py":3226
 * 
 *             # . YYMMDD / HHMMSS
 *             if token_len == 6:             # <<<<<<<<<<<<<<
 *                 # . [YYMMDD] (ambiguous Y/M/D)
 *                 if self._res.ymd_slots_filled() == 0:
*/
    __pyx_t_3 = (__pyx_v_token_len == 6);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3228
 *             if token_len == 6:
 *                 # . [YYMMDD] (ambiguous Y/M/D)
 *                 if self._res.ymd_slots_filled() == 0:             # <<<<<<<<<<<<<<
 *                     self._res.set_ymd_int(
 *                         0, utils.slice_to_uint(token, 0, 2, token_len)
*/
      __pyx_t_3 = (__pyx_f_7cytimes_6parser_6Result_ymd_slots_filled(__pyx_v_self->_res) == 0);
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3230
 *                 if self._res.ymd_slots_filled() == 0:
 *                     self._res.set_ymd_int(
 *                         0, utils.slice_to_uint(token, 0, 2, token_len)             # <<<<<<<<<<<<<<
 *                     )
 *                     self._res.set_ymd_int(
*/
        __pyx_t_10.__pyx_n = 1;
        __pyx_t_10.token_len = __pyx_v_token_len;
        __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, 2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3230, __pyx_L1_error)

        /* "cytimes/parser.py":3229
 *                 # . [YYMMDD] (ambiguous Y/M/D)
 *                 if self._res.ymd_slots_filled() == 0:
 *                     self._res.set_ymd_int(             # <<<<<<<<<<<<<<
 *                         0, utils.slice_to_uint(token, 0, 2, token_len)
 *                     )
*/
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3229, __pyx_L1_error)

        /* "cytimes/parser.py":3233
 *                     )
 *                     self._res.set_ymd_int(
 *                         0, utils.slice_to_uint(token, 2, 2, token_len)             # <<<<<<<<<<<<<<
 *                     )
 *                     self._res.set_ymd_int(
*/
        __pyx_t_10.__pyx_n = 1;
        __pyx_t_10.token_len = __pyx_v_token_len;
        __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 2, 2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3233, __pyx_L1_error)

        /* "cytimes/parser.py":3232
 *                         0, utils.slice_to_uint(token, 0, 2, token_len)
 *                     )
 *                     self._res.set_ymd_int(             # <<<<<<<<<<<<<<
 *                         0, utils.slice_to_uint(token, 2, 2, token_len)
 *                     )
*/
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3232, __pyx_L1_error)

        /* "cytimes/parser.py":3236
 *                     )
 *                     self._res.set_ymd_int(
 *                         0, utils.slice_to_uint(token, 4, 2, token_len)             # <<<<<<<<<<<<<<
 *                     )
 *                 # . [HHMMSS]
*/
        __pyx_t_10.__pyx_n = 1;
        __pyx_t_10.token_len = __pyx_v_token_len;
        __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 4, 2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3236, __pyx_L1_error)

        /* "cytimes/parser.py":3235
 *                         0, utils.slice_to_uint(token, 2, 2, token_len)
 *                     )
 *                     self._res.set_ymd_int(             # <<<<<<<<<<<<<<
 *                         0, utils.slice_to_uint(token, 4, 2, token_len)
 *                     )
*/
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3235, __pyx_L1_error)

        /* "cytimes/parser.py":3228
 *             if token_len == 6:
 *                 # . [YYMMDD] (ambiguous Y/M/D)
 *                 if self._res.ymd_slots_filled() == 0:             # <<<<<<<<<<<<<<
 *                     self._res.set_ymd_int(
 *                         0, utils.slice_to_uint(token, 0, 2, token_len)
*/
        goto __pyx_L14;
      }

      /* "cytimes/parser.py":3240
 *                 # . [HHMMSS]
 *                 else:
 *                     self._res.hour = utils.parse_isohour(token, 0, token_len)             # <<<<<<<<<<<<<<
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                     self._res.second = utils.parse_isosecond(token, 4, token_len)
*/
      /*else*/ {
        __pyx_t_7.__pyx_n = 1;
        __pyx_t_7.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_token, 0, &__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3240, __pyx_L1_error)
        __pyx_v_self->_res->hour = __pyx_t_1;

        /* "cytimes/parser.py":3241
 *                 else:
 *                     self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)             # <<<<<<<<<<<<<<
 *                     self._res.second = utils.parse_isosecond(token, 4, token_len)
 *                 return True  # exit
*/
        __pyx_t_8.__pyx_n = 1;
        __pyx_t_8.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token, 2, &__pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3241, __pyx_L1_error)
        __pyx_v_self->_res->minute = __pyx_t_1;

        /* "cytimes/parser.py":3242
 *                     self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                     self._res.second = utils.parse_isosecond(token, 4, token_len)             # <<<<<<<<<<<<<<
 *                 return True  # exit
 * 
*/
        __pyx_t_11.__pyx_n = 1;
        __pyx_t_11.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isosecond(__pyx_v_token, 4, &__pyx_t_11); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3242, __pyx_L1_error)
        __pyx_v_self->_res->second = __pyx_t_1;
      }
      __pyx_L14:;

      /* "cytimes/parser.py":3243
 *                     self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                     self._res.second = utils.parse_isosecond(token, 4, token_len)
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *             # . YYYYMMDD[HHMM[SS]]
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3226
 * 
 *             # . YYMMDD / HHMMSS
 *             if token_len == 6:             # <<<<<<<<<<<<<<
 *                 # . [YYMMDD] (ambiguous Y/M/D)
 *                 if self._res.ymd_slots_filled() == 0:
*/
    }

    /* "cytimes/parser.py":3246
 * 
 *             # . YYYYMMDD[HHMM[SS]]
 *             if token_len in (8, 10, 12, 14):             # <<<<<<<<<<<<<<
 *                 # . [YYYYMMDD] (ambiguous M/D)
 *                 self._res.set_ymd_int(1, utils.slice_to_uint(token, 0, 4, token_len))
*/
    switch (__pyx_v_token_len) {
      case 8:
      case 10:
      case 12:
      case 14:

      /* "cytimes/parser.py":3248
 *             if token_len in (8, 10, 12, 14):
 *                 # . [YYYYMMDD] (ambiguous M/D)
 *                 self._res.set_ymd_int(1, utils.slice_to_uint(token, 0, 4, token_len))             # <<<<<<<<<<<<<<
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 4, 2, token_len))
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 6, 2, token_len))
*/
      __pyx_t_10.__pyx_n = 1;
      __pyx_t_10.token_len = __pyx_v_token_len;
      __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, 4, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3248, __pyx_L1_error)
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 1, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3248, __pyx_L1_error)

      /* "cytimes/parser.py":3249
 *                 # . [YYYYMMDD] (ambiguous M/D)
 *                 self._res.set_ymd_int(1, utils.slice_to_uint(token, 0, 4, token_len))
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 4, 2, token_len))             # <<<<<<<<<<<<<<
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 6, 2, token_len))
 *                 # . YYYYMMDD[HH]
*/
      __pyx_t_10.__pyx_n = 1;
      __pyx_t_10.token_len = __pyx_v_token_len;
      __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 4, 2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3249, __pyx_L1_error)
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3249, __pyx_L1_error)

      /* "cytimes/parser.py":3250
 *                 self._res.set_ymd_int(1, utils.slice_to_uint(token, 0, 4, token_len))
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 4, 2, token_len))
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 6, 2, token_len))             # <<<<<<<<<<<<<<
 *                 # . YYYYMMDD[HH]
 *                 if token_len > 8:
*/
      __pyx_t_10.__pyx_n = 1;
      __pyx_t_10.token_len = __pyx_v_token_len;
      __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 6, 2, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3250, __pyx_L1_error)
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_t_9); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3250, __pyx_L1_error)

      /* "cytimes/parser.py":3252
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 6, 2, token_len))
 *                 # . YYYYMMDD[HH]
 *                 if token_len > 8:             # <<<<<<<<<<<<<<
 *                     self._res.hour = utils.parse_isohour(token, 8, token_len)
 *                     # . YYYYMMDDHH[MM]
*/
      __pyx_t_3 = (__pyx_v_token_len > 8);
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3253
 *                 # . YYYYMMDD[HH]
 *                 if token_len > 8:
 *                     self._res.hour = utils.parse_isohour(token, 8, token_len)             # <<<<<<<<<<<<<<
 *                     # . YYYYMMDDHH[MM]
 *                     if token_len > 10:
*/
        __pyx_t_7.__pyx_n = 1;
        __pyx_t_7.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_token, 8, &__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3253, __pyx_L1_error)
        __pyx_v_self->_res->hour = __pyx_t_1;

        /* "cytimes/parser.py":3255
 *                     self._res.hour = utils.parse_isohour(token, 8, token_len)
 *                     # . YYYYMMDDHH[MM]
 *                     if token_len > 10:             # <<<<<<<<<<<<<<
 *                         self._res.minute = utils.parse_isominute(token, 10, token_len)
 *                         # . YYYYMMDDHHMM[SS]
*/
        __pyx_t_3 = (__pyx_v_token_len > 10);
        if (__pyx_t_3) {

          /* "cytimes/parser.py":3256
 *                     # . YYYYMMDDHH[MM]
 *                     if token_len > 10:
 *                         self._res.minute = utils.parse_isominute(token, 10, token_len)             # <<<<<<<<<<<<<<
 *                         # . YYYYMMDDHHMM[SS]
 *                         if token_len > 12:
*/
          __pyx_t_8.__pyx_n = 1;
          __pyx_t_8.token_len = __pyx_v_token_len;
          __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token, 10, &__pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3256, __pyx_L1_error)
          __pyx_v_self->_res->minute = __pyx_t_1;

          /* "cytimes/parser.py":3258
 *                         self._res.minute = utils.parse_isominute(token, 10, token_len)
 *                         # . YYYYMMDDHHMM[SS]
 *                         if token_len > 12:             # <<<<<<<<<<<<<<
 *                             self._res.second = utils.parse_isosecond(
 *                                 token, 12, token_len
*/
          __pyx_t_3 = (__pyx_v_token_len > 12);
          if (__pyx_t_3) {

            /* "cytimes/parser.py":3259
 *                         # . YYYYMMDDHHMM[SS]
 *                         if token_len > 12:
 *                             self._res.second = utils.parse_isosecond(             # <<<<<<<<<<<<<<
 *                                 token, 12, token_len
 *                             )
*/
            __pyx_t_11.__pyx_n = 1;
            __pyx_t_11.token_len = __pyx_v_token_len;
            __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isosecond(__pyx_v_token, 12, &__pyx_t_11); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3259, __pyx_L1_error)
            __pyx_v_self->_res->second = __pyx_t_1;

            /* "cytimes/parser.py":3258
 *                         self._res.minute = utils.parse_isominute(token, 10, token_len)
 *                         # . YYYYMMDDHHMM[SS]
 *                         if token_len > 12:             # <<<<<<<<<<<<<<
 *                             self._res.second = utils.parse_isosecond(
 *                                 token, 12, token_len
*/
          }

          /* "cytimes/parser.py":3255
 *                     self._res.hour = utils.parse_isohour(token, 8, token_len)
 *                     # . YYYYMMDDHH[MM]
 *                     if token_len > 10:             # <<<<<<<<<<<<<<
 *                         self._res.minute = utils.parse_isominute(token, 10, token_len)
 *                         # . YYYYMMDDHHMM[SS]
*/
        }

        /* "cytimes/parser.py":3252
 *                 self._res.set_ymd_int(0, utils.slice_to_uint(token, 6, 2, token_len))
 *                 # . YYYYMMDD[HH]
 *                 if token_len > 8:             # <<<<<<<<<<<<<<
 *                     self._res.hour = utils.parse_isohour(token, 8, token_len)
 *                     # . YYYYMMDDHH[MM]
*/
      }

      /* "cytimes/parser.py":3262
 *                                 token, 12, token_len
 *                             )
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *             # Next token exists
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3246
 * 
 *             # . YYYYMMDD[HHMM[SS]]
 *             if token_len in (8, 10, 12, 14):             # <<<<<<<<<<<<<<
 *                 # . [YYYYMMDD] (ambiguous M/D)
 *                 self._res.set_ymd_int(1, utils.slice_to_uint(token, 0, 4, token_len))
*/
      break;
      default: break;
    }

    /* "cytimes/parser.py":3265
 * 
 *             # Next token exists
 *             if self._has_token(1):             # <<<<<<<<<<<<<<
 *                 token1: str = self._get_token1()
 *                 # . HH:[MM[:SS[.ss]]]]
*/
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 1);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3266
 *             # Next token exists
 *             if self._has_token(1):
 *                 token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *                 # . HH:[MM[:SS[.ss]]]]
 *                 if (
*/
      __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3266, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __pyx_v_token1 = ((PyObject*)__pyx_t_6);
      __pyx_t_6 = 0;

      /* "cytimes/parser.py":3270
 *                 if (
 *                     # token(1) must be time separator
 *                     utils.is_str_time_sep(token1)             # <<<<<<<<<<<<<<
 *                     # try set hour: token(0)
 *                     and self._set_hour_by_token(token, token_len, token_kind)
*/
      __pyx_t_5 = __pyx_f_7cytimes_5utils_is_str_time_sep(__pyx_v_token1, NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3270, __pyx_L1_error)
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L20_bool_binop_done;
      }

      /* "cytimes/parser.py":3272
 *                     utils.is_str_time_sep(token1)
 *                     # try set hour: token(0)
 *                     and self._set_hour_by_token(token, token_len, token_kind)             # <<<<<<<<<<<<<<
 *                 ):
 *                     # token(0) is hour
*/
      __pyx_t_12.__pyx_n = 3;
      __pyx_t_12.token = __pyx_v_token;
      __pyx_t_12.token_len = __pyx_v_token_len;
      __pyx_t_12.token_kind = __pyx_v_token_kind;
      __pyx_t_5 = __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(__pyx_v_self, &__pyx_t_12); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3272, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
      __pyx_L20_bool_binop_done:;

      /* "cytimes/parser.py":3268
 *                 token1: str = self._get_token1()
 *                 # . HH:[MM[:SS[.ss]]]]
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(1) must be time separator
 *                     utils.is_str_time_sep(token1)
*/
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3276
 *                     # token(0) is hour
 *                     # try set minute: token(2)
 *                     if not self._set_minute_by_token(self._get_token(2)):             # <<<<<<<<<<<<<<
 *                         # token(2) is not minute
 *                         self._pos += 1  # skip token(1)
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3276, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_13.__pyx_n = 1;
        __pyx_t_13.token = ((PyObject*)__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_minute_by_token(__pyx_v_self, &__pyx_t_13); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3276, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_5 = (!__pyx_t_3);
        if (__pyx_t_5) {

          /* "cytimes/parser.py":3278
 *                     if not self._set_minute_by_token(self._get_token(2)):
 *                         # token(2) is not minute
 *                         self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *                         return True  # exit
 * 
*/
          __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

          /* "cytimes/parser.py":3279
 *                         # token(2) is not minute
 *                         self._pos += 1  # skip token(1)
 *                         return True  # exit             # <<<<<<<<<<<<<<
 * 
 *                     # token(2) is minute / token(4) could be second
*/
          __pyx_r = 1;
          goto __pyx_L0;

          /* "cytimes/parser.py":3276
 *                     # token(0) is hour
 *                     # try set minute: token(2)
 *                     if not self._set_minute_by_token(self._get_token(2)):             # <<<<<<<<<<<<<<
 *                         # token(2) is not minute
 *                         self._pos += 1  # skip token(1)
*/
        }

        /* "cytimes/parser.py":3284
 *                     if not (
 *                         # token(3) must be time separator
 *                         utils.is_str_time_sep(self._get_token(3))             # <<<<<<<<<<<<<<
 *                         # try set second: token(4)
 *                         and self._set_second_by_token(self._get_token(4))
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3284, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_time_sep(((PyObject*)__pyx_t_6), NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3284, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (__pyx_t_3) {
        } else {
          __pyx_t_5 = __pyx_t_3;
          goto __pyx_L24_bool_binop_done;
        }

        /* "cytimes/parser.py":3286
 *                         utils.is_str_time_sep(self._get_token(3))
 *                         # try set second: token(4)
 *                         and self._set_second_by_token(self._get_token(4))             # <<<<<<<<<<<<<<
 *                     ):
 *                         # token(4) is not second
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3286, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_14.__pyx_n = 1;
        __pyx_t_14.token = ((PyObject*)__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_second_by_token(__pyx_v_self, &__pyx_t_14); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3286, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_5 = __pyx_t_3;
        __pyx_L24_bool_binop_done:;

        /* "cytimes/parser.py":3282
 * 
 *                     # token(2) is minute / token(4) could be second
 *                     if not (             # <<<<<<<<<<<<<<
 *                         # token(3) must be time separator
 *                         utils.is_str_time_sep(self._get_token(3))
*/
        __pyx_t_3 = (!__pyx_t_5);
        if (__pyx_t_3) {

          /* "cytimes/parser.py":3289
 *                     ):
 *                         # token(4) is not second
 *                         self._pos += 2  # skip token(1..2)             # <<<<<<<<<<<<<<
 *                         return True  # exit
 * 
*/
          __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

          /* "cytimes/parser.py":3290
 *                         # token(4) is not second
 *                         self._pos += 2  # skip token(1..2)
 *                         return True  # exit             # <<<<<<<<<<<<<<
 * 
 *                     # all H/M/S are set successfully
*/
          __pyx_r = 1;
          goto __pyx_L0;

          /* "cytimes/parser.py":3282
 * 
 *                     # token(2) is minute / token(4) could be second
 *                     if not (             # <<<<<<<<<<<<<<
 *                         # token(3) must be time separator
 *                         utils.is_str_time_sep(self._get_token(3))
*/
        }

        /* "cytimes/parser.py":3293
 * 
 *                     # all H/M/S are set successfully
 *                     self._pos += 4  # skip token(1..4)             # <<<<<<<<<<<<<<
 *                     return True  # exit
 * 
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 4);

        /* "cytimes/parser.py":3294
 *                     # all H/M/S are set successfully
 *                     self._pos += 4  # skip token(1..4)
 *                     return True  # exit             # <<<<<<<<<<<<<<
 * 
 *                 # . YY-[MM-DD] | YY/[MM/DD] | YY.[MM.DD] (ambiguous)
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3268
 *                 token1: str = self._get_token1()
 *                 # . HH:[MM[:SS[.ss]]]]
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(1) must be time separator
 *                     utils.is_str_time_sep(token1)
*/
      }

      /* "cytimes/parser.py":3299
 *                 if (
 *                     # token(1) must be date separator
 *                     utils.is_str_date_sep(token1)             # <<<<<<<<<<<<<<
 *                     # try set 1st Y/M/D: token(0)
 *                     and self._set_ymd_by_token(0, token, token_len, token_kind)
*/
      __pyx_t_5 = __pyx_f_7cytimes_5utils_is_str_date_sep(__pyx_v_token1, NULL); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3299, __pyx_L1_error)
      if (__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L27_bool_binop_done;
      }

      /* "cytimes/parser.py":3301
 *                     utils.is_str_date_sep(token1)
 *                     # try set 1st Y/M/D: token(0)
 *                     and self._set_ymd_by_token(0, token, token_len, token_kind)             # <<<<<<<<<<<<<<
 *                 ):
 *                     # token(0) is Y/M/D
*/
      __pyx_t_15.__pyx_n = 3;
      __pyx_t_15.token = __pyx_v_token;
      __pyx_t_15.token_len = __pyx_v_token_len;
      __pyx_t_15.token_kind = __pyx_v_token_kind;
      __pyx_t_5 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_15); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3301, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
      __pyx_L27_bool_binop_done:;

      /* "cytimes/parser.py":3297
 * 
 *                 # . YY-[MM-DD] | YY/[MM/DD] | YY.[MM.DD] (ambiguous)
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(1) must be date separator
 *                     utils.is_str_date_sep(token1)
*/
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3305
 *                     # token(0) is Y/M/D
 *                     # try set 2nd Y/M/D: token(2)
 *                     if not self._set_ymd_by_token(0, self._get_token(2)):             # <<<<<<<<<<<<<<
 *                         # token(2) is not Y/M/D
 *                         self._pos += 1  # skip token(1)
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3305, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_15.__pyx_n = 1;
        __pyx_t_15.token = ((PyObject*)__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_15); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3305, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_5 = (!__pyx_t_3);
        if (__pyx_t_5) {

          /* "cytimes/parser.py":3307
 *                     if not self._set_ymd_by_token(0, self._get_token(2)):
 *                         # token(2) is not Y/M/D
 *                         self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *                         return True
 * 
*/
          __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

          /* "cytimes/parser.py":3308
 *                         # token(2) is not Y/M/D
 *                         self._pos += 1  # skip token(1)
 *                         return True             # <<<<<<<<<<<<<<
 * 
 *                     # token(2) is Y/M/D / token(4) could be Y/M/D
*/
          __pyx_r = 1;
          goto __pyx_L0;

          /* "cytimes/parser.py":3305
 *                     # token(0) is Y/M/D
 *                     # try set 2nd Y/M/D: token(2)
 *                     if not self._set_ymd_by_token(0, self._get_token(2)):             # <<<<<<<<<<<<<<
 *                         # token(2) is not Y/M/D
 *                         self._pos += 1  # skip token(1)
*/
        }

        /* "cytimes/parser.py":3313
 *                     if not (
 *                         # token(3) must be date separator
 *                         utils.is_str_date_sep(self._get_token(3))             # <<<<<<<<<<<<<<
 *                         # try set 3rd Y/M/D: token(4)
 *                         and self._set_ymd_by_token(0, self._get_token(4))
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3313, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_date_sep(((PyObject*)__pyx_t_6), NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3313, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        if (__pyx_t_3) {
        } else {
          __pyx_t_5 = __pyx_t_3;
          goto __pyx_L31_bool_binop_done;
        }

        /* "cytimes/parser.py":3315
 *                         utils.is_str_date_sep(self._get_token(3))
 *                         # try set 3rd Y/M/D: token(4)
 *                         and self._set_ymd_by_token(0, self._get_token(4))             # <<<<<<<<<<<<<<
 *                     ):
 *                         # token(4) is not Y/M/D
*/
        __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_15.__pyx_n = 1;
        __pyx_t_15.token = ((PyObject*)__pyx_t_6);
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_15); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3315, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_5 = __pyx_t_3;
        __pyx_L31_bool_binop_done:;

        /* "cytimes/parser.py":3311
 * 
 *                     # token(2) is Y/M/D / token(4) could be Y/M/D
 *                     if not (             # <<<<<<<<<<<<<<
 *                         # token(3) must be date separator
 *                         utils.is_str_date_sep(self._get_token(3))
*/
        __pyx_t_3 = (!__pyx_t_5);
        if (__pyx_t_3) {

          /* "cytimes/parser.py":3318
 *                     ):
 *                         # token(4) is not Y/M/D
 *                         self._pos += 2  # skip token(1..2)             # <<<<<<<<<<<<<<
 *                         return True  # exit
 * 
*/
          __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

          /* "cytimes/parser.py":3319
 *                         # token(4) is not Y/M/D
 *                         self._pos += 2  # skip token(1..2)
 *                         return True  # exit             # <<<<<<<<<<<<<<
 * 
 *                     # all Y/M/D are set successfully
*/
          __pyx_r = 1;
          goto __pyx_L0;

          /* "cytimes/parser.py":3311
 * 
 *                     # token(2) is Y/M/D / token(4) could be Y/M/D
 *                     if not (             # <<<<<<<<<<<<<<
 *                         # token(3) must be date separator
 *                         utils.is_str_date_sep(self._get_token(3))
*/
        }

        /* "cytimes/parser.py":3322
 * 
 *                     # all Y/M/D are set successfully
 *                     self._pos += 4  # skip token(1..4)             # <<<<<<<<<<<<<<
 *                     return True  # exit
 * 
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 4);

        /* "cytimes/parser.py":3323
 *                     # all Y/M/D are set successfully
 *                     self._pos += 4  # skip token(1..4)
 *                     return True  # exit             # <<<<<<<<<<<<<<
 * 
 *         # Pure Decimal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3297
 * 
 *                 # . YY-[MM-DD] | YY/[MM/DD] | YY.[MM.DD] (ambiguous)
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(1) must be date separator
 *                     utils.is_str_date_sep(token1)
*/
      }

      /* "cytimes/parser.py":3265
 * 
 *             # Next token exists
 *             if self._has_token(1):             # <<<<<<<<<<<<<<
 *                 token1: str = self._get_token1()
 *                 # . HH:[MM[:SS[.ss]]]]
*/
    }

    /* "cytimes/parser.py":3202
 * 
 *         # Pure Integer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             # . (Y/M/D)HH[MM]
 *             if (
*/
    goto __pyx_L4;
  }

  /* "cytimes/parser.py":3328
 *         else:
 *             # . HHMMSS.[fff]
 *             if token_len > 6 and utils.is_dot(str_read(token, 6)):             # <<<<<<<<<<<<<<
 *                 # . [HHMMSS]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
*/
  /*else*/ {
    __pyx_t_5 = (__pyx_v_token_len > 6);
    if (__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L34_bool_binop_done;
    }
    __pyx_t_5 = __pyx_f_7cytimes_5utils_is_dot(PyUnicode_READ_CHAR(__pyx_v_token, 6));
    __pyx_t_3 = __pyx_t_5;
    __pyx_L34_bool_binop_done:;
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3330
 *             if token_len > 6 and utils.is_dot(str_read(token, 6)):
 *                 # . [HHMMSS]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)             # <<<<<<<<<<<<<<
 *                 self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                 self._res.second = utils.parse_isosecond(token, 4, token_len)
*/
      __pyx_t_7.__pyx_n = 1;
      __pyx_t_7.token_len = __pyx_v_token_len;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_token, 0, &__pyx_t_7); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3330, __pyx_L1_error)
      __pyx_v_self->_res->hour = __pyx_t_1;

      /* "cytimes/parser.py":3331
 *                 # . [HHMMSS]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                 self._res.minute = utils.parse_isominute(token, 2, token_len)             # <<<<<<<<<<<<<<
 *                 self._res.second = utils.parse_isosecond(token, 4, token_len)
 *                 # . [fff]
*/
      __pyx_t_8.__pyx_n = 1;
      __pyx_t_8.token_len = __pyx_v_token_len;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token, 2, &__pyx_t_8); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3331, __pyx_L1_error)
      __pyx_v_self->_res->minute = __pyx_t_1;

      /* "cytimes/parser.py":3332
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
 *                 self._res.minute = utils.parse_isominute(token, 2, token_len)
 *                 self._res.second = utils.parse_isosecond(token, 4, token_len)             # <<<<<<<<<<<<<<
 *                 # . [fff]
 *                 if token_len > 7:
*/
      __pyx_t_11.__pyx_n = 1;
      __pyx_t_11.token_len = __pyx_v_token_len;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isosecond(__pyx_v_token, 4, &__pyx_t_11); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3332, __pyx_L1_error)
      __pyx_v_self->_res->second = __pyx_t_1;

      /* "cytimes/parser.py":3334
 *                 self._res.second = utils.parse_isosecond(token, 4, token_len)
 *                 # . [fff]
 *                 if token_len > 7:             # <<<<<<<<<<<<<<
 *                     self._res.microsecond = utils.parse_isofraction(token, 7, token_len)
 *                 return True  # exit
*/
      __pyx_t_3 = (__pyx_v_token_len > 7);
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3335
 *                 # . [fff]
 *                 if token_len > 7:
 *                     self._res.microsecond = utils.parse_isofraction(token, 7, token_len)             # <<<<<<<<<<<<<<
 *                 return True  # exit
 * 
*/
        __pyx_t_16.__pyx_n = 1;
        __pyx_t_16.token_len = __pyx_v_token_len;
        __pyx_t_1 = __pyx_f_7cytimes_5utils_parse_isofraction(__pyx_v_token, 7, &__pyx_t_16); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3335, __pyx_L1_error)
        __pyx_v_self->_res->microsecond = __pyx_t_1;

        /* "cytimes/parser.py":3334
 *                 self._res.second = utils.parse_isosecond(token, 4, token_len)
 *                 # . [fff]
 *                 if token_len > 7:             # <<<<<<<<<<<<<<
 *                     self._res.microsecond = utils.parse_isofraction(token, 7, token_len)
 *                 return True  # exit
*/
      }

      /* "cytimes/parser.py":3336
 *                 if token_len > 7:
 *                     self._res.microsecond = utils.parse_isofraction(token, 7, token_len)
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *         # Integer or Decimal - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3328
 *         else:
 *             # . HHMMSS.[fff]
 *             if token_len > 6 and utils.is_dot(str_read(token, 6)):             # <<<<<<<<<<<<<<
 *                 # . [HHMMSS]
 *                 self._res.hour = utils.parse_isohour(token, 0, token_len)
*/
    }
  }
  __pyx_L4:;

  /* "cytimes/parser.py":3340
 *         # Integer or Decimal - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *         # Next token exists
 *         if self._has_token(1):             # <<<<<<<<<<<<<<
 *             token1: str = self._get_token1()
 *             # . HMS with trailing H/M/S flag: [12]h
*/
  __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 1);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3341
 *         # Next token exists
 *         if self._has_token(1):
 *             token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *             # . HMS with trailing H/M/S flag: [12]h
 *             flag: cython.int = self._cfg.get_hms(token1)
*/
    __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3341, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_XDECREF_SET(__pyx_v_token1, ((PyObject*)__pyx_t_6));
    __pyx_t_6 = 0;

    /* "cytimes/parser.py":3343
 *             token1: str = self._get_token1()
 *             # . HMS with trailing H/M/S flag: [12]h
 *             flag: cython.int = self._cfg.get_hms(token1)             # <<<<<<<<<<<<<<
 *             if flag != -1:
 *                 # There is a H/M/S flag (e.g: 'h', 'm', 's') trailing the token.
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_hms(__pyx_v_self->_cfg, __pyx_v_token1, 0); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3343, __pyx_L1_error)
    __pyx_v_flag = __pyx_t_1;

    /* "cytimes/parser.py":3344
 *             # . HMS with trailing H/M/S flag: [12]h
 *             flag: cython.int = self._cfg.get_hms(token1)
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is a H/M/S flag (e.g: 'h', 'm', 's') trailing the token.
 *                 # We assign the current token to the indicated H/M/S field.
*/
    __pyx_t_3 = (__pyx_v_flag != -1L);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3347
 *                 # There is a H/M/S flag (e.g: 'h', 'm', 's') trailing the token.
 *                 # We assign the current token to the indicated H/M/S field.
 *                 if self._set_hms_by_token(flag, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._pos += 1  # skip token(1)
 *                     return True
*/
      __pyx_t_17.__pyx_n = 3;
      __pyx_t_17.token = __pyx_v_token;
      __pyx_t_17.token_len = __pyx_v_token_len;
      __pyx_t_17.token_kind = __pyx_v_token_kind;
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_hms_by_token(__pyx_v_self, __pyx_v_flag, &__pyx_t_17); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3347, __pyx_L1_error)
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3348
 *                 # We assign the current token to the indicated H/M/S field.
 *                 if self._set_hms_by_token(flag, token, token_len, token_kind):
 *                     self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *                     return True
 * 
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

        /* "cytimes/parser.py":3349
 *                 if self._set_hms_by_token(flag, token, token_len, token_kind):
 *                     self._pos += 1  # skip token(1)
 *                     return True             # <<<<<<<<<<<<<<
 * 
 *             # . HMS with trailing AM/PM flag: [12]am
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3347
 *                 # There is a H/M/S flag (e.g: 'h', 'm', 's') trailing the token.
 *                 # We assign the current token to the indicated H/M/S field.
 *                 if self._set_hms_by_token(flag, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._pos += 1  # skip token(1)
 *                     return True
*/
      }

      /* "cytimes/parser.py":3344
 *             # . HMS with trailing H/M/S flag: [12]h
 *             flag: cython.int = self._cfg.get_hms(token1)
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is a H/M/S flag (e.g: 'h', 'm', 's') trailing the token.
 *                 # We assign the current token to the indicated H/M/S field.
*/
    }

    /* "cytimes/parser.py":3352
 * 
 *             # . HMS with trailing AM/PM flag: [12]am
 *             flag: cython.int = self._cfg.get_ampm(token1)             # <<<<<<<<<<<<<<
 *             if flag != -1:
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') trailing the token.
*/
    __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_ampm(__pyx_v_self->_cfg, __pyx_v_token1, 0); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3352, __pyx_L1_error)
    __pyx_v_flag = __pyx_t_1;

    /* "cytimes/parser.py":3353
 *             # . HMS with trailing AM/PM flag: [12]am
 *             flag: cython.int = self._cfg.get_ampm(token1)
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') trailing the token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
*/
    __pyx_t_3 = (__pyx_v_flag != -1L);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3356
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') trailing the token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 1  # skip token(1)
*/
      __pyx_t_12.__pyx_n = 3;
      __pyx_t_12.token = __pyx_v_token;
      __pyx_t_12.token_len = __pyx_v_token_len;
      __pyx_t_12.token_kind = __pyx_v_token_kind;
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(__pyx_v_self, &__pyx_t_12); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3356, __pyx_L1_error)
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3357
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)             # <<<<<<<<<<<<<<
 *                     self._pos += 1  # skip token(1)
 *                     return True  # exit
*/
        __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(__pyx_v_self, __pyx_v_self->_res->hour, __pyx_v_flag); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3357, __pyx_L1_error)
        __pyx_v_self->_res->hour = __pyx_t_1;

        /* "cytimes/parser.py":3358
 *                 if self._set_hour_by_token(token, token_len, token_kind):
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *                     return True  # exit
 * 
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

        /* "cytimes/parser.py":3359
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 1  # skip token(1)
 *                     return True  # exit             # <<<<<<<<<<<<<<
 * 
 *         # . HMS with preceding H/M/S flag: h[04]
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3356
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') trailing the token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 1  # skip token(1)
*/
      }

      /* "cytimes/parser.py":3353
 *             # . HMS with trailing AM/PM flag: [12]am
 *             flag: cython.int = self._cfg.get_ampm(token1)
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') trailing the token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
*/
    }

    /* "cytimes/parser.py":3340
 *         # Integer or Decimal - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *         # Next token exists
 *         if self._has_token(1):             # <<<<<<<<<<<<<<
 *             token1: str = self._get_token1()
 *             # . HMS with trailing H/M/S flag: [12]h
*/
  }

  /* "cytimes/parser.py":3362
 * 
 *         # . HMS with preceding H/M/S flag: h[04]
 *         if self._has_token(-1):             # <<<<<<<<<<<<<<
 *             flag: cython.int = self._cfg.get_hms(self._get_token(-1))
 *             if flag in (0, 1):  # 'h' or 'm'
*/
  __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, -1L);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3363
 *         # . HMS with preceding H/M/S flag: h[04]
 *         if self._has_token(-1):
 *             flag: cython.int = self._cfg.get_hms(self._get_token(-1))             # <<<<<<<<<<<<<<
 *             if flag in (0, 1):  # 'h' or 'm'
 *                 # There is a H/M/S flag (e.g: 'h', 'm') preceding the token.
*/
    __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, -1L); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_hms(__pyx_v_self->_cfg, ((PyObject*)__pyx_t_6), 0); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3363, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_flag = __pyx_t_1;

    /* "cytimes/parser.py":3364
 *         if self._has_token(-1):
 *             flag: cython.int = self._cfg.get_hms(self._get_token(-1))
 *             if flag in (0, 1):  # 'h' or 'm'             # <<<<<<<<<<<<<<
 *                 # There is a H/M/S flag (e.g: 'h', 'm') preceding the token.
 *                 # Since the forward case was not hit, there is no flag trailing
*/
    switch (__pyx_v_flag) {
      case 0:
      case 1:

      /* "cytimes/parser.py":3369
 *                 # this token. We assign a lower resolution flag to the current
 *                 # token, if the flag is not second: (h -> m) or (m -> s).
 *                 if self._set_hms_by_token(flag + 1, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     return True
 * 
*/
      __pyx_t_17.__pyx_n = 3;
      __pyx_t_17.token = __pyx_v_token;
      __pyx_t_17.token_len = __pyx_v_token_len;
      __pyx_t_17.token_kind = __pyx_v_token_kind;
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_hms_by_token(__pyx_v_self, (__pyx_v_flag + 1), &__pyx_t_17); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3369, __pyx_L1_error)
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3370
 *                 # token, if the flag is not second: (h -> m) or (m -> s).
 *                 if self._set_hms_by_token(flag + 1, token, token_len, token_kind):
 *                     return True             # <<<<<<<<<<<<<<
 * 
 *         # "hour AM" or YY|MM|DD (ambiguous)
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3369
 *                 # this token. We assign a lower resolution flag to the current
 *                 # token, if the flag is not second: (h -> m) or (m -> s).
 *                 if self._set_hms_by_token(flag + 1, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     return True
 * 
*/
      }

      /* "cytimes/parser.py":3364
 *         if self._has_token(-1):
 *             flag: cython.int = self._cfg.get_hms(self._get_token(-1))
 *             if flag in (0, 1):  # 'h' or 'm'             # <<<<<<<<<<<<<<
 *                 # There is a H/M/S flag (e.g: 'h', 'm') preceding the token.
 *                 # Since the forward case was not hit, there is no flag trailing
*/
      break;
      default: break;
    }

    /* "cytimes/parser.py":3362
 * 
 *         # . HMS with preceding H/M/S flag: h[04]
 *         if self._has_token(-1):             # <<<<<<<<<<<<<<
 *             flag: cython.int = self._cfg.get_hms(self._get_token(-1))
 *             if flag in (0, 1):  # 'h' or 'm'
*/
  }

  /* "cytimes/parser.py":3373
 * 
 *         # "hour AM" or YY|MM|DD (ambiguous)
 *         if not self._has_token(1) or self._cfg.is_jump(self._get_token1()):             # <<<<<<<<<<<<<<
 *             flag: cython.int = self._cfg.get_ampm(self._get_token(2))
 *             # . [12] AM
*/
  __pyx_t_5 = (!__pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 1));
  if (!__pyx_t_5) {
  } else {
    __pyx_t_3 = __pyx_t_5;
    goto __pyx_L45_bool_binop_done;
  }
  __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3373, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->is_jump(__pyx_v_self->_cfg, ((PyObject*)__pyx_t_6), 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3373, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __pyx_t_5;
  __pyx_L45_bool_binop_done:;
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3374
 *         # "hour AM" or YY|MM|DD (ambiguous)
 *         if not self._has_token(1) or self._cfg.is_jump(self._get_token1()):
 *             flag: cython.int = self._cfg.get_ampm(self._get_token(2))             # <<<<<<<<<<<<<<
 *             # . [12] AM
 *             if flag != -1:
*/
    __pyx_t_6 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3374, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_ampm(__pyx_v_self->_cfg, ((PyObject*)__pyx_t_6), 0); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3374, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_flag = __pyx_t_1;

    /* "cytimes/parser.py":3376
 *             flag: cython.int = self._cfg.get_ampm(self._get_token(2))
 *             # . [12] AM
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') after a jump token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
*/
    __pyx_t_3 = (__pyx_v_flag != -1L);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3379
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') after a jump token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 2  # skip token(1..2)
*/
      __pyx_t_12.__pyx_n = 3;
      __pyx_t_12.token = __pyx_v_token;
      __pyx_t_12.token_len = __pyx_v_token_len;
      __pyx_t_12.token_kind = __pyx_v_token_kind;
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(__pyx_v_self, &__pyx_t_12); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3379, __pyx_L1_error)
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3380
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)             # <<<<<<<<<<<<<<
 *                     self._pos += 2  # skip token(1..2)
 *                     return True  # exit
*/
        __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(__pyx_v_self, __pyx_v_self->_res->hour, __pyx_v_flag); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3380, __pyx_L1_error)
        __pyx_v_self->_res->hour = __pyx_t_1;

        /* "cytimes/parser.py":3381
 *                 if self._set_hour_by_token(token, token_len, token_kind):
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 2  # skip token(1..2)             # <<<<<<<<<<<<<<
 *                     return True  # exit
 *             # . YY|MM|DD (ambiguous)
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

        /* "cytimes/parser.py":3382
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 2  # skip token(1..2)
 *                     return True  # exit             # <<<<<<<<<<<<<<
 *             # . YY|MM|DD (ambiguous)
 *             elif self._set_ymd_by_token(0, token, token_len, token_kind):
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3379
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') after a jump token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
 *                 if self._set_hour_by_token(token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                     self._res.hour = self._adjust_hour_by_ampm(self._res.hour, flag)
 *                     self._pos += 2  # skip token(1..2)
*/
      }

      /* "cytimes/parser.py":3376
 *             flag: cython.int = self._cfg.get_ampm(self._get_token(2))
 *             # . [12] AM
 *             if flag != -1:             # <<<<<<<<<<<<<<
 *                 # There is an AM/PM flag (e.g: 'am', 'pm') after a jump token.
 *                 # We assign the current token to hour and adjust by AM/PM flag.
*/
      goto __pyx_L47;
    }

    /* "cytimes/parser.py":3384
 *                     return True  # exit
 *             # . YY|MM|DD (ambiguous)
 *             elif self._set_ymd_by_token(0, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                 self._pos += 1  # skip token(1)
 *                 return True  # exit
*/
    __pyx_t_15.__pyx_n = 3;
    __pyx_t_15.token = __pyx_v_token;
    __pyx_t_15.token_len = __pyx_v_token_len;
    __pyx_t_15.token_kind = __pyx_v_token_kind;
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_15); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3384, __pyx_L1_error)
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3385
 *             # . YY|MM|DD (ambiguous)
 *             elif self._set_ymd_by_token(0, token, token_len, token_kind):
 *                 self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *                 return True  # exit
 * 
*/
      __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

      /* "cytimes/parser.py":3386
 *             elif self._set_ymd_by_token(0, token, token_len, token_kind):
 *                 self._pos += 1  # skip token(1)
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *         # Integer: last resort
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3384
 *                     return True  # exit
 *             # . YY|MM|DD (ambiguous)
 *             elif self._set_ymd_by_token(0, token, token_len, token_kind):             # <<<<<<<<<<<<<<
 *                 self._pos += 1  # skip token(1)
 *                 return True  # exit
*/
    }
    __pyx_L47:;

    /* "cytimes/parser.py":3373
 * 
 *         # "hour AM" or YY|MM|DD (ambiguous)
 *         if not self._has_token(1) or self._cfg.is_jump(self._get_token1()):             # <<<<<<<<<<<<<<
 *             flag: cython.int = self._cfg.get_ampm(self._get_token(2))
 *             # . [12] AM
*/
  }

  /* "cytimes/parser.py":3389
 * 
 *         # Integer: last resort
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             # Could be day / day-of-year
 *             if token_len <= 3:
*/
  __pyx_t_3 = (__pyx_v_token_kind == 1);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3391
 *         if token_kind == 1:
 *             # Could be day / day-of-year
 *             if token_len <= 3:             # <<<<<<<<<<<<<<
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):
*/
    __pyx_t_3 = (__pyx_v_token_len <= 3);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3392
 *             # Could be day / day-of-year
 *             if token_len <= 3:
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):
 *                     self._res.set_ymd_int(0, value)
*/
      __pyx_t_10.__pyx_n = 1;
      __pyx_t_10.token_len = __pyx_v_token_len;
      __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3392, __pyx_L1_error)
      __pyx_v_value = __pyx_t_9;

      /* "cytimes/parser.py":3393
 *             if token_len <= 3:
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):             # <<<<<<<<<<<<<<
 *                     self._res.set_ymd_int(0, value)
 *                     return True  # exit
*/
      __pyx_t_5 = __pyx_f_7cytimes_6parser_6Result_could_be_day(__pyx_v_self->_res, __pyx_v_value);
      if (!__pyx_t_5) {
      } else {
        __pyx_t_3 = __pyx_t_5;
        goto __pyx_L52_bool_binop_done;
      }
      __pyx_t_5 = __pyx_f_7cytimes_6parser_6Result_could_be_doy(__pyx_v_self->_res, __pyx_v_value);
      __pyx_t_3 = __pyx_t_5;
      __pyx_L52_bool_binop_done:;
      if (__pyx_t_3) {

        /* "cytimes/parser.py":3394
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):
 *                     self._res.set_ymd_int(0, value)             # <<<<<<<<<<<<<<
 *                     return True  # exit
 * 
*/
        __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 0, __pyx_v_value); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3394, __pyx_L1_error)

        /* "cytimes/parser.py":3395
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):
 *                     self._res.set_ymd_int(0, value)
 *                     return True  # exit             # <<<<<<<<<<<<<<
 * 
 *             # Could be year
*/
        __pyx_r = 1;
        goto __pyx_L0;

        /* "cytimes/parser.py":3393
 *             if token_len <= 3:
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):             # <<<<<<<<<<<<<<
 *                     self._res.set_ymd_int(0, value)
 *                     return True  # exit
*/
      }

      /* "cytimes/parser.py":3391
 *         if token_kind == 1:
 *             # Could be day / day-of-year
 *             if token_len <= 3:             # <<<<<<<<<<<<<<
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 if self._res.could_be_day(value) or self._res.could_be_doy(value):
*/
    }

    /* "cytimes/parser.py":3398
 * 
 *             # Could be year
 *             if token_len == 4 and not self._res.is_year_set():             # <<<<<<<<<<<<<<
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 self._res.set_ymd_int(1, value)
*/
    __pyx_t_5 = (__pyx_v_token_len == 4);
    if (__pyx_t_5) {
    } else {
      __pyx_t_3 = __pyx_t_5;
      goto __pyx_L55_bool_binop_done;
    }
    __pyx_t_5 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self->_res));
    __pyx_t_3 = __pyx_t_5;
    __pyx_L55_bool_binop_done:;
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3399
 *             # Could be year
 *             if token_len == 4 and not self._res.is_year_set():
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *                 self._res.set_ymd_int(1, value)
 *                 return True  # exit
*/
      __pyx_t_10.__pyx_n = 1;
      __pyx_t_10.token_len = __pyx_v_token_len;
      __pyx_t_9 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_10); if (unlikely(__pyx_t_9 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3399, __pyx_L1_error)
      __pyx_v_value = __pyx_t_9;

      /* "cytimes/parser.py":3400
 *             if token_len == 4 and not self._res.is_year_set():
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 self._res.set_ymd_int(1, value)             # <<<<<<<<<<<<<<
 *                 return True  # exit
 * 
*/
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 1, __pyx_v_value); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3400, __pyx_L1_error)

      /* "cytimes/parser.py":3401
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 self._res.set_ymd_int(1, value)
 *                 return True  # exit             # <<<<<<<<<<<<<<
 * 
 *         # We reach the end and the numeric token is not processed.
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3398
 * 
 *             # Could be year
 *             if token_len == 4 and not self._res.is_year_set():             # <<<<<<<<<<<<<<
 *                 value: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *                 self._res.set_ymd_int(1, value)
*/
    }

    /* "cytimes/parser.py":3389
 * 
 *         # Integer: last resort
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             # Could be day / day-of-year
 *             if token_len <= 3:
*/
  }

  /* "cytimes/parser.py":3406
 *         # But since the other handlers do not accept any numeric
 *         # tokens, we just return True to skip this token.
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3167
 * 
 *     # . parser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_numeric", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3408
 *         return True
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_month(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  int __pyx_v_mm;
  PyObject *__pyx_v_token2 = 0;
  PyObject *__pyx_v_token1 = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_token_month", 0);

  /* "cytimes/parser.py":3427
 *         """
 *         # Month already set
 *         if self._res.is_month_set():             # <<<<<<<<<<<<<<
 *             return False  # exit: skip
 * 
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_month_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3428
 *         # Month already set
 *         if self._res.is_month_set():
 *             return False  # exit: skip             # <<<<<<<<<<<<<<
 * 
 *         # Validate month token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3427
 *         """
 *         # Month already set
 *         if self._res.is_month_set():             # <<<<<<<<<<<<<<
 *             return False  # exit: skip
 * 
*/
  }

  /* "cytimes/parser.py":3431
 * 
 *         # Validate month token
 *         mm: cython.int = self._cfg.get_month(token)             # <<<<<<<<<<<<<<
 *         if mm == -1:
 *             return False  # exit: not month token
*/
  __pyx_t_2 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_month(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((int)-2))) __PYX_ERR(0, 3431, __pyx_L1_error)
  __pyx_v_mm = __pyx_t_2;

  /* "cytimes/parser.py":3432
 *         # Validate month token
 *         mm: cython.int = self._cfg.get_month(token)
 *         if mm == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not month token
 *         if not self._res.set_ymd_int(2, mm):
*/
  __pyx_t_1 = (__pyx_v_mm == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3433
 *         mm: cython.int = self._cfg.get_month(token)
 *         if mm == -1:
 *             return False  # exit: not month token             # <<<<<<<<<<<<<<
 *         if not self._res.set_ymd_int(2, mm):
 *             #: This token is a month token. Since the `Configs`
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3432
 *         # Validate month token
 *         mm: cython.int = self._cfg.get_month(token)
 *         if mm == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not month token
 *         if not self._res.set_ymd_int(2, mm):
*/
  }

  /* "cytimes/parser.py":3434
 *         if mm == -1:
 *             return False  # exit: not month token
 *         if not self._res.set_ymd_int(2, mm):             # <<<<<<<<<<<<<<
 *             #: This token is a month token. Since the `Configs`
 *             #: guards against conflicting keywords in other
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 2, __pyx_v_mm); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3434, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_1);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3438
 *             #: guards against conflicting keywords in other
 *             #: namespaces, it cannot be `weekday` or `hms`, etc.
 *             return True  # exit: skip token             # <<<<<<<<<<<<<<
 * 
 *         # Not enough tokens for year & day
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3434
 *         if mm == -1:
 *             return False  # exit: not month token
 *         if not self._res.set_ymd_int(2, mm):             # <<<<<<<<<<<<<<
 *             #: This token is a month token. Since the `Configs`
 *             #: guards against conflicting keywords in other
*/
  }

  /* "cytimes/parser.py":3441
 * 
 *         # Not enough tokens for year & day
 *         token2: str = self._get_token(2)             # <<<<<<<<<<<<<<
 *         if token2 is None:
 *             return True  # exit: MM
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_token2 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "cytimes/parser.py":3442
 *         # Not enough tokens for year & day
 *         token2: str = self._get_token(2)
 *         if token2 is None:             # <<<<<<<<<<<<<<
 *             return True  # exit: MM
 * 
*/
  __pyx_t_3 = (__pyx_v_token2 == ((PyObject*)Py_None));
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3443
 *         token2: str = self._get_token(2)
 *         if token2 is None:
 *             return True  # exit: MM             # <<<<<<<<<<<<<<
 * 
 *         # Jan[-]01: token(1) is date separator
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3442
 *         # Not enough tokens for year & day
 *         token2: str = self._get_token(2)
 *         if token2 is None:             # <<<<<<<<<<<<<<
 *             return True  # exit: MM
 * 
*/
  }

  /* "cytimes/parser.py":3446
 * 
 *         # Jan[-]01: token(1) is date separator
 *         token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *         if utils.is_str_date_sep(token1):
 *             # try set 2nd Y/M/D: token(2)
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_token1 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "cytimes/parser.py":3447
 *         # Jan[-]01: token(1) is date separator
 *         token1: str = self._get_token1()
 *         if utils.is_str_date_sep(token1):             # <<<<<<<<<<<<<<
 *             # try set 2nd Y/M/D: token(2)
 *             if not self._set_ymd_by_token(0, token2):
*/
  __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_date_sep(__pyx_v_token1, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3447, __pyx_L1_error)
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3449
 *         if utils.is_str_date_sep(token1):
 *             # try set 2nd Y/M/D: token(2)
 *             if not self._set_ymd_by_token(0, token2):             # <<<<<<<<<<<<<<
 *                 # token(2) is not Y/M/D
 *                 return True  # exit: MM
*/
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.token = __pyx_v_token2;
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_5); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3449, __pyx_L1_error)
    __pyx_t_1 = (!__pyx_t_3);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":3451
 *             if not self._set_ymd_by_token(0, token2):
 *                 # token(2) is not Y/M/D
 *                 return True  # exit: MM             # <<<<<<<<<<<<<<
 * 
 *             # token(2) is Y/M/D / token(4) could be Y/M/D
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3449
 *         if utils.is_str_date_sep(token1):
 *             # try set 2nd Y/M/D: token(2)
 *             if not self._set_ymd_by_token(0, token2):             # <<<<<<<<<<<<<<
 *                 # token(2) is not Y/M/D
 *                 return True  # exit: MM
*/
    }

    /* "cytimes/parser.py":3456
 *             if not (
 *                 # token(3) must be date separator
 *                 utils.is_str_date_sep(self._get_token(3))             # <<<<<<<<<<<<<<
 *                 # try set 3rd Y/M/D: token(4)
 *                 and self._set_ymd_by_token(0, self._get_token(4))
*/
    __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3456, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_date_sep(((PyObject*)__pyx_t_4), NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3456, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_3) {
    } else {
      __pyx_t_1 = __pyx_t_3;
      goto __pyx_L10_bool_binop_done;
    }

    /* "cytimes/parser.py":3458
 *                 utils.is_str_date_sep(self._get_token(3))
 *                 # try set 3rd Y/M/D: token(4)
 *                 and self._set_ymd_by_token(0, self._get_token(4))             # <<<<<<<<<<<<<<
 *             ):
 *                 # token(4) is not Y/M/D
*/
    __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.token = ((PyObject*)__pyx_t_4);
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 0, &__pyx_t_5); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3458, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_1 = __pyx_t_3;
    __pyx_L10_bool_binop_done:;

    /* "cytimes/parser.py":3454
 * 
 *             # token(2) is Y/M/D / token(4) could be Y/M/D
 *             if not (             # <<<<<<<<<<<<<<
 *                 # token(3) must be date separator
 *                 utils.is_str_date_sep(self._get_token(3))
*/
    __pyx_t_3 = (!__pyx_t_1);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":3461
 *             ):
 *                 # token(4) is not Y/M/D
 *                 self._pos += 2  # skip token(1..2)             # <<<<<<<<<<<<<<
 *                 return True  # exit: MM-DD / MM-YYYY
 * 
*/
      __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

      /* "cytimes/parser.py":3462
 *                 # token(4) is not Y/M/D
 *                 self._pos += 2  # skip token(1..2)
 *                 return True  # exit: MM-DD / MM-YYYY             # <<<<<<<<<<<<<<
 * 
 *             # all Y/M/D are set successfully
*/
      __pyx_r = 1;
      goto __pyx_L0;

      /* "cytimes/parser.py":3454
 * 
 *             # token(2) is Y/M/D / token(4) could be Y/M/D
 *             if not (             # <<<<<<<<<<<<<<
 *                 # token(3) must be date separator
 *                 utils.is_str_date_sep(self._get_token(3))
*/
    }

    /* "cytimes/parser.py":3465
 * 
 *             # all Y/M/D are set successfully
 *             self._pos += 4  # skip token(1..4)             # <<<<<<<<<<<<<<
 *             return True  # exit: MM-DD-YYYY
 * 
*/
    __pyx_v_self->_pos = (__pyx_v_self->_pos + 4);

    /* "cytimes/parser.py":3466
 *             # all Y/M/D are set successfully
 *             self._pos += 4  # skip token(1..4)
 *             return True  # exit: MM-DD-YYYY             # <<<<<<<<<<<<<<
 * 
 *         # Jan[, ]2000
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3447
 *         # Jan[-]01: token(1) is date separator
 *         token1: str = self._get_token1()
 *         if utils.is_str_date_sep(token1):             # <<<<<<<<<<<<<<
 *             # try set 2nd Y/M/D: token(2)
 *             if not self._set_ymd_by_token(0, token2):
*/
  }

  /* "cytimes/parser.py":3471
 *         if (
 *             # token(1) is comma
 *             utils.is_str_comma(token1)             # <<<<<<<<<<<<<<
 *             # token(2) is space
 *             and utils.is_str_ascii_ctl_or_space(token2)
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_comma(__pyx_v_token1, NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3471, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L13_bool_binop_done;
  }

  /* "cytimes/parser.py":3473
 *             utils.is_str_comma(token1)
 *             # token(2) is space
 *             and utils.is_str_ascii_ctl_or_space(token2)             # <<<<<<<<<<<<<<
 *             # try set year: token(3)
 *             and self._set_ymd_by_token(1, self._get_token(3))
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(__pyx_v_token2, NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3473, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L13_bool_binop_done;
  }

  /* "cytimes/parser.py":3475
 *             and utils.is_str_ascii_ctl_or_space(token2)
 *             # try set year: token(3)
 *             and self._set_ymd_by_token(1, self._get_token(3))             # <<<<<<<<<<<<<<
 *         ):
 *             # token(3) is year
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3475, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.token = ((PyObject*)__pyx_t_4);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 1, &__pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3475, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __pyx_t_1;
  __pyx_L13_bool_binop_done:;

  /* "cytimes/parser.py":3469
 * 
 *         # Jan[, ]2000
 *         if (             # <<<<<<<<<<<<<<
 *             # token(1) is comma
 *             utils.is_str_comma(token1)
*/
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3478
 *         ):
 *             # token(3) is year
 *             self._pos += 3  # skip token(1..3)             # <<<<<<<<<<<<<<
 *             return True  # exit: MM, YYYY
 * 
*/
    __pyx_v_self->_pos = (__pyx_v_self->_pos + 3);

    /* "cytimes/parser.py":3479
 *             # token(3) is year
 *             self._pos += 3  # skip token(1..3)
 *             return True  # exit: MM, YYYY             # <<<<<<<<<<<<<<
 * 
 *         # Jan[ of ]2000
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3469
 * 
 *         # Jan[, ]2000
 *         if (             # <<<<<<<<<<<<<<
 *             # token(1) is comma
 *             utils.is_str_comma(token1)
*/
  }

  /* "cytimes/parser.py":3484
 *         if (
 *             # token(1) is space
 *             utils.is_str_ascii_ctl_or_space(token1)             # <<<<<<<<<<<<<<
 *             # token(3) is space
 *             and utils.is_str_ascii_ctl_or_space(self._get_token(3))
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(__pyx_v_token1, NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3484, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L17_bool_binop_done;
  }

  /* "cytimes/parser.py":3486
 *             utils.is_str_ascii_ctl_or_space(token1)
 *             # token(3) is space
 *             and utils.is_str_ascii_ctl_or_space(self._get_token(3))             # <<<<<<<<<<<<<<
 *             # token(2) is pertain
 *             and self._cfg.is_pertain(token2)
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_ctl_or_space(((PyObject*)__pyx_t_4), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3486, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L17_bool_binop_done;
  }

  /* "cytimes/parser.py":3488
 *             and utils.is_str_ascii_ctl_or_space(self._get_token(3))
 *             # token(2) is pertain
 *             and self._cfg.is_pertain(token2)             # <<<<<<<<<<<<<<
 *             # try set year: token(4)
 *             and self._set_ymd_by_token(1, self._get_token(4))
*/
  __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->is_pertain(__pyx_v_self->_cfg, __pyx_v_token2, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3488, __pyx_L1_error)
  if (__pyx_t_1) {
  } else {
    __pyx_t_3 = __pyx_t_1;
    goto __pyx_L17_bool_binop_done;
  }

  /* "cytimes/parser.py":3490
 *             and self._cfg.is_pertain(token2)
 *             # try set year: token(4)
 *             and self._set_ymd_by_token(1, self._get_token(4))             # <<<<<<<<<<<<<<
 *         ):
 *             # token(4) is year
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5.__pyx_n = 1;
  __pyx_t_5.token = ((PyObject*)__pyx_t_4);
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(__pyx_v_self, 1, &__pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3490, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __pyx_t_1;
  __pyx_L17_bool_binop_done:;

  /* "cytimes/parser.py":3482
 * 
 *         # Jan[ of ]2000
 *         if (             # <<<<<<<<<<<<<<
 *             # token(1) is space
 *             utils.is_str_ascii_ctl_or_space(token1)
*/
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3493
 *         ):
 *             # token(4) is year
 *             self._pos += 4  # skip token(1..4)             # <<<<<<<<<<<<<<
 *             return True  # exit: MM of YYYY
 * 
*/
    __pyx_v_self->_pos = (__pyx_v_self->_pos + 4);

    /* "cytimes/parser.py":3494
 *             # token(4) is year
 *             self._pos += 4  # skip token(1..4)
 *             return True  # exit: MM of YYYY             # <<<<<<<<<<<<<<
 * 
 *         # End of process
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3482
 * 
 *         # Jan[ of ]2000
 *         if (             # <<<<<<<<<<<<<<
 *             # token(1) is space
 *             utils.is_str_ascii_ctl_or_space(token1)
*/
  }

  /* "cytimes/parser.py":3497
 * 
 *         # End of process
 *         return True  # exit: MM             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3408
 *         return True
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token2);
  __Pyx_XDECREF(__pyx_v_token1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3499
 *         return True  # exit: MM
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_iso_week(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  PyObject *__pyx_v_token1 = 0;
  Py_ssize_t __pyx_v_token1_len;
  int __pyx_v_week;
  int __pyx_v_wkd;
  PyObject *__pyx_v_token3 = 0;
  int __pyx_v_num;
  int __pyx_v_year;
  __pyx_t_7cytimes_5utils_ymd __pyx_v__ymd;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoweek __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_parse_isoweekday __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_iso_week", 0);

  /* "cytimes/parser.py":3528
 *         if (
 *             # year not set
 *             not self._res.is_year_set()             # <<<<<<<<<<<<<<
 *             # month is set
 *             or self._res.is_month_set()
*/
  __pyx_t_2 = (!__pyx_f_7cytimes_6parser_6Result_is_year_set(__pyx_v_self->_res));
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }

  /* "cytimes/parser.py":3530
 *             not self._res.is_year_set()
 *             # month is set
 *             or self._res.is_month_set()             # <<<<<<<<<<<<<<
 *             # day is set
 *             or self._res.is_day_set()
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_month_set(__pyx_v_self->_res);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }

  /* "cytimes/parser.py":3532
 *             or self._res.is_month_set()
 *             # day is set
 *             or self._res.is_day_set()             # <<<<<<<<<<<<<<
 *             # token(0) is not 'W' or 'w'
 *             or not utils.is_str_isoweek_sep(token)
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_day_set(__pyx_v_self->_res);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }

  /* "cytimes/parser.py":3534
 *             or self._res.is_day_set()
 *             # token(0) is not 'W' or 'w'
 *             or not utils.is_str_isoweek_sep(token)             # <<<<<<<<<<<<<<
 *         ):
 *             return False  # exit: not matched
*/
  __pyx_t_2 = __pyx_f_7cytimes_5utils_is_str_isoweek_sep(__pyx_v_token, NULL); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3534, __pyx_L1_error)
  __pyx_t_3 = (!__pyx_t_2);
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;

  /* "cytimes/parser.py":3526
 *         """
 *         # Validate iso week
 *         if (             # <<<<<<<<<<<<<<
 *             # year not set
 *             not self._res.is_year_set()
*/
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3536
 *             or not utils.is_str_isoweek_sep(token)
 *         ):
 *             return False  # exit: not matched             # <<<<<<<<<<<<<<
 * 
 *         # W[52]: token(1) must be week number
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3526
 *         """
 *         # Validate iso week
 *         if (             # <<<<<<<<<<<<<<
 *             # year not set
 *             not self._res.is_year_set()
*/
  }

  /* "cytimes/parser.py":3539
 * 
 *         # W[52]: token(1) must be week number
 *         token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *         if token1 is None:
 *             return False  # exit: invalid
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3539, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_token1 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "cytimes/parser.py":3540
 *         # W[52]: token(1) must be week number
 *         token1: str = self._get_token1()
 *         if token1 is None:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         token1_len: cython.Py_ssize_t = str_len(token1)
*/
  __pyx_t_1 = (__pyx_v_token1 == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3541
 *         token1: str = self._get_token1()
 *         if token1 is None:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         if token1_len != 2:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3540
 *         # W[52]: token(1) must be week number
 *         token1: str = self._get_token1()
 *         if token1 is None:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         token1_len: cython.Py_ssize_t = str_len(token1)
*/
  }

  /* "cytimes/parser.py":3542
 *         if token1 is None:
 *             return False  # exit: invalid
 *         token1_len: cython.Py_ssize_t = str_len(token1)             # <<<<<<<<<<<<<<
 *         if token1_len != 2:
 *             return False  # exit: invalid
*/
  __pyx_v_token1_len = PyUnicode_GET_LENGTH(__pyx_v_token1);

  /* "cytimes/parser.py":3543
 *             return False  # exit: invalid
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         if token1_len != 2:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
*/
  __pyx_t_1 = (__pyx_v_token1_len != 2);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3544
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         if token1_len != 2:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
 *         if week == -1:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3543
 *             return False  # exit: invalid
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         if token1_len != 2:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
*/
  }

  /* "cytimes/parser.py":3545
 *         if token1_len != 2:
 *             return False  # exit: invalid
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)             # <<<<<<<<<<<<<<
 *         if week == -1:
 *             return False  # exit: invalid
*/
  __pyx_t_6.__pyx_n = 1;
  __pyx_t_6.token_len = 2;
  __pyx_t_5 = __pyx_f_7cytimes_5utils_parse_isoweek(__pyx_v_token1, 0, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-2))) __PYX_ERR(0, 3545, __pyx_L1_error)
  __pyx_v_week = __pyx_t_5;

  /* "cytimes/parser.py":3546
 *             return False  # exit: invalid
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
 *         if week == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_week == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3547
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
 *         if week == -1:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # W52[-7]: token(3) could be weekday
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3546
 *             return False  # exit: invalid
 *         week: cython.int = utils.parse_isoweek(token1, 0, 2)
 *         if week == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":3550
 * 
 *         # W52[-7]: token(3) could be weekday
 *         wkd: cython.int = 1             # <<<<<<<<<<<<<<
 *         token3: str = self._get_token(3)
 *         if (
*/
  __pyx_v_wkd = 1;

  /* "cytimes/parser.py":3551
 *         # W52[-7]: token(3) could be weekday
 *         wkd: cython.int = 1
 *         token3: str = self._get_token(3)             # <<<<<<<<<<<<<<
 *         if (
 *             # has token(3)
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3551, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_token3 = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "cytimes/parser.py":3554
 *         if (
 *             # has token(3)
 *             token3 is not None             # <<<<<<<<<<<<<<
 *             # token(3) must be single digit
 *             and str_len(token3) == 1
*/
  __pyx_t_3 = (__pyx_v_token3 != ((PyObject*)Py_None));
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L12_bool_binop_done;
  }

  /* "cytimes/parser.py":3556
 *             token3 is not None
 *             # token(3) must be single digit
 *             and str_len(token3) == 1             # <<<<<<<<<<<<<<
 *             # token(2) must be date separator
 *             and utils.is_str_date_sep(self._get_token(2))
*/
  __pyx_t_3 = (PyUnicode_GET_LENGTH(__pyx_v_token3) == 1);
  if (__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L12_bool_binop_done;
  }

  /* "cytimes/parser.py":3558
 *             and str_len(token3) == 1
 *             # token(2) must be date separator
 *             and utils.is_str_date_sep(self._get_token(2))             # <<<<<<<<<<<<<<
 *         ):
 *             num: cython.int = utils.parse_isoweekday(token3, 0, 1)
*/
  __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __pyx_f_7cytimes_5utils_is_str_date_sep(((PyObject*)__pyx_t_4), NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3558, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L12_bool_binop_done:;

  /* "cytimes/parser.py":3552
 *         wkd: cython.int = 1
 *         token3: str = self._get_token(3)
 *         if (             # <<<<<<<<<<<<<<
 *             # has token(3)
 *             token3 is not None
*/
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3560
 *             and utils.is_str_date_sep(self._get_token(2))
 *         ):
 *             num: cython.int = utils.parse_isoweekday(token3, 0, 1)             # <<<<<<<<<<<<<<
 *             if num != -1:
 *                 wkd = num  # Www-D
*/
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.token_len = 1;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_parse_isoweekday(__pyx_v_token3, 0, &__pyx_t_7); if (unlikely(__pyx_t_5 == ((int)-2))) __PYX_ERR(0, 3560, __pyx_L1_error)
    __pyx_v_num = __pyx_t_5;

    /* "cytimes/parser.py":3561
 *         ):
 *             num: cython.int = utils.parse_isoweekday(token3, 0, 1)
 *             if num != -1:             # <<<<<<<<<<<<<<
 *                 wkd = num  # Www-D
 *                 self._pos += 2  # skip token(2..3)
*/
    __pyx_t_1 = (__pyx_v_num != -1L);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":3562
 *             num: cython.int = utils.parse_isoweekday(token3, 0, 1)
 *             if num != -1:
 *                 wkd = num  # Www-D             # <<<<<<<<<<<<<<
 *                 self._pos += 2  # skip token(2..3)
 *         # else: Www-1; defaults to 1 (Monday)
*/
      __pyx_v_wkd = __pyx_v_num;

      /* "cytimes/parser.py":3563
 *             if num != -1:
 *                 wkd = num  # Www-D
 *                 self._pos += 2  # skip token(2..3)             # <<<<<<<<<<<<<<
 *         # else: Www-1; defaults to 1 (Monday)
 * 
*/
      __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

      /* "cytimes/parser.py":3561
 *         ):
 *             num: cython.int = utils.parse_isoweekday(token3, 0, 1)
 *             if num != -1:             # <<<<<<<<<<<<<<
 *                 wkd = num  # Www-D
 *                 self._pos += 2  # skip token(2..3)
*/
    }

    /* "cytimes/parser.py":3552
 *         wkd: cython.int = 1
 *         token3: str = self._get_token(3)
 *         if (             # <<<<<<<<<<<<<<
 *             # has token(3)
 *             token3 is not None
*/
  }

  /* "cytimes/parser.py":3567
 * 
 *         # Set date by ISO week date
 *         year: cython.int = self._res._ymd[self._res._yidx]             # <<<<<<<<<<<<<<
 *         _ymd = utils.ymd_fr_iso(year, week, wkd)
 *         self._res.set_ymd_int(2, _ymd.month)
*/
  __pyx_v_year = (__pyx_v_self->_res->_ymd[__pyx_v_self->_res->_yidx]);

  /* "cytimes/parser.py":3568
 *         # Set date by ISO week date
 *         year: cython.int = self._res._ymd[self._res._yidx]
 *         _ymd = utils.ymd_fr_iso(year, week, wkd)             # <<<<<<<<<<<<<<
 *         self._res.set_ymd_int(2, _ymd.month)
 *         self._res.set_ymd_int(3, _ymd.day)
*/
  __pyx_v__ymd = __pyx_f_7cytimes_5utils_ymd_fr_iso(__pyx_v_year, __pyx_v_week, __pyx_v_wkd);

  /* "cytimes/parser.py":3569
 *         year: cython.int = self._res._ymd[self._res._yidx]
 *         _ymd = utils.ymd_fr_iso(year, week, wkd)
 *         self._res.set_ymd_int(2, _ymd.month)             # <<<<<<<<<<<<<<
 *         self._res.set_ymd_int(3, _ymd.day)
 *         self._pos += 1  # skip token(1)
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 2, __pyx_v__ymd.month); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3569, __pyx_L1_error)

  /* "cytimes/parser.py":3570
 *         _ymd = utils.ymd_fr_iso(year, week, wkd)
 *         self._res.set_ymd_int(2, _ymd.month)
 *         self._res.set_ymd_int(3, _ymd.day)             # <<<<<<<<<<<<<<
 *         self._pos += 1  # skip token(1)
 *         return True  # exit: Www[-D]
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 3, __pyx_v__ymd.day); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3570, __pyx_L1_error)

  /* "cytimes/parser.py":3571
 *         self._res.set_ymd_int(2, _ymd.month)
 *         self._res.set_ymd_int(3, _ymd.day)
 *         self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *         return True  # exit: Www[-D]
 * 
*/
  __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

  /* "cytimes/parser.py":3572
 *         self._res.set_ymd_int(3, _ymd.day)
 *         self._pos += 1  # skip token(1)
 *         return True  # exit: Www[-D]             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3499
 *         return True  # exit: MM
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_iso_week", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token1);
  __Pyx_XDECREF(__pyx_v_token3);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3574
 *         return True  # exit: Www[-D]
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_weekday(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  int __pyx_v_wkd;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":3591
 *         """
 *         # Weekday already set
 *         if self._res.is_weekday_set():             # <<<<<<<<<<<<<<
 *             return False  # exit: skip
 * 
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_weekday_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3592
 *         # Weekday already set
 *         if self._res.is_weekday_set():
 *             return False  # exit: skip             # <<<<<<<<<<<<<<
 * 
 *         # Validate weekday token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3591
 *         """
 *         # Weekday already set
 *         if self._res.is_weekday_set():             # <<<<<<<<<<<<<<
 *             return False  # exit: skip
 * 
*/
  }

  /* "cytimes/parser.py":3595
 * 
 *         # Validate weekday token
 *         wkd: cython.int = self._cfg.get_weekday(token)             # <<<<<<<<<<<<<<
 *         if wkd == -1:
 *             return False  # exit: not weekday token
*/
  __pyx_t_2 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_weekday(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((int)-2))) __PYX_ERR(0, 3595, __pyx_L1_error)
  __pyx_v_wkd = __pyx_t_2;

  /* "cytimes/parser.py":3596
 *         # Validate weekday token
 *         wkd: cython.int = self._cfg.get_weekday(token)
 *         if wkd == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not weekday token
 * 
*/
  __pyx_t_1 = (__pyx_v_wkd == -1L);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3597
 *         wkd: cython.int = self._cfg.get_weekday(token)
 *         if wkd == -1:
 *             return False  # exit: not weekday token             # <<<<<<<<<<<<<<
 * 
 *         # Set weekday
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3596
 *         # Validate weekday token
 *         wkd: cython.int = self._cfg.get_weekday(token)
 *         if wkd == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not weekday token
 * 
*/
  }

  /* "cytimes/parser.py":3600
 * 
 *         # Set weekday
 *         self._res.weekday = wkd             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __pyx_v_self->_res->weekday = __pyx_v_wkd;

  /* "cytimes/parser.py":3601
 *         # Set weekday
 *         self._res.weekday = wkd
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3574
 *         return True  # exit: Www[-D]
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":3603
 *         return True
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_ampm(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  int __pyx_v_hour;
  int __pyx_v_flag;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* "cytimes/parser.py":3621
 *         """
 *         # AM/PM flag already set
 *         if self._res.is_ampm_set():             # <<<<<<<<<<<<<<
 *             return False  # exit
 * 
*/
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_ampm_set(__pyx_v_self->_res);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3622
 *         # AM/PM flag already set
 *         if self._res.is_ampm_set():
 *             return False  # exit             # <<<<<<<<<<<<<<
 * 
 *         # Missing hour / Not a 12 hour clock
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3621
 *         """
 *         # AM/PM flag already set
 *         if self._res.is_ampm_set():             # <<<<<<<<<<<<<<
 *             return False  # exit
 * 
*/
  }

  /* "cytimes/parser.py":3625
 * 
 *         # Missing hour / Not a 12 hour clock
 *         hour: cython.int = self._res.hour             # <<<<<<<<<<<<<<
 *         if not 0 <= hour <= 12:
 *             return False  # exit
*/
  __pyx_t_2 = __pyx_v_self->_res->hour;
  __pyx_v_hour = __pyx_t_2;

  /* "cytimes/parser.py":3626
 *         # Missing hour / Not a 12 hour clock
 *         hour: cython.int = self._res.hour
 *         if not 0 <= hour <= 12:             # <<<<<<<<<<<<<<
 *             return False  # exit
 * 
*/
  __pyx_t_1 = (0 <= __pyx_v_hour);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_hour <= 12);
  }
  __pyx_t_3 = (!__pyx_t_1);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3627
 *         hour: cython.int = self._res.hour
 *         if not 0 <= hour <= 12:
 *             return False  # exit             # <<<<<<<<<<<<<<
 * 
 *         # Validate AM/PM flag token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3626
 *         # Missing hour / Not a 12 hour clock
 *         hour: cython.int = self._res.hour
 *         if not 0 <= hour <= 12:             # <<<<<<<<<<<<<<
 *             return False  # exit
 * 
*/
  }

  /* "cytimes/parser.py":3630
 * 
 *         # Validate AM/PM flag token
 *         flag: cython.int = self._cfg.get_ampm(token)             # <<<<<<<<<<<<<<
 *         if flag == -1:
 *             return False  # exit: not AM/PM flag token
*/
  __pyx_t_2 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_ampm(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((int)-2))) __PYX_ERR(0, 3630, __pyx_L1_error)
  __pyx_v_flag = __pyx_t_2;

  /* "cytimes/parser.py":3631
 *         # Validate AM/PM flag token
 *         flag: cython.int = self._cfg.get_ampm(token)
 *         if flag == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not AM/PM flag token
 *         self._res.ampm = flag
*/
  __pyx_t_3 = (__pyx_v_flag == -1L);
  if (__pyx_t_3) {

    /* "cytimes/parser.py":3632
 *         flag: cython.int = self._cfg.get_ampm(token)
 *         if flag == -1:
 *             return False  # exit: not AM/PM flag token             # <<<<<<<<<<<<<<
 *         self._res.ampm = flag
 * 
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3631
 *         # Validate AM/PM flag token
 *         flag: cython.int = self._cfg.get_ampm(token)
 *         if flag == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: not AM/PM flag token
 *         self._res.ampm = flag
*/
  }

  /* "cytimes/parser.py":3633
 *         if flag == -1:
 *             return False  # exit: not AM/PM flag token
 *         self._res.ampm = flag             # <<<<<<<<<<<<<<
 * 
 *         # Adjust hour according to AM/PM flag
*/
  __pyx_v_self->_res->ampm = __pyx_v_flag;

  /* "cytimes/parser.py":3636
 * 
 *         # Adjust hour according to AM/PM flag
 *         self._res.hour = self._adjust_hour_by_ampm(hour, flag)             # <<<<<<<<<<<<<<
 *         return True  # exit
 * 
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(__pyx_v_self, __pyx_v_hour, __pyx_v_flag); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3636, __pyx_L1_error)
  __pyx_v_self->_res->hour = __pyx_t_2;

  /* "cytimes/parser.py":3637
 *         # Adjust hour according to AM/PM flag
 *         self._res.hour = self._adjust_hour_by_ampm(hour, flag)
 *         return True  # exit             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3603
 *         return True
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_ampm", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":3639
 *         return True  # exit
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzname(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  int __pyx_v_is_utc;
  int __pyx_v_offset;
  PyObject *__pyx_v_token1 = 0;
  PyObject *__pyx_v_token2 = 0;
  Py_ssize_t __pyx_v_token2_len;
  Py_UCS4 __pyx_v_ch;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_token_tzname", 0);

  /* "cytimes/parser.py":3671
 *         if (
 *             # ignore timezone
 *             self._ignoretz             # <<<<<<<<<<<<<<
 *             # tzoffset already set
 *             or self._res.is_tzoffset_set()
*/
  if (!__pyx_v_self->_ignoretz) {
  } else {
    __pyx_t_1 = __pyx_v_self->_ignoretz;
    goto __pyx_L4_bool_binop_done;
  }

  /* "cytimes/parser.py":3673
 *             self._ignoretz
 *             # tzoffset already set
 *             or self._res.is_tzoffset_set()             # <<<<<<<<<<<<<<
 *         ):
 *             return False  # exit: no need
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(__pyx_v_self->_res);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;

  /* "cytimes/parser.py":3669
 *         """
 *         # Check if need to parse timezone name
 *         if (             # <<<<<<<<<<<<<<
 *             # ignore timezone
 *             self._ignoretz
*/
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3675
 *             or self._res.is_tzoffset_set()
 *         ):
 *             return False  # exit: no need             # <<<<<<<<<<<<<<
 * 
 *         # Validate timezone token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3669
 *         """
 *         # Check if need to parse timezone name
 *         if (             # <<<<<<<<<<<<<<
 *             # ignore timezone
 *             self._ignoretz
*/
  }

  /* "cytimes/parser.py":3679
 *         # Validate timezone token
 *         # . utc timezone alias
 *         is_utc: cython.bint = self._cfg.is_utc(token)             # <<<<<<<<<<<<<<
 *         if is_utc:
 *             self._res.tzoffset = 0
*/
  __pyx_t_1 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->is_utc(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3679, __pyx_L1_error)
  __pyx_v_is_utc = __pyx_t_1;

  /* "cytimes/parser.py":3680
 *         # . utc timezone alias
 *         is_utc: cython.bint = self._cfg.is_utc(token)
 *         if is_utc:             # <<<<<<<<<<<<<<
 *             self._res.tzoffset = 0
 *         # . timezone name must be ASCCI alpha
*/
  if (__pyx_v_is_utc) {

    /* "cytimes/parser.py":3681
 *         is_utc: cython.bint = self._cfg.is_utc(token)
 *         if is_utc:
 *             self._res.tzoffset = 0             # <<<<<<<<<<<<<<
 *         # . timezone name must be ASCCI alpha
 *         elif not utils.is_str_ascii_letters(token):
*/
    __pyx_v_self->_res->tzoffset = 0;

    /* "cytimes/parser.py":3680
 *         # . utc timezone alias
 *         is_utc: cython.bint = self._cfg.is_utc(token)
 *         if is_utc:             # <<<<<<<<<<<<<<
 *             self._res.tzoffset = 0
 *         # . timezone name must be ASCCI alpha
*/
    goto __pyx_L6;
  }

  /* "cytimes/parser.py":3683
 *             self._res.tzoffset = 0
 *         # . timezone name must be ASCCI alpha
 *         elif not utils.is_str_ascii_letters(token):             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         # . offset from timezone mapping
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_letters(__pyx_v_token, NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3683, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3684
 *         # . timezone name must be ASCCI alpha
 *         elif not utils.is_str_ascii_letters(token):
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         # . offset from timezone mapping
 *         else:
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3683
 *             self._res.tzoffset = 0
 *         # . timezone name must be ASCCI alpha
 *         elif not utils.is_str_ascii_letters(token):             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         # . offset from timezone mapping
*/
  }

  /* "cytimes/parser.py":3687
 *         # . offset from timezone mapping
 *         else:
 *             offset: cython.int = self._cfg.get_tz_offset(token)             # <<<<<<<<<<<<<<
 *             if offset == utils.NULL_TZOFFSET:
 *                 return False  # exit: not timezone name
*/
  /*else*/ {
    __pyx_t_3 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_tz_offset(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_3 == ((int)-200000))) __PYX_ERR(0, 3687, __pyx_L1_error)
    __pyx_v_offset = __pyx_t_3;

    /* "cytimes/parser.py":3688
 *         else:
 *             offset: cython.int = self._cfg.get_tz_offset(token)
 *             if offset == utils.NULL_TZOFFSET:             # <<<<<<<<<<<<<<
 *                 return False  # exit: not timezone name
 *             self._res.tzoffset = offset
*/
    __pyx_t_2 = (__pyx_v_offset == __pyx_v_7cytimes_5utils_NULL_TZOFFSET);
    if (__pyx_t_2) {

      /* "cytimes/parser.py":3689
 *             offset: cython.int = self._cfg.get_tz_offset(token)
 *             if offset == utils.NULL_TZOFFSET:
 *                 return False  # exit: not timezone name             # <<<<<<<<<<<<<<
 *             self._res.tzoffset = offset
 * 
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":3688
 *         else:
 *             offset: cython.int = self._cfg.get_tz_offset(token)
 *             if offset == utils.NULL_TZOFFSET:             # <<<<<<<<<<<<<<
 *                 return False  # exit: not timezone name
 *             self._res.tzoffset = offset
*/
    }

    /* "cytimes/parser.py":3690
 *             if offset == utils.NULL_TZOFFSET:
 *                 return False  # exit: not timezone name
 *             self._res.tzoffset = offset             # <<<<<<<<<<<<<<
 * 
 *         #: For UTC/GMT/Z followed by a numeric offset (e.g., 'UTC + 3' or 'GMT - 0230'):
*/
    __pyx_v_self->_res->tzoffset = __pyx_v_offset;
  }
  __pyx_L6:;

  /* "cytimes/parser.py":3695
 *         #: POSIX semantics say my time X is UTC, so flip the following sign token
 *         #: to make the numeric tzoffset parser compute the correct absolute offset.
 *         if is_utc and self._has_token(2):  # token(2) must exists             # <<<<<<<<<<<<<<
 *             token1: str = self._get_token1()
 *             token2: str = self._get_token(2)
*/
  if (__pyx_v_is_utc) {
  } else {
    __pyx_t_2 = __pyx_v_is_utc;
    goto __pyx_L9_bool_binop_done;
  }
  __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 2);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L9_bool_binop_done:;
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3696
 *         #: to make the numeric tzoffset parser compute the correct absolute offset.
 *         if is_utc and self._has_token(2):  # token(2) must exists
 *             token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *             token2: str = self._get_token(2)
 *             token2_len: cython.Py_ssize_t = str_len(token2)
*/
    __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3696, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_token1 = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "cytimes/parser.py":3697
 *         if is_utc and self._has_token(2):  # token(2) must exists
 *             token1: str = self._get_token1()
 *             token2: str = self._get_token(2)             # <<<<<<<<<<<<<<
 *             token2_len: cython.Py_ssize_t = str_len(token2)
 *             if (
*/
    __pyx_t_4 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3697, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_v_token2 = ((PyObject*)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "cytimes/parser.py":3698
 *             token1: str = self._get_token1()
 *             token2: str = self._get_token(2)
 *             token2_len: cython.Py_ssize_t = str_len(token2)             # <<<<<<<<<<<<<<
 *             if (
 *                 # . token(2) must be 1, 2 or 4 digits
*/
    __pyx_v_token2_len = PyUnicode_GET_LENGTH(__pyx_v_token2);

    /* "cytimes/parser.py":3701
 *             if (
 *                 # . token(2) must be 1, 2 or 4 digits
 *                 token2_len in (1, 2, 4)             # <<<<<<<<<<<<<<
 *                 and utils.is_str_ascii_digits(token2, token2_len)
 *                 # . token(1) must be a single char
*/
    switch (__pyx_v_token2_len) {
      case 1:
      case 2:
      case 4:
      __pyx_t_1 = 1;
      break;
      default:
      __pyx_t_1 = 0;
      break;
    }
    __pyx_t_5 = __pyx_t_1;
    if (__pyx_t_5) {
    } else {
      __pyx_t_2 = __pyx_t_5;
      goto __pyx_L12_bool_binop_done;
    }

    /* "cytimes/parser.py":3702
 *                 # . token(2) must be 1, 2 or 4 digits
 *                 token2_len in (1, 2, 4)
 *                 and utils.is_str_ascii_digits(token2, token2_len)             # <<<<<<<<<<<<<<
 *                 # . token(1) must be a single char
 *                 and str_len(token1) == 1
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.token_len = __pyx_v_token2_len;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_is_str_ascii_digits(__pyx_v_token2, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3702, __pyx_L1_error)
    if (__pyx_t_5) {
    } else {
      __pyx_t_2 = __pyx_t_5;
      goto __pyx_L12_bool_binop_done;
    }

    /* "cytimes/parser.py":3704
 *                 and utils.is_str_ascii_digits(token2, token2_len)
 *                 # . token(1) must be a single char
 *                 and str_len(token1) == 1             # <<<<<<<<<<<<<<
 *             ):
 *                 ch: cython.Py_UCS4 = str_read(token1, 0)
*/
    __pyx_t_5 = (PyUnicode_GET_LENGTH(__pyx_v_token1) == 1);
    __pyx_t_2 = __pyx_t_5;
    __pyx_L12_bool_binop_done:;

    /* "cytimes/parser.py":3699
 *             token2: str = self._get_token(2)
 *             token2_len: cython.Py_ssize_t = str_len(token2)
 *             if (             # <<<<<<<<<<<<<<
 *                 # . token(2) must be 1, 2 or 4 digits
 *                 token2_len in (1, 2, 4)
*/
    if (__pyx_t_2) {

      /* "cytimes/parser.py":3706
 *                 and str_len(token1) == 1
 *             ):
 *                 ch: cython.Py_UCS4 = str_read(token1, 0)             # <<<<<<<<<<<<<<
 *                 if utils.is_plus_sign(ch):
 *                     #: we advance position to token(1) and reset
*/
      __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_token1, 0);

      /* "cytimes/parser.py":3707
 *             ):
 *                 ch: cython.Py_UCS4 = str_read(token1, 0)
 *                 if utils.is_plus_sign(ch):             # <<<<<<<<<<<<<<
 *                     #: we advance position to token(1) and reset
 *                     #: peeks before calling tzoffset parser, then
*/
      __pyx_t_2 = __pyx_f_7cytimes_5utils_is_plus_sign(__pyx_v_ch);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":3711
 *                     #: peeks before calling tzoffset parser, then
 *                     #: flip token(1) from '+' to '-'
 *                     self._pos += 1             # <<<<<<<<<<<<<<
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("-")  # True
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

        /* "cytimes/parser.py":3712
 *                     #: flip token(1) from '+' to '-'
 *                     self._pos += 1
 *                     self._reset_token_peeks()             # <<<<<<<<<<<<<<
 *                     return self._parse_token_tzoffset("-")  # True
 *                 if utils.is_minus_sign(ch):
*/
        (void)(__pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(__pyx_v_self));

        /* "cytimes/parser.py":3713
 *                     self._pos += 1
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("-")  # True             # <<<<<<<<<<<<<<
 *                 if utils.is_minus_sign(ch):
 *                     #: we advance position to token(1) and reset
*/
        __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(__pyx_v_self, __pyx_mstate_global->__pyx_kp_u__4); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3713, __pyx_L1_error)
        __pyx_r = __pyx_t_2;
        goto __pyx_L0;

        /* "cytimes/parser.py":3707
 *             ):
 *                 ch: cython.Py_UCS4 = str_read(token1, 0)
 *                 if utils.is_plus_sign(ch):             # <<<<<<<<<<<<<<
 *                     #: we advance position to token(1) and reset
 *                     #: peeks before calling tzoffset parser, then
*/
      }

      /* "cytimes/parser.py":3714
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("-")  # True
 *                 if utils.is_minus_sign(ch):             # <<<<<<<<<<<<<<
 *                     #: we advance position to token(1) and reset
 *                     #: peeks before calling tzoffset parser, then
*/
      __pyx_t_2 = __pyx_f_7cytimes_5utils_is_minus_sign(__pyx_v_ch);
      if (__pyx_t_2) {

        /* "cytimes/parser.py":3718
 *                     #: peeks before calling tzoffset parser, then
 *                     #: flip token(1) from '-' to '+'.
 *                     self._pos += 1             # <<<<<<<<<<<<<<
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("+")  # True
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

        /* "cytimes/parser.py":3719
 *                     #: flip token(1) from '-' to '+'.
 *                     self._pos += 1
 *                     self._reset_token_peeks()             # <<<<<<<<<<<<<<
 *                     return self._parse_token_tzoffset("+")  # True
 * 
*/
        (void)(__pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(__pyx_v_self));

        /* "cytimes/parser.py":3720
 *                     self._pos += 1
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("+")  # True             # <<<<<<<<<<<<<<
 * 
 *         #: For non-UTC names (e.g., 'CET + 02:00'): do not flip  numeric offset
*/
        __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(__pyx_v_self, __pyx_mstate_global->__pyx_kp_u__20); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3720, __pyx_L1_error)
        __pyx_r = __pyx_t_2;
        goto __pyx_L0;

        /* "cytimes/parser.py":3714
 *                     self._reset_token_peeks()
 *                     return self._parse_token_tzoffset("-")  # True
 *                 if utils.is_minus_sign(ch):             # <<<<<<<<<<<<<<
 *                     #: we advance position to token(1) and reset
 *                     #: peeks before calling tzoffset parser, then
*/
      }

      /* "cytimes/parser.py":3699
 *             token2: str = self._get_token(2)
 *             token2_len: cython.Py_ssize_t = str_len(token2)
 *             if (             # <<<<<<<<<<<<<<
 *                 # . token(2) must be 1, 2 or 4 digits
 *                 token2_len in (1, 2, 4)
*/
    }

    /* "cytimes/parser.py":3695
 *         #: POSIX semantics say my time X is UTC, so flip the following sign token
 *         #: to make the numeric tzoffset parser compute the correct absolute offset.
 *         if is_utc and self._has_token(2):  # token(2) must exists             # <<<<<<<<<<<<<<
 *             token1: str = self._get_token1()
 *             token2: str = self._get_token(2)
*/
  }

  /* "cytimes/parser.py":3724
 *         #: For non-UTC names (e.g., 'CET + 02:00'): do not flip  numeric offset
 *         #: will be added to the base zone offset (additive semantics).
 *         self._res.tzoffset_finalized = False             # <<<<<<<<<<<<<<
 *         return True  # exit: success
 * 
*/
  __pyx_v_self->_res->tzoffset_finalized = 0;

  /* "cytimes/parser.py":3725
 *         #: will be added to the base zone offset (additive semantics).
 *         self._res.tzoffset_finalized = False
 *         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3639
 *         return True  # exit
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_tzname", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token1);
  __Pyx_XDECREF(__pyx_v_token2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3727
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v_token) {
  Py_UCS4 __pyx_v_ch;
  int __pyx_v_sign;
  PyObject *__pyx_v_token1 = 0;
  Py_ssize_t __pyx_v_token1_len;
  int __pyx_v_hh;
  int __pyx_v_mi;
  PyObject *__pyx_v_token3 = 0;
  Py_ssize_t __pyx_v_token3_len;
  int __pyx_v_offset;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_is_str_ascii_digits __pyx_t_4;
  int __pyx_t_5;
  struct __pyx_opt_args_7cytimes_5utils_parse_isohour __pyx_t_6;
  struct __pyx_opt_args_7cytimes_5utils_parse_isominute __pyx_t_7;
  unsigned PY_LONG_LONG __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  size_t __pyx_t_13;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("_parse_token_tzoffset", 0);

  /* "cytimes/parser.py":3757
 * 
 *         # Check if need to parse timezone offset
 *         if self._res.is_tzoffset_set() and self._res.tzoffset_finalized:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  __pyx_t_2 = __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(__pyx_v_self->_res);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_1 = __pyx_v_self->_res->tzoffset_finalized;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3758
 *         # Check if need to parse timezone offset
 *         if self._res.is_tzoffset_set() and self._res.tzoffset_finalized:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         #: Cannot bypass the following process even if 'ignoretz=True'
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3757
 * 
 *         # Check if need to parse timezone offset
 *         if self._res.is_tzoffset_set() and self._res.tzoffset_finalized:             # <<<<<<<<<<<<<<
 *             return False
 * 
*/
  }

  /* "cytimes/parser.py":3765
 * 
 *         # token(0): must be a single '+' or '-'
 *         if str_len(token) != 1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         ch: cython.Py_UCS4 = str_read(token, 0)
*/
  __pyx_t_1 = (PyUnicode_GET_LENGTH(__pyx_v_token) != 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3766
 *         # token(0): must be a single '+' or '-'
 *         if str_len(token) != 1:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         ch: cython.Py_UCS4 = str_read(token, 0)
 *         if utils.is_plus_sign(ch):
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3765
 * 
 *         # token(0): must be a single '+' or '-'
 *         if str_len(token) != 1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         ch: cython.Py_UCS4 = str_read(token, 0)
*/
  }

  /* "cytimes/parser.py":3767
 *         if str_len(token) != 1:
 *             return False  # exit: invalid
 *         ch: cython.Py_UCS4 = str_read(token, 0)             # <<<<<<<<<<<<<<
 *         if utils.is_plus_sign(ch):
 *             sign: cython.int = 1
*/
  __pyx_v_ch = PyUnicode_READ_CHAR(__pyx_v_token, 0);

  /* "cytimes/parser.py":3768
 *             return False  # exit: invalid
 *         ch: cython.Py_UCS4 = str_read(token, 0)
 *         if utils.is_plus_sign(ch):             # <<<<<<<<<<<<<<
 *             sign: cython.int = 1
 *         elif utils.is_minus_sign(ch):
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_plus_sign(__pyx_v_ch);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3769
 *         ch: cython.Py_UCS4 = str_read(token, 0)
 *         if utils.is_plus_sign(ch):
 *             sign: cython.int = 1             # <<<<<<<<<<<<<<
 *         elif utils.is_minus_sign(ch):
 *             sign: cython.int = -1
*/
    __pyx_v_sign = 1;

    /* "cytimes/parser.py":3768
 *             return False  # exit: invalid
 *         ch: cython.Py_UCS4 = str_read(token, 0)
 *         if utils.is_plus_sign(ch):             # <<<<<<<<<<<<<<
 *             sign: cython.int = 1
 *         elif utils.is_minus_sign(ch):
*/
    goto __pyx_L7;
  }

  /* "cytimes/parser.py":3770
 *         if utils.is_plus_sign(ch):
 *             sign: cython.int = 1
 *         elif utils.is_minus_sign(ch):             # <<<<<<<<<<<<<<
 *             sign: cython.int = -1
 *         else:
*/
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_minus_sign(__pyx_v_ch);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3771
 *             sign: cython.int = 1
 *         elif utils.is_minus_sign(ch):
 *             sign: cython.int = -1             # <<<<<<<<<<<<<<
 *         else:
 *             return False  # exit: invalid
*/
    __pyx_v_sign = -1;

    /* "cytimes/parser.py":3770
 *         if utils.is_plus_sign(ch):
 *             sign: cython.int = 1
 *         elif utils.is_minus_sign(ch):             # <<<<<<<<<<<<<<
 *             sign: cython.int = -1
 *         else:
*/
    goto __pyx_L7;
  }

  /* "cytimes/parser.py":3773
 *             sign: cython.int = -1
 *         else:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # token(1): +[HH] / +[HHMM]
*/
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L7:;

  /* "cytimes/parser.py":3776
 * 
 *         # token(1): +[HH] / +[HHMM]
 *         token1: str = self._get_token1()             # <<<<<<<<<<<<<<
 *         if token1 is None:
 *             return False  # exit: not exists
*/
  __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__get_token1(__pyx_v_self); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3776, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_token1 = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "cytimes/parser.py":3777
 *         # token(1): +[HH] / +[HHMM]
 *         token1: str = self._get_token1()
 *         if token1 is None:             # <<<<<<<<<<<<<<
 *             return False  # exit: not exists
 *         token1_len: cython.Py_ssize_t = str_len(token1)
*/
  __pyx_t_1 = (__pyx_v_token1 == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3778
 *         token1: str = self._get_token1()
 *         if token1 is None:
 *             return False  # exit: not exists             # <<<<<<<<<<<<<<
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         # token(1) must all digits
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3777
 *         # token(1): +[HH] / +[HHMM]
 *         token1: str = self._get_token1()
 *         if token1 is None:             # <<<<<<<<<<<<<<
 *             return False  # exit: not exists
 *         token1_len: cython.Py_ssize_t = str_len(token1)
*/
  }

  /* "cytimes/parser.py":3779
 *         if token1 is None:
 *             return False  # exit: not exists
 *         token1_len: cython.Py_ssize_t = str_len(token1)             # <<<<<<<<<<<<<<
 *         # token(1) must all digits
 *         if not utils.is_str_ascii_digits(token1, token1_len):
*/
  __pyx_v_token1_len = PyUnicode_GET_LENGTH(__pyx_v_token1);

  /* "cytimes/parser.py":3781
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         # token(1) must all digits
 *         if not utils.is_str_ascii_digits(token1, token1_len):             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_4.__pyx_n = 1;
  __pyx_t_4.token_len = __pyx_v_token1_len;
  __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_digits(__pyx_v_token1, &__pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3781, __pyx_L1_error)
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3782
 *         # token(1) must all digits
 *         if not utils.is_str_ascii_digits(token1, token1_len):
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Case: +[HHMM] (exactly 4 digits)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3781
 *         token1_len: cython.Py_ssize_t = str_len(token1)
 *         # token(1) must all digits
 *         if not utils.is_str_ascii_digits(token1, token1_len):             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":3785
 * 
 *         # Case: +[HHMM] (exactly 4 digits)
 *         if token1_len == 4:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.parse_isohour(token1, 0, token1_len)
 *             mi: cython.int = utils.parse_isominute(token1, 2, token1_len)
*/
  __pyx_t_2 = (__pyx_v_token1_len == 4);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3786
 *         # Case: +[HHMM] (exactly 4 digits)
 *         if token1_len == 4:
 *             hh: cython.int = utils.parse_isohour(token1, 0, token1_len)             # <<<<<<<<<<<<<<
 *             mi: cython.int = utils.parse_isominute(token1, 2, token1_len)
 *             self._pos += 1  # skip token(1)
*/
    __pyx_t_6.__pyx_n = 1;
    __pyx_t_6.token_len = __pyx_v_token1_len;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_parse_isohour(__pyx_v_token1, 0, &__pyx_t_6); if (unlikely(__pyx_t_5 == ((int)-2))) __PYX_ERR(0, 3786, __pyx_L1_error)
    __pyx_v_hh = __pyx_t_5;

    /* "cytimes/parser.py":3787
 *         if token1_len == 4:
 *             hh: cython.int = utils.parse_isohour(token1, 0, token1_len)
 *             mi: cython.int = utils.parse_isominute(token1, 2, token1_len)             # <<<<<<<<<<<<<<
 *             self._pos += 1  # skip token(1)
 *         # Case: +[HH[:MM]] ((12 digit hour, optional ':' + MM)
*/
    __pyx_t_7.__pyx_n = 1;
    __pyx_t_7.token_len = __pyx_v_token1_len;
    __pyx_t_5 = __pyx_f_7cytimes_5utils_parse_isominute(__pyx_v_token1, 2, &__pyx_t_7); if (unlikely(__pyx_t_5 == ((int)-2))) __PYX_ERR(0, 3787, __pyx_L1_error)
    __pyx_v_mi = __pyx_t_5;

    /* "cytimes/parser.py":3788
 *             hh: cython.int = utils.parse_isohour(token1, 0, token1_len)
 *             mi: cython.int = utils.parse_isominute(token1, 2, token1_len)
 *             self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *         # Case: +[HH[:MM]] ((12 digit hour, optional ':' + MM)
 *         elif 1 <= token1_len <= 2:
*/
    __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

    /* "cytimes/parser.py":3785
 * 
 *         # Case: +[HHMM] (exactly 4 digits)
 *         if token1_len == 4:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.parse_isohour(token1, 0, token1_len)
 *             mi: cython.int = utils.parse_isominute(token1, 2, token1_len)
*/
    goto __pyx_L10;
  }

  /* "cytimes/parser.py":3790
 *             self._pos += 1  # skip token(1)
 *         # Case: +[HH[:MM]] ((12 digit hour, optional ':' + MM)
 *         elif 1 <= token1_len <= 2:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.slice_to_uint(token1, 0, token1_len, token1_len)
 *             mi: cython.int = 0
*/
  __pyx_t_2 = (1 <= __pyx_v_token1_len);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_v_token1_len <= 2);
  }
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3791
 *         # Case: +[HH[:MM]] ((12 digit hour, optional ':' + MM)
 *         elif 1 <= token1_len <= 2:
 *             hh: cython.int = utils.slice_to_uint(token1, 0, token1_len, token1_len)             # <<<<<<<<<<<<<<
 *             mi: cython.int = 0
 *             # +HH[:MM]
*/
    __pyx_t_9.__pyx_n = 1;
    __pyx_t_9.token_len = __pyx_v_token1_len;
    __pyx_t_8 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token1, 0, __pyx_v_token1_len, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3791, __pyx_L1_error)
    __pyx_v_hh = __pyx_t_8;

    /* "cytimes/parser.py":3792
 *         elif 1 <= token1_len <= 2:
 *             hh: cython.int = utils.slice_to_uint(token1, 0, token1_len, token1_len)
 *             mi: cython.int = 0             # <<<<<<<<<<<<<<
 *             # +HH[:MM]
 *             if self._has_token(3) and utils.is_str_time_sep(self._get_token(2)):
*/
    __pyx_v_mi = 0;

    /* "cytimes/parser.py":3794
 *             mi: cython.int = 0
 *             # +HH[:MM]
 *             if self._has_token(3) and utils.is_str_time_sep(self._get_token(2)):             # <<<<<<<<<<<<<<
 *                 token3: str = self._get_token(3)
 *                 token3_len: cython.Py_ssize_t = str_len(token3)
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__has_token(__pyx_v_self, 3);
    if (__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L12_bool_binop_done;
    }
    __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_time_sep(((PyObject*)__pyx_t_3), NULL); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3794, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L12_bool_binop_done:;
    if (__pyx_t_2) {

      /* "cytimes/parser.py":3795
 *             # +HH[:MM]
 *             if self._has_token(3) and utils.is_str_time_sep(self._get_token(2)):
 *                 token3: str = self._get_token(3)             # <<<<<<<<<<<<<<
 *                 token3_len: cython.Py_ssize_t = str_len(token3)
 *                 if (
*/
      __pyx_t_3 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3795, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_v_token3 = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;

      /* "cytimes/parser.py":3796
 *             if self._has_token(3) and utils.is_str_time_sep(self._get_token(2)):
 *                 token3: str = self._get_token(3)
 *                 token3_len: cython.Py_ssize_t = str_len(token3)             # <<<<<<<<<<<<<<
 *                 if (
 *                     # token(3) should be max 2 digits
*/
      __pyx_v_token3_len = PyUnicode_GET_LENGTH(__pyx_v_token3);

      /* "cytimes/parser.py":3799
 *                 if (
 *                     # token(3) should be max 2 digits
 *                     token3_len <= 2             # <<<<<<<<<<<<<<
 *                     # token(3) must be all digits
 *                     and utils.is_str_ascii_digits(token3, token3_len)
*/
      __pyx_t_1 = (__pyx_v_token3_len <= 2);
      if (__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L15_bool_binop_done;
      }

      /* "cytimes/parser.py":3801
 *                     token3_len <= 2
 *                     # token(3) must be all digits
 *                     and utils.is_str_ascii_digits(token3, token3_len)             # <<<<<<<<<<<<<<
 *                 ):
 *                     mi = utils.slice_to_uint(token3, 0, token3_len, token3_len)
*/
      __pyx_t_4.__pyx_n = 1;
      __pyx_t_4.token_len = __pyx_v_token3_len;
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_str_ascii_digits(__pyx_v_token3, &__pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3801, __pyx_L1_error)
      __pyx_t_2 = __pyx_t_1;
      __pyx_L15_bool_binop_done:;

      /* "cytimes/parser.py":3797
 *                 token3: str = self._get_token(3)
 *                 token3_len: cython.Py_ssize_t = str_len(token3)
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(3) should be max 2 digits
 *                     token3_len <= 2
*/
      if (__pyx_t_2) {

        /* "cytimes/parser.py":3803
 *                     and utils.is_str_ascii_digits(token3, token3_len)
 *                 ):
 *                     mi = utils.slice_to_uint(token3, 0, token3_len, token3_len)             # <<<<<<<<<<<<<<
 *                     self._pos += 2  # skip token(2..3)
 *             self._pos += 1  # skip token(1)
*/
        __pyx_t_9.__pyx_n = 1;
        __pyx_t_9.token_len = __pyx_v_token3_len;
        __pyx_t_8 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token3, 0, __pyx_v_token3_len, &__pyx_t_9); if (unlikely(__pyx_t_8 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 3803, __pyx_L1_error)
        __pyx_v_mi = __pyx_t_8;

        /* "cytimes/parser.py":3804
 *                 ):
 *                     mi = utils.slice_to_uint(token3, 0, token3_len, token3_len)
 *                     self._pos += 2  # skip token(2..3)             # <<<<<<<<<<<<<<
 *             self._pos += 1  # skip token(1)
 *         # Otherwise: unsupported
*/
        __pyx_v_self->_pos = (__pyx_v_self->_pos + 2);

        /* "cytimes/parser.py":3797
 *                 token3: str = self._get_token(3)
 *                 token3_len: cython.Py_ssize_t = str_len(token3)
 *                 if (             # <<<<<<<<<<<<<<
 *                     # token(3) should be max 2 digits
 *                     token3_len <= 2
*/
      }

      /* "cytimes/parser.py":3794
 *             mi: cython.int = 0
 *             # +HH[:MM]
 *             if self._has_token(3) and utils.is_str_time_sep(self._get_token(2)):             # <<<<<<<<<<<<<<
 *                 token3: str = self._get_token(3)
 *                 token3_len: cython.Py_ssize_t = str_len(token3)
*/
    }

    /* "cytimes/parser.py":3805
 *                     mi = utils.slice_to_uint(token3, 0, token3_len, token3_len)
 *                     self._pos += 2  # skip token(2..3)
 *             self._pos += 1  # skip token(1)             # <<<<<<<<<<<<<<
 *         # Otherwise: unsupported
 *         else:
*/
    __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

    /* "cytimes/parser.py":3790
 *             self._pos += 1  # skip token(1)
 *         # Case: +[HH[:MM]] ((12 digit hour, optional ':' + MM)
 *         elif 1 <= token1_len <= 2:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.slice_to_uint(token1, 0, token1_len, token1_len)
 *             mi: cython.int = 0
*/
    goto __pyx_L10;
  }

  /* "cytimes/parser.py":3808
 *         # Otherwise: unsupported
 *         else:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Compute UTC offset: when timezone is not ignored
*/
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L10:;

  /* "cytimes/parser.py":3811
 * 
 *         # Compute UTC offset: when timezone is not ignored
 *         if not self._ignoretz:             # <<<<<<<<<<<<<<
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)
 *             if not -86_400 <= offset <= 86_400:
*/
  __pyx_t_2 = (!__pyx_v_self->_ignoretz);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3812
 *         # Compute UTC offset: when timezone is not ignored
 *         if not self._ignoretz:
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)             # <<<<<<<<<<<<<<
 *             if not -86_400 <= offset <= 86_400:
 *                 raise ValueError(
*/
    __pyx_v_offset = (__pyx_v_sign * ((__pyx_v_hh * 0xE10) + (__pyx_v_mi * 60)));

    /* "cytimes/parser.py":3813
 *         if not self._ignoretz:
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)
 *             if not -86_400 <= offset <= 86_400:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Invalid UTC offset '%d' in seconds, "
*/
    __pyx_t_2 = (-86400L <= __pyx_v_offset);
    if (__pyx_t_2) {
      __pyx_t_2 = (__pyx_v_offset <= 0x15180);
    }
    __pyx_t_1 = (!__pyx_t_2);
    if (unlikely(__pyx_t_1)) {

      /* "cytimes/parser.py":3814
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)
 *             if not -86_400 <= offset <= 86_400:
 *                 raise ValueError(             # <<<<<<<<<<<<<<
 *                     "Invalid UTC offset '%d' in seconds, "
 *                     "must be between -86,400 and 86,400." % (offset)
*/
      __pyx_t_10 = NULL;

      /* "cytimes/parser.py":3816
 *                 raise ValueError(
 *                     "Invalid UTC offset '%d' in seconds, "
 *                     "must be between -86,400 and 86,400." % (offset)             # <<<<<<<<<<<<<<
 *                 )
 *             if self._res.is_tzoffset_set():
*/
      __pyx_t_11 = __Pyx_PyLong_From_int(__pyx_v_offset); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_UTC_offset_d_in_seconds, __pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3816, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      __pyx_t_13 = 1;
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_10, __pyx_t_12};
        __pyx_t_3 = __Pyx_PyObject_FastCall((PyObject*)(((PyTypeObject*)PyExc_ValueError)), __pyx_callargs+__pyx_t_13, (2-__pyx_t_13) | (__pyx_t_13*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3814, __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(0, 3814, __pyx_L1_error)

      /* "cytimes/parser.py":3813
 *         if not self._ignoretz:
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)
 *             if not -86_400 <= offset <= 86_400:             # <<<<<<<<<<<<<<
 *                 raise ValueError(
 *                     "Invalid UTC offset '%d' in seconds, "
*/
    }

    /* "cytimes/parser.py":3818
 *                     "must be between -86,400 and 86,400." % (offset)
 *                 )
 *             if self._res.is_tzoffset_set():             # <<<<<<<<<<<<<<
 *                 self._res.tzoffset += offset  # add to base
 *             else:
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_is_tzoffset_set(__pyx_v_self->_res);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":3819
 *                 )
 *             if self._res.is_tzoffset_set():
 *                 self._res.tzoffset += offset  # add to base             # <<<<<<<<<<<<<<
 *             else:
 *                 self._res.tzoffset = offset  # set base
*/
      __pyx_v_self->_res->tzoffset = (__pyx_v_self->_res->tzoffset + __pyx_v_offset);

      /* "cytimes/parser.py":3818
 *                     "must be between -86,400 and 86,400." % (offset)
 *                 )
 *             if self._res.is_tzoffset_set():             # <<<<<<<<<<<<<<
 *                 self._res.tzoffset += offset  # add to base
 *             else:
*/
      goto __pyx_L19;
    }

    /* "cytimes/parser.py":3821
 *                 self._res.tzoffset += offset  # add to base
 *             else:
 *                 self._res.tzoffset = offset  # set base             # <<<<<<<<<<<<<<
 *             self._res.tzoffset_finalized = True  # prevent further changes
 *         return True  # exit: success
*/
    /*else*/ {
      __pyx_v_self->_res->tzoffset = __pyx_v_offset;
    }
    __pyx_L19:;

    /* "cytimes/parser.py":3822
 *             else:
 *                 self._res.tzoffset = offset  # set base
 *             self._res.tzoffset_finalized = True  # prevent further changes             # <<<<<<<<<<<<<<
 *         return True  # exit: success
 * 
*/
    __pyx_v_self->_res->tzoffset_finalized = 1;

    /* "cytimes/parser.py":3811
 * 
 *         # Compute UTC offset: when timezone is not ignored
 *         if not self._ignoretz:             # <<<<<<<<<<<<<<
 *             offset: cython.int = sign * (hh * 3_600 + mi * 60)
 *             if not -86_400 <= offset <= 86_400:
*/
  }

  /* "cytimes/parser.py":3823
 *                 self._res.tzoffset = offset  # set base
 *             self._res.tzoffset_finalized = True  # prevent further changes
 *         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *     # . tokens - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3727
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cytimes.parser.Parser._parse_token_tzoffset", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_token1);
  __Pyx_XDECREF(__pyx_v_token3);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3826
 * 
 *     # . tokens - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__has_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, Py_ssize_t __pyx_v_offset) {
  int __pyx_r;
  Py_ssize_t __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":3845
 *           if the token at the specified relative position exists.
 *         """
 *         return 0 <= (self._pos + offset) < self._length             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_t_1 = (__pyx_v_self->_pos + __pyx_v_offset);
  __pyx_t_2 = (0 <= __pyx_t_1);
  if (__pyx_t_2) {
    __pyx_t_2 = (__pyx_t_1 < __pyx_v_self->_length);
  }
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;

  /* "cytimes/parser.py":3826
 * 
 *     # . tokens - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":3847
 *         return 0 <= (self._pos + offset) < self._length
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_token(self, offset: cython.Py_ssize_t) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, Py_ssize_t __pyx_v_offset) {
  Py_ssize_t __pyx_v_idx;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4;
  __Pyx_RefNannySetupContext("_get_token", 0);

  /* "cytimes/parser.py":3865
 *           the token at the specified relative position.
 *         """
 *         idx: cython.Py_ssize_t = self._pos + offset             # <<<<<<<<<<<<<<
 *         if not 0 <= idx < self._length:
 *             return None
*/
  __pyx_v_idx = (__pyx_v_self->_pos + __pyx_v_offset);

  /* "cytimes/parser.py":3866
 *         """
 *         idx: cython.Py_ssize_t = self._pos + offset
 *         if not 0 <= idx < self._length:             # <<<<<<<<<<<<<<
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))
*/
  __pyx_t_1 = (0 <= __pyx_v_idx);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_idx < __pyx_v_self->_length);
  }
  __pyx_t_2 = (!__pyx_t_1);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3867
 *         idx: cython.Py_ssize_t = self._pos + offset
 *         if not 0 <= idx < self._length:
 *             return None             # <<<<<<<<<<<<<<
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "cytimes/parser.py":3866
 *         """
 *         idx: cython.Py_ssize_t = self._pos + offset
 *         if not 0 <= idx < self._length:             # <<<<<<<<<<<<<<
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))
*/
  }

  /* "cytimes/parser.py":3868
 *         if not 0 <= idx < self._length:
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_v_self->_tokens;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_v_idx);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(((PyObject*)__pyx_t_4));
  __pyx_r = ((PyObject*)__pyx_t_4);
  goto __pyx_L0;

  /* "cytimes/parser.py":3847
 *         return 0 <= (self._pos + offset) < self._length
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_token(self, offset: cython.Py_ssize_t) -> str:
*/

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

/* "cytimes/parser.py":3870
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_token1(self) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_token1(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self) {
  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_token1", 0);

  /* "cytimes/parser.py":3887
 *           the next token relative to the current position.
 *         """
 *         if self._token1 is None:             # <<<<<<<<<<<<<<
 *             self._token1 = self._get_token(1)
 *         return self._token1
*/
  __pyx_t_1 = (__pyx_v_self->_token1 == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3888
 *         """
 *         if self._token1 is None:
 *             self._token1 = self._get_token(1)             # <<<<<<<<<<<<<<
 *         return self._token1
 * 
*/
    __pyx_t_2 = __pyx_f_7cytimes_6parser_6Parser__get_token(__pyx_v_self, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3888, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_token1);
    __Pyx_DECREF(__pyx_v_self->_token1);
    __pyx_v_self->_token1 = ((PyObject*)__pyx_t_2);
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":3887
 *           the next token relative to the current position.
 *         """
 *         if self._token1 is None:             # <<<<<<<<<<<<<<
 *             self._token1 = self._get_token(1)
 *         return self._token1
*/
  }

  /* "cytimes/parser.py":3889
 *         if self._token1 is None:
 *             self._token1 = self._get_token(1)
 *         return self._token1             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_token1);
  __pyx_r = __pyx_v_self->_token1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3870
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_token1(self) -> str:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Parser._get_token1", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":3891
 *         return self._token1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_next_token(self) -> str:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__get_next_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self) {
  Py_ssize_t __pyx_v_idx;
  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;
  __Pyx_RefNannySetupContext("_get_next_token", 0);

  /* "cytimes/parser.py":3910
 *         """
 *         # Reset peeks
 *         self._reset_token_peeks()             # <<<<<<<<<<<<<<
 * 
 *         # Get next token
*/
  (void)(__pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(__pyx_v_self));

  /* "cytimes/parser.py":3913
 * 
 *         # Get next token
 *         self._pos += 1             # <<<<<<<<<<<<<<
 *         idx: cython.Py_ssize_t = self._pos
 *         if idx >= self._length:
*/
  __pyx_v_self->_pos = (__pyx_v_self->_pos + 1);

  /* "cytimes/parser.py":3914
 *         # Get next token
 *         self._pos += 1
 *         idx: cython.Py_ssize_t = self._pos             # <<<<<<<<<<<<<<
 *         if idx >= self._length:
 *             return None
*/
  __pyx_t_1 = __pyx_v_self->_pos;
  __pyx_v_idx = __pyx_t_1;

  /* "cytimes/parser.py":3915
 *         self._pos += 1
 *         idx: cython.Py_ssize_t = self._pos
 *         if idx >= self._length:             # <<<<<<<<<<<<<<
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))
*/
  __pyx_t_2 = (__pyx_v_idx >= __pyx_v_self->_length);
  if (__pyx_t_2) {

    /* "cytimes/parser.py":3916
 *         idx: cython.Py_ssize_t = self._pos
 *         if idx >= self._length:
 *             return None             # <<<<<<<<<<<<<<
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
*/
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "cytimes/parser.py":3915
 *         self._pos += 1
 *         idx: cython.Py_ssize_t = self._pos
 *         if idx >= self._length:             # <<<<<<<<<<<<<<
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))
*/
  }

  /* "cytimes/parser.py":3917
 *         if idx >= self._length:
 *             return None
 *         return cython.cast(str, list_getitem(self._tokens, idx))             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __pyx_v_self->_tokens;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_v_idx);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(((PyObject*)__pyx_t_4));
  __pyx_r = ((PyObject*)__pyx_t_4);
  goto __pyx_L0;

  /* "cytimes/parser.py":3891
 *         return self._token1
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _get_next_token(self) -> str:
*/

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

/* "cytimes/parser.py":3919
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__reset_token_peeks(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_reset_token_peeks", 0);

  /* "cytimes/parser.py":3933
 *           (`self._pos`) is changed manually or externally.
 *         """
 *         self._token1 = None             # <<<<<<<<<<<<<<
 *         return True
 * 
*/
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->_token1);
  __Pyx_DECREF(__pyx_v_self->_token1);
  __pyx_v_self->_token1 = ((PyObject*)Py_None);

  /* "cytimes/parser.py":3934
 *         """
 *         self._token1 = None
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     # . setters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":3919
 *         return cython.cast(str, list_getitem(self._tokens, idx))
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(check=False)
*/

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

/* "cytimes/parser.py":3937
 * 
 *     # . setters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_flag, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token *__pyx_optional_args) {

  /* "cytimes/parser.py":3943
 *         self,
 *         flag: cython.int,
 *         token: str = None,             # <<<<<<<<<<<<<<
 *         token_len: cython.Py_ssize_t = -1,
 *         token_kind: cython.int = -1,
*/
  PyObject *__pyx_v_token = ((PyObject*)Py_None);
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_token_kind = ((int)-1);
  int __pyx_v_month;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind __pyx_t_3;
  struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token = __pyx_optional_args->token;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_token_len = __pyx_optional_args->token_len;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_token_kind = __pyx_optional_args->token_kind;
        }
      }
    }
  }

  /* "cytimes/parser.py":3968
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3969
 *         # Get token length
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         if token_len <= 0:
 *             token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3968
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  }

  /* "cytimes/parser.py":3970
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3971
 *             return False
 *         if token_len <= 0:
 *             token_len = str_len(token)             # <<<<<<<<<<<<<<
 *         if token_len == 0:
 *             return False  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "cytimes/parser.py":3970
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  }

  /* "cytimes/parser.py":3972
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3973
 *             token_len = str_len(token)
 *         if token_len == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Ensure token numeric kind
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3972
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":3976
 * 
 *         # Ensure token numeric kind
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 2:  # Y/M/D token cannot be decimal
*/
  __pyx_t_1 = (__pyx_v_token_kind < 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3977
 *         # Ensure token numeric kind
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)             # <<<<<<<<<<<<<<
 *         if token_kind == 2:  # Y/M/D token cannot be decimal
 *             return False  # exit: invalid
*/
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.token_len = __pyx_v_token_len;
    __pyx_t_2 = __pyx_f_7cytimes_5utils_parse_numeric_kind(__pyx_v_token, &__pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3977, __pyx_L1_error)
    __pyx_v_token_kind = __pyx_t_2;

    /* "cytimes/parser.py":3976
 * 
 *         # Ensure token numeric kind
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 2:  # Y/M/D token cannot be decimal
*/
  }

  /* "cytimes/parser.py":3978
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 2:  # Y/M/D token cannot be decimal             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_kind == 2);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3979
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 2:  # Y/M/D token cannot be decimal
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Integer token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":3978
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 2:  # Y/M/D token cannot be decimal             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":3982
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             return self._res.set_ymd_str(flag, token, token_len)
 * 
*/
  __pyx_t_1 = (__pyx_v_token_kind == 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3983
 *         # Integer token
 *         if token_kind == 1:
 *             return self._res.set_ymd_str(flag, token, token_len)             # <<<<<<<<<<<<<<
 * 
 *         # String: Could be month token
*/
    if (unlikely(__pyx_v_token == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(0, 3983, __pyx_L1_error)
    }
    __pyx_t_4.__pyx_n = 1;
    __pyx_t_4.token_len = __pyx_v_token_len;
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_set_ymd_str(__pyx_v_self->_res, __pyx_v_flag, __pyx_v_token, &__pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3983, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3982
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             return self._res.set_ymd_str(flag, token, token_len)
 * 
*/
  }

  /* "cytimes/parser.py":3986
 * 
 *         # String: Could be month token
 *         month: cython.int = self._cfg.get_month(token)             # <<<<<<<<<<<<<<
 *         if month != -1 and not self._cfg.is_jump(token):
 *             return self._res.set_ymd_int(2, month)
*/
  __pyx_t_2 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->get_month(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_2 == ((int)-2))) __PYX_ERR(0, 3986, __pyx_L1_error)
  __pyx_v_month = __pyx_t_2;

  /* "cytimes/parser.py":3987
 *         # String: Could be month token
 *         month: cython.int = self._cfg.get_month(token)
 *         if month != -1 and not self._cfg.is_jump(token):             # <<<<<<<<<<<<<<
 *             return self._res.set_ymd_int(2, month)
 * 
*/
  __pyx_t_5 = (__pyx_v_month != -1L);
  if (__pyx_t_5) {
  } else {
    __pyx_t_1 = __pyx_t_5;
    goto __pyx_L10_bool_binop_done;
  }
  __pyx_t_5 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_self->_cfg->__pyx_vtab)->is_jump(__pyx_v_self->_cfg, __pyx_v_token, 0); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 3987, __pyx_L1_error)
  __pyx_t_6 = (!__pyx_t_5);
  __pyx_t_1 = __pyx_t_6;
  __pyx_L10_bool_binop_done:;
  if (__pyx_t_1) {

    /* "cytimes/parser.py":3988
 *         month: cython.int = self._cfg.get_month(token)
 *         if month != -1 and not self._cfg.is_jump(token):
 *             return self._res.set_ymd_int(2, month)             # <<<<<<<<<<<<<<
 * 
 *         # Not Y/M/D token
*/
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Result_set_ymd_int(__pyx_v_self->_res, 2, __pyx_v_month); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3988, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":3987
 *         # String: Could be month token
 *         month: cython.int = self._cfg.get_month(token)
 *         if month != -1 and not self._cfg.is_jump(token):             # <<<<<<<<<<<<<<
 *             return self._res.set_ymd_int(2, month)
 * 
*/
  }

  /* "cytimes/parser.py":3991
 * 
 *         # Not Y/M/D token
 *         return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 0;
  goto __pyx_L0;

  /* "cytimes/parser.py":3937
 * 
 *     # . setters - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._set_ymd_by_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":3993
 *         return False  # exit: invalid
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hms_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_flag, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token *__pyx_optional_args) {

  /* "cytimes/parser.py":3999
 *         self,
 *         flag: cython.int,
 *         token: str = None,             # <<<<<<<<<<<<<<
 *         token_len: cython.Py_ssize_t = -1,
 *         token_kind: cython.int = -1,
*/
  PyObject *__pyx_v_token = ((PyObject*)Py_None);
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_token_kind = ((int)-1);
  int __pyx_r;
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token __pyx_t_2;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token __pyx_t_3;
  struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token = __pyx_optional_args->token;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_token_len = __pyx_optional_args->token_len;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_token_kind = __pyx_optional_args->token_kind;
        }
      }
    }
  }

  /* "cytimes/parser.py":4025
 *         """
 *         # Hour flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             return self._set_hour_by_token(token, token_len, token_kind)
 *         # Minute flag
*/
  switch (__pyx_v_flag) {
    case 0:

    /* "cytimes/parser.py":4026
 *         # Hour flag
 *         if flag == 0:
 *             return self._set_hour_by_token(token, token_len, token_kind)             # <<<<<<<<<<<<<<
 *         # Minute flag
 *         elif flag == 1:
*/
    __pyx_t_2.__pyx_n = 3;
    __pyx_t_2.token = __pyx_v_token;
    __pyx_t_2.token_len = __pyx_v_token_len;
    __pyx_t_2.token_kind = __pyx_v_token_kind;
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(__pyx_v_self, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4026, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4025
 *         """
 *         # Hour flag
 *         if flag == 0:             # <<<<<<<<<<<<<<
 *             return self._set_hour_by_token(token, token_len, token_kind)
 *         # Minute flag
*/
    break;
    case 1:

    /* "cytimes/parser.py":4029
 *         # Minute flag
 *         elif flag == 1:
 *             return self._set_minute_by_token(token, token_len, token_kind)             # <<<<<<<<<<<<<<
 *         # Second flag
 *         elif flag == 2:
*/
    __pyx_t_3.__pyx_n = 3;
    __pyx_t_3.token = __pyx_v_token;
    __pyx_t_3.token_len = __pyx_v_token_len;
    __pyx_t_3.token_kind = __pyx_v_token_kind;
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__set_minute_by_token(__pyx_v_self, &__pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4029, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4028
 *             return self._set_hour_by_token(token, token_len, token_kind)
 *         # Minute flag
 *         elif flag == 1:             # <<<<<<<<<<<<<<
 *             return self._set_minute_by_token(token, token_len, token_kind)
 *         # Second flag
*/
    break;
    case 2:

    /* "cytimes/parser.py":4032
 *         # Second flag
 *         elif flag == 2:
 *             return self._set_second_by_token(token, token_len, token_kind)             # <<<<<<<<<<<<<<
 *         # Invalid flag
 *         else:
*/
    __pyx_t_4.__pyx_n = 3;
    __pyx_t_4.token = __pyx_v_token;
    __pyx_t_4.token_len = __pyx_v_token_len;
    __pyx_t_4.token_kind = __pyx_v_token_kind;
    __pyx_t_1 = __pyx_f_7cytimes_6parser_6Parser__set_second_by_token(__pyx_v_self, &__pyx_t_4); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4032, __pyx_L1_error)
    __pyx_r = __pyx_t_1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4031
 *             return self._set_minute_by_token(token, token_len, token_kind)
 *         # Second flag
 *         elif flag == 2:             # <<<<<<<<<<<<<<
 *             return self._set_second_by_token(token, token_len, token_kind)
 *         # Invalid flag
*/
    break;
    default:

    /* "cytimes/parser.py":4035
 *         # Invalid flag
 *         else:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
    __pyx_r = 0;
    goto __pyx_L0;
    break;
  }

  /* "cytimes/parser.py":3993
 *         return False  # exit: invalid
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._set_hms_by_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":4037
 *             return False
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_hour_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token *__pyx_optional_args) {

  /* "cytimes/parser.py":4042
 *     def _set_hour_by_token(
 *         self,
 *         token: str = None,             # <<<<<<<<<<<<<<
 *         token_len: cython.Py_ssize_t = -1,
 *         token_kind: cython.int = -1,
*/
  PyObject *__pyx_v_token = ((PyObject*)Py_None);
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_token_kind = ((int)-1);
  int __pyx_v_hh;
  double __pyx_v_frac;
  double __pyx_v_r;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind __pyx_t_3;
  unsigned PY_LONG_LONG __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_5;
  int __pyx_t_6;
  double __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat __pyx_t_8;
  long __pyx_t_9;
  long __pyx_t_10;
  long __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token = __pyx_optional_args->token;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_token_len = __pyx_optional_args->token_len;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_token_kind = __pyx_optional_args->token_kind;
        }
      }
    }
  }

  /* "cytimes/parser.py":4066
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4067
 *         # Get token length
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         if token_len <= 0:
 *             token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4066
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  }

  /* "cytimes/parser.py":4068
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4069
 *             return False
 *         if token_len <= 0:
 *             token_len = str_len(token)             # <<<<<<<<<<<<<<
 *         if token_len == 0:
 *             return False  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "cytimes/parser.py":4068
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  }

  /* "cytimes/parser.py":4070
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4071
 *             token_len = str_len(token)
 *         if token_len == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Ensure is numeric token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4070
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4074
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  __pyx_t_1 = (__pyx_v_token_kind < 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4075
 *         # Ensure is numeric token
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)             # <<<<<<<<<<<<<<
 *         if token_kind == 0:
 *             return False  # exit: invalid
*/
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.token_len = __pyx_v_token_len;
    __pyx_t_2 = __pyx_f_7cytimes_5utils_parse_numeric_kind(__pyx_v_token, &__pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 4075, __pyx_L1_error)
    __pyx_v_token_kind = __pyx_t_2;

    /* "cytimes/parser.py":4074
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  }

  /* "cytimes/parser.py":4076
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_kind == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4077
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Integer token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4076
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4080
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= hh < 24:
*/
  __pyx_t_1 = (__pyx_v_token_kind == 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4081
 *         # Integer token
 *         if token_kind == 1:
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *             if not 0 <= hh < 24:
 *                 return False  # exit: invalid
*/
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.token_len = __pyx_v_token_len;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_5); if (unlikely(__pyx_t_4 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 4081, __pyx_L1_error)
    __pyx_v_hh = __pyx_t_4;

    /* "cytimes/parser.py":4082
 *         if token_kind == 1:
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.hour = hh
*/
    __pyx_t_1 = (0 <= __pyx_v_hh);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_hh < 24);
    }
    __pyx_t_6 = (!__pyx_t_1);
    if (__pyx_t_6) {

      /* "cytimes/parser.py":4083
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= hh < 24:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             self._res.hour = hh
 *             return True  # exit: success
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":4082
 *         if token_kind == 1:
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.hour = hh
*/
    }

    /* "cytimes/parser.py":4084
 *             if not 0 <= hh < 24:
 *                 return False  # exit: invalid
 *             self._res.hour = hh             # <<<<<<<<<<<<<<
 *             return True  # exit: success
 * 
*/
    __pyx_v_self->_res->hour = __pyx_v_hh;

    /* "cytimes/parser.py":4085
 *                 return False  # exit: invalid
 *             self._res.hour = hh
 *             return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Decimal token
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4080
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             hh: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= hh < 24:
*/
  }

  /* "cytimes/parser.py":4088
 * 
 *         # Decimal token
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *         hh: cython.int = int(frac)
 *         if not 0 <= hh < 24:
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.token_len = __pyx_v_token_len;
  __pyx_t_7 = __pyx_f_7cytimes_5utils_slice_to_ufloat(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_8); if (unlikely(__pyx_t_7 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4088, __pyx_L1_error)
  __pyx_v_frac = __pyx_t_7;

  /* "cytimes/parser.py":4089
 *         # Decimal token
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         hh: cython.int = int(frac)             # <<<<<<<<<<<<<<
 *         if not 0 <= hh < 24:
 *             return False  # exit: invalid
*/
  __pyx_v_hh = ((int)__pyx_v_frac);

  /* "cytimes/parser.py":4090
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         hh: cython.int = int(frac)
 *         if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.hour = hh
*/
  __pyx_t_6 = (0 <= __pyx_v_hh);
  if (__pyx_t_6) {
    __pyx_t_6 = (__pyx_v_hh < 24);
  }
  __pyx_t_1 = (!__pyx_t_6);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4091
 *         hh: cython.int = int(frac)
 *         if not 0 <= hh < 24:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         self._res.hour = hh
 *         # fraction to minute
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4090
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         hh: cython.int = int(frac)
 *         if not 0 <= hh < 24:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.hour = hh
*/
  }

  /* "cytimes/parser.py":4092
 *         if not 0 <= hh < 24:
 *             return False  # exit: invalid
 *         self._res.hour = hh             # <<<<<<<<<<<<<<
 *         # fraction to minute
 *         r: cython.double = frac % 1
*/
  __pyx_v_self->_res->hour = __pyx_v_hh;

  /* "cytimes/parser.py":4094
 *         self._res.hour = hh
 *         # fraction to minute
 *         r: cython.double = frac % 1             # <<<<<<<<<<<<<<
 *         if r:
 *             self._res.minute = min(math.lround(r * 60), 59)
*/
  __pyx_v_r = __Pyx_mod_double(__pyx_v_frac, 1.0, 1);

  /* "cytimes/parser.py":4095
 *         # fraction to minute
 *         r: cython.double = frac % 1
 *         if r:             # <<<<<<<<<<<<<<
 *             self._res.minute = min(math.lround(r * 60), 59)
 *         return True  # exit: success
*/
  __pyx_t_1 = (__pyx_v_r != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4096
 *         r: cython.double = frac % 1
 *         if r:
 *             self._res.minute = min(math.lround(r * 60), 59)             # <<<<<<<<<<<<<<
 *         return True  # exit: success
 * 
*/
    __pyx_t_9 = 59;
    __pyx_t_10 = lround((__pyx_v_r * 60.0));
    __pyx_t_1 = (__pyx_t_9 < __pyx_t_10);
    if (__pyx_t_1) {
      __pyx_t_11 = __pyx_t_9;
    } else {
      __pyx_t_11 = __pyx_t_10;
    }
    __pyx_v_self->_res->minute = __pyx_t_11;

    /* "cytimes/parser.py":4095
 *         # fraction to minute
 *         r: cython.double = frac % 1
 *         if r:             # <<<<<<<<<<<<<<
 *             self._res.minute = min(math.lround(r * 60), 59)
 *         return True  # exit: success
*/
  }

  /* "cytimes/parser.py":4097
 *         if r:
 *             self._res.minute = min(math.lround(r * 60), 59)
 *         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":4037
 *             return False
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._set_hour_by_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":4099
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_minute_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token *__pyx_optional_args) {

  /* "cytimes/parser.py":4104
 *     def _set_minute_by_token(
 *         self,
 *         token: str = None,             # <<<<<<<<<<<<<<
 *         token_len: cython.Py_ssize_t = -1,
 *         token_kind: cython.int = -1,
*/
  PyObject *__pyx_v_token = ((PyObject*)Py_None);
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_token_kind = ((int)-1);
  int __pyx_v_mi;
  double __pyx_v_frac;
  double __pyx_v_r;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind __pyx_t_3;
  unsigned PY_LONG_LONG __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_5;
  int __pyx_t_6;
  double __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_ufloat __pyx_t_8;
  long __pyx_t_9;
  long __pyx_t_10;
  long __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token = __pyx_optional_args->token;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_token_len = __pyx_optional_args->token_len;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_token_kind = __pyx_optional_args->token_kind;
        }
      }
    }
  }

  /* "cytimes/parser.py":4128
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4129
 *         # Get token length
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         if token_len <= 0:
 *             token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4128
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  }

  /* "cytimes/parser.py":4130
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4131
 *             return False
 *         if token_len <= 0:
 *             token_len = str_len(token)             # <<<<<<<<<<<<<<
 *         if token_len == 0:
 *             return False  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "cytimes/parser.py":4130
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  }

  /* "cytimes/parser.py":4132
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4133
 *             token_len = str_len(token)
 *         if token_len == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Ensure is numeric token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4132
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4136
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  __pyx_t_1 = (__pyx_v_token_kind < 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4137
 *         # Ensure is numeric token
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)             # <<<<<<<<<<<<<<
 *         if token_kind == 0:
 *             return False  # exit: invalid
*/
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.token_len = __pyx_v_token_len;
    __pyx_t_2 = __pyx_f_7cytimes_5utils_parse_numeric_kind(__pyx_v_token, &__pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 4137, __pyx_L1_error)
    __pyx_v_token_kind = __pyx_t_2;

    /* "cytimes/parser.py":4136
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  }

  /* "cytimes/parser.py":4138
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_kind == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4139
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Integer token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4138
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4142
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= mi < 60:
*/
  __pyx_t_1 = (__pyx_v_token_kind == 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4143
 *         # Integer token
 *         if token_kind == 1:
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *             if not 0 <= mi < 60:
 *                 return False  # exit: invalid
*/
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.token_len = __pyx_v_token_len;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_5); if (unlikely(__pyx_t_4 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 4143, __pyx_L1_error)
    __pyx_v_mi = __pyx_t_4;

    /* "cytimes/parser.py":4144
 *         if token_kind == 1:
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.minute = mi
*/
    __pyx_t_1 = (0 <= __pyx_v_mi);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_mi < 60);
    }
    __pyx_t_6 = (!__pyx_t_1);
    if (__pyx_t_6) {

      /* "cytimes/parser.py":4145
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= mi < 60:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             self._res.minute = mi
 *             return True  # exit: success
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":4144
 *         if token_kind == 1:
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.minute = mi
*/
    }

    /* "cytimes/parser.py":4146
 *             if not 0 <= mi < 60:
 *                 return False  # exit: invalid
 *             self._res.minute = mi             # <<<<<<<<<<<<<<
 *             return True  # exit: success
 * 
*/
    __pyx_v_self->_res->minute = __pyx_v_mi;

    /* "cytimes/parser.py":4147
 *                 return False  # exit: invalid
 *             self._res.minute = mi
 *             return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Decimal token
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4142
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             mi: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= mi < 60:
*/
  }

  /* "cytimes/parser.py":4150
 * 
 *         # Decimal token
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *         mi: cython.int = int(frac)
 *         if not 0 <= mi < 60:
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.token_len = __pyx_v_token_len;
  __pyx_t_7 = __pyx_f_7cytimes_5utils_slice_to_ufloat(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_8); if (unlikely(__pyx_t_7 == ((double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4150, __pyx_L1_error)
  __pyx_v_frac = __pyx_t_7;

  /* "cytimes/parser.py":4151
 *         # Decimal token
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         mi: cython.int = int(frac)             # <<<<<<<<<<<<<<
 *         if not 0 <= mi < 60:
 *             return False  # exit: invalid
*/
  __pyx_v_mi = ((int)__pyx_v_frac);

  /* "cytimes/parser.py":4152
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         mi: cython.int = int(frac)
 *         if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.minute = mi
*/
  __pyx_t_6 = (0 <= __pyx_v_mi);
  if (__pyx_t_6) {
    __pyx_t_6 = (__pyx_v_mi < 60);
  }
  __pyx_t_1 = (!__pyx_t_6);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4153
 *         mi: cython.int = int(frac)
 *         if not 0 <= mi < 60:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         self._res.minute = mi
 *         # fraction to second
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4152
 *         frac: cython.double = utils.slice_to_ufloat(token, 0, token_len, token_len)
 *         mi: cython.int = int(frac)
 *         if not 0 <= mi < 60:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.minute = mi
*/
  }

  /* "cytimes/parser.py":4154
 *         if not 0 <= mi < 60:
 *             return False  # exit: invalid
 *         self._res.minute = mi             # <<<<<<<<<<<<<<
 *         # fraction to second
 *         r: cython.double = frac % 1
*/
  __pyx_v_self->_res->minute = __pyx_v_mi;

  /* "cytimes/parser.py":4156
 *         self._res.minute = mi
 *         # fraction to second
 *         r: cython.double = frac % 1             # <<<<<<<<<<<<<<
 *         if r:
 *             self._res.second = min(math.lround(r * 60), 59)
*/
  __pyx_v_r = __Pyx_mod_double(__pyx_v_frac, 1.0, 1);

  /* "cytimes/parser.py":4157
 *         # fraction to second
 *         r: cython.double = frac % 1
 *         if r:             # <<<<<<<<<<<<<<
 *             self._res.second = min(math.lround(r * 60), 59)
 *         return True  # exit: success
*/
  __pyx_t_1 = (__pyx_v_r != 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4158
 *         r: cython.double = frac % 1
 *         if r:
 *             self._res.second = min(math.lround(r * 60), 59)             # <<<<<<<<<<<<<<
 *         return True  # exit: success
 * 
*/
    __pyx_t_9 = 59;
    __pyx_t_10 = lround((__pyx_v_r * 60.0));
    __pyx_t_1 = (__pyx_t_9 < __pyx_t_10);
    if (__pyx_t_1) {
      __pyx_t_11 = __pyx_t_9;
    } else {
      __pyx_t_11 = __pyx_t_10;
    }
    __pyx_v_self->_res->second = __pyx_t_11;

    /* "cytimes/parser.py":4157
 *         # fraction to second
 *         r: cython.double = frac % 1
 *         if r:             # <<<<<<<<<<<<<<
 *             self._res.second = min(math.lround(r * 60), 59)
 *         return True  # exit: success
*/
  }

  /* "cytimes/parser.py":4159
 *         if r:
 *             self._res.second = min(math.lround(r * 60), 59)
 *         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":4099
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._set_minute_by_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":4161
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__set_second_by_token(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token *__pyx_optional_args) {

  /* "cytimes/parser.py":4166
 *     def _set_second_by_token(
 *         self,
 *         token: str = None,             # <<<<<<<<<<<<<<
 *         token_len: cython.Py_ssize_t = -1,
 *         token_kind: cython.int = -1,
*/
  PyObject *__pyx_v_token = ((PyObject*)Py_None);
  Py_ssize_t __pyx_v_token_len = ((Py_ssize_t)-1L);
  int __pyx_v_token_kind = ((int)-1);
  int __pyx_v_ss;
  __pyx_t_7cytimes_5utils_sf __pyx_v__sf;
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;
  struct __pyx_opt_args_7cytimes_5utils_parse_numeric_kind __pyx_t_3;
  unsigned PY_LONG_LONG __pyx_t_4;
  struct __pyx_opt_args_7cytimes_5utils_slice_to_uint __pyx_t_5;
  int __pyx_t_6;
  __pyx_t_7cytimes_5utils_sf __pyx_t_7;
  struct __pyx_opt_args_7cytimes_5utils_parse_second_and_fraction __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_token = __pyx_optional_args->token;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_token_len = __pyx_optional_args->token_len;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_token_kind = __pyx_optional_args->token_kind;
        }
      }
    }
  }

  /* "cytimes/parser.py":4190
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  __pyx_t_1 = (__pyx_v_token == ((PyObject*)Py_None));
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4191
 *         # Get token length
 *         if token is None:
 *             return False             # <<<<<<<<<<<<<<
 *         if token_len <= 0:
 *             token_len = str_len(token)
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4190
 *         """
 *         # Get token length
 *         if token is None:             # <<<<<<<<<<<<<<
 *             return False
 *         if token_len <= 0:
*/
  }

  /* "cytimes/parser.py":4192
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  __pyx_t_1 = (__pyx_v_token_len <= 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4193
 *             return False
 *         if token_len <= 0:
 *             token_len = str_len(token)             # <<<<<<<<<<<<<<
 *         if token_len == 0:
 *             return False  # exit: invalid
*/
    __pyx_v_token_len = PyUnicode_GET_LENGTH(__pyx_v_token);

    /* "cytimes/parser.py":4192
 *         if token is None:
 *             return False
 *         if token_len <= 0:             # <<<<<<<<<<<<<<
 *             token_len = str_len(token)
 *         if token_len == 0:
*/
  }

  /* "cytimes/parser.py":4194
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_len == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4195
 *             token_len = str_len(token)
 *         if token_len == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Ensure is numeric token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4194
 *         if token_len <= 0:
 *             token_len = str_len(token)
 *         if token_len == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4198
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  __pyx_t_1 = (__pyx_v_token_kind < 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4199
 *         # Ensure is numeric token
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)             # <<<<<<<<<<<<<<
 *         if token_kind == 0:
 *             return False  # exit: invalid
*/
    __pyx_t_3.__pyx_n = 1;
    __pyx_t_3.token_len = __pyx_v_token_len;
    __pyx_t_2 = __pyx_f_7cytimes_5utils_parse_numeric_kind(__pyx_v_token, &__pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 4199, __pyx_L1_error)
    __pyx_v_token_kind = __pyx_t_2;

    /* "cytimes/parser.py":4198
 * 
 *         # Ensure is numeric token
 *         if token_kind < 0:             # <<<<<<<<<<<<<<
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
*/
  }

  /* "cytimes/parser.py":4200
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  __pyx_t_1 = (__pyx_v_token_kind == 0);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4201
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 * 
 *         # Integer token
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4200
 *         if token_kind < 0:
 *             token_kind = utils.parse_numeric_kind(token, token_len)
 *         if token_kind == 0:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 * 
*/
  }

  /* "cytimes/parser.py":4204
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= ss < 60:
*/
  __pyx_t_1 = (__pyx_v_token_kind == 1);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4205
 *         # Integer token
 *         if token_kind == 1:
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)             # <<<<<<<<<<<<<<
 *             if not 0 <= ss < 60:
 *                 return False  # exit: invalid
*/
    __pyx_t_5.__pyx_n = 1;
    __pyx_t_5.token_len = __pyx_v_token_len;
    __pyx_t_4 = __pyx_f_7cytimes_5utils_slice_to_uint(__pyx_v_token, 0, __pyx_v_token_len, &__pyx_t_5); if (unlikely(__pyx_t_4 == ((unsigned PY_LONG_LONG)-1LL))) __PYX_ERR(0, 4205, __pyx_L1_error)
    __pyx_v_ss = __pyx_t_4;

    /* "cytimes/parser.py":4206
 *         if token_kind == 1:
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= ss < 60:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.second = ss
*/
    __pyx_t_1 = (0 <= __pyx_v_ss);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_ss < 60);
    }
    __pyx_t_6 = (!__pyx_t_1);
    if (__pyx_t_6) {

      /* "cytimes/parser.py":4207
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= ss < 60:
 *                 return False  # exit: invalid             # <<<<<<<<<<<<<<
 *             self._res.second = ss
 *             return True  # exit: success
*/
      __pyx_r = 0;
      goto __pyx_L0;

      /* "cytimes/parser.py":4206
 *         if token_kind == 1:
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= ss < 60:             # <<<<<<<<<<<<<<
 *                 return False  # exit: invalid
 *             self._res.second = ss
*/
    }

    /* "cytimes/parser.py":4208
 *             if not 0 <= ss < 60:
 *                 return False  # exit: invalid
 *             self._res.second = ss             # <<<<<<<<<<<<<<
 *             return True  # exit: success
 * 
*/
    __pyx_v_self->_res->second = __pyx_v_ss;

    /* "cytimes/parser.py":4209
 *                 return False  # exit: invalid
 *             self._res.second = ss
 *             return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *         # Decimal token
*/
    __pyx_r = 1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4204
 * 
 *         # Integer token
 *         if token_kind == 1:             # <<<<<<<<<<<<<<
 *             ss: cython.int = utils.slice_to_uint(token, 0, token_len, token_len)
 *             if not 0 <= ss < 60:
*/
  }

  /* "cytimes/parser.py":4212
 * 
 *         # Decimal token
 *         _sf = utils.parse_second_and_fraction(token, 0, token_len)             # <<<<<<<<<<<<<<
 *         if _sf.second == -1:
 *             return False  # exit: invalid
*/
  __pyx_t_8.__pyx_n = 1;
  __pyx_t_8.token_len = __pyx_v_token_len;
  __pyx_t_7 = __pyx_f_7cytimes_5utils_parse_second_and_fraction(__pyx_v_token, 0, &__pyx_t_8); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4212, __pyx_L1_error)
  __pyx_v__sf = __pyx_t_7;

  /* "cytimes/parser.py":4213
 *         # Decimal token
 *         _sf = utils.parse_second_and_fraction(token, 0, token_len)
 *         if _sf.second == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.second = _sf.second
*/
  __pyx_t_6 = (__pyx_v__sf.second == -1L);
  if (__pyx_t_6) {

    /* "cytimes/parser.py":4214
 *         _sf = utils.parse_second_and_fraction(token, 0, token_len)
 *         if _sf.second == -1:
 *             return False  # exit: invalid             # <<<<<<<<<<<<<<
 *         self._res.second = _sf.second
 *         self._res.microsecond = _sf.microsecond
*/
    __pyx_r = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4213
 *         # Decimal token
 *         _sf = utils.parse_second_and_fraction(token, 0, token_len)
 *         if _sf.second == -1:             # <<<<<<<<<<<<<<
 *             return False  # exit: invalid
 *         self._res.second = _sf.second
*/
  }

  /* "cytimes/parser.py":4215
 *         if _sf.second == -1:
 *             return False  # exit: invalid
 *         self._res.second = _sf.second             # <<<<<<<<<<<<<<
 *         self._res.microsecond = _sf.microsecond
 *         return True  # exit: success
*/
  __pyx_t_2 = __pyx_v__sf.second;
  __pyx_v_self->_res->second = __pyx_t_2;

  /* "cytimes/parser.py":4216
 *             return False  # exit: invalid
 *         self._res.second = _sf.second
 *         self._res.microsecond = _sf.microsecond             # <<<<<<<<<<<<<<
 *         return True  # exit: success
 * 
*/
  __pyx_t_2 = __pyx_v__sf.microsecond;
  __pyx_v_self->_res->microsecond = __pyx_t_2;

  /* "cytimes/parser.py":4217
 *         self._res.second = _sf.second
 *         self._res.microsecond = _sf.microsecond
 *         return True  # exit: success             # <<<<<<<<<<<<<<
 * 
 *     @cython.cfunc
*/
  __pyx_r = 1;
  goto __pyx_L0;

  /* "cytimes/parser.py":4161
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cytimes.parser.Parser._set_second_by_token", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  return __pyx_r;
}

/* "cytimes/parser.py":4219
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

static CYTHON_INLINE int __pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm(CYTHON_UNUSED struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, int __pyx_v_hour, int __pyx_v_flag) {
  int __pyx_r;
  int __pyx_t_1;
  int __pyx_t_2;

  /* "cytimes/parser.py":4236
 *         - `0 AM/PM`   unchanged
 *         """
 *         if 1 <= hour <= 11:             # <<<<<<<<<<<<<<
 *             if flag == 1:
 *                 hour += 12
*/
  __pyx_t_1 = (1 <= __pyx_v_hour);
  if (__pyx_t_1) {
    __pyx_t_1 = (__pyx_v_hour <= 11);
  }
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4237
 *         """
 *         if 1 <= hour <= 11:
 *             if flag == 1:             # <<<<<<<<<<<<<<
 *                 hour += 12
 *             return hour
*/
    __pyx_t_1 = (__pyx_v_flag == 1);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":4238
 *         if 1 <= hour <= 11:
 *             if flag == 1:
 *                 hour += 12             # <<<<<<<<<<<<<<
 *             return hour
 *         elif hour == 12:
*/
      __pyx_v_hour = (__pyx_v_hour + 12);

      /* "cytimes/parser.py":4237
 *         """
 *         if 1 <= hour <= 11:
 *             if flag == 1:             # <<<<<<<<<<<<<<
 *                 hour += 12
 *             return hour
*/
    }

    /* "cytimes/parser.py":4239
 *             if flag == 1:
 *                 hour += 12
 *             return hour             # <<<<<<<<<<<<<<
 *         elif hour == 12:
 *             return 0 if flag == 0 else 12
*/
    __pyx_r = __pyx_v_hour;
    goto __pyx_L0;

    /* "cytimes/parser.py":4236
 *         - `0 AM/PM`   unchanged
 *         """
 *         if 1 <= hour <= 11:             # <<<<<<<<<<<<<<
 *             if flag == 1:
 *                 hour += 12
*/
  }

  /* "cytimes/parser.py":4240
 *                 hour += 12
 *             return hour
 *         elif hour == 12:             # <<<<<<<<<<<<<<
 *             return 0 if flag == 0 else 12
 *         else:
*/
  __pyx_t_1 = (__pyx_v_hour == 12);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4241
 *             return hour
 *         elif hour == 12:
 *             return 0 if flag == 0 else 12             # <<<<<<<<<<<<<<
 *         else:
 *             return hour
*/
    __pyx_t_1 = (__pyx_v_flag == 0);
    if (__pyx_t_1) {
      __pyx_t_2 = 0;
    } else {
      __pyx_t_2 = 12;
    }
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;

    /* "cytimes/parser.py":4240
 *                 hour += 12
 *             return hour
 *         elif hour == 12:             # <<<<<<<<<<<<<<
 *             return 0 if flag == 0 else 12
 *         else:
*/
  }

  /* "cytimes/parser.py":4243
 *             return 0 if flag == 0 else 12
 *         else:
 *             return hour             # <<<<<<<<<<<<<<
 * 
 *     # Internal
*/
  /*else*/ {
    __pyx_r = __pyx_v_hour;
    goto __pyx_L0;
  }

  /* "cytimes/parser.py":4219
 *         return True  # exit: success
 * 
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     @cython.exceptval(-1, check=False)
*/

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

/* "cytimes/parser.py":4246
 * 
 *     # Internal
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _cls(self) -> object:
*/

static CYTHON_INLINE PyObject *__pyx_f_7cytimes_6parser_6Parser__cls(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self) {
  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("_cls", 0);

  /* "cytimes/parser.py":4250
 *     def _cls(self) -> object:
 *         """(internal) Access the class object of the current instance `<'type[Parser]'>`."""
 *         if self.__cls is None:             # <<<<<<<<<<<<<<
 *             self.__cls = self.__class__
 *         return self.__cls
*/
  __pyx_t_1 = (__pyx_v_self->_Parser__cls == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4251
 *         """(internal) Access the class object of the current instance `<'type[Parser]'>`."""
 *         if self.__cls is None:
 *             self.__cls = self.__class__             # <<<<<<<<<<<<<<
 *         return self.__cls
 * 
*/
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    __Pyx_GOTREF(__pyx_v_self->_Parser__cls);
    __Pyx_DECREF(__pyx_v_self->_Parser__cls);
    __pyx_v_self->_Parser__cls = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "cytimes/parser.py":4250
 *     def _cls(self) -> object:
 *         """(internal) Access the class object of the current instance `<'type[Parser]'>`."""
 *         if self.__cls is None:             # <<<<<<<<<<<<<<
 *             self.__cls = self.__class__
 *         return self.__cls
*/
  }

  /* "cytimes/parser.py":4252
 *         if self.__cls is None:
 *             self.__cls = self.__class__
 *         return self.__cls             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_Parser__cls);
  __pyx_r = __pyx_v_self->_Parser__cls;
  goto __pyx_L0;

  /* "cytimes/parser.py":4246
 * 
 *     # Internal
 *     @cython.cfunc             # <<<<<<<<<<<<<<
 *     @cython.inline(True)
 *     def _cls(self) -> object:
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cytimes.parser.Parser._cls", __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):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_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_7cytimes_6parser_6Parser_5__reduce_cython__ = {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Parser_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_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_7cytimes_6parser_6Parser_4__reduce_cython__(((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_v_self));

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

static PyObject *__pyx_pf_7cytimes_6parser_6Parser_4__reduce_cython__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  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_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self._Parser__cls, self._cfg, self._ignoretz, self._length, self._pos, self._res, self._token1, self._tokens)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
*/
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->_ignoretz); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyLong_FromSsize_t(__pyx_v_self->_length); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyLong_FromSsize_t(__pyx_v_self->_pos); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(8); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(__pyx_v_self->_Parser__cls);
  __Pyx_GIVEREF(__pyx_v_self->_Parser__cls);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_self->_Parser__cls) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_cfg);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->_cfg);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self->_cfg)) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_1) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_2);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_2) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_GIVEREF(__pyx_t_3);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_t_3) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF((PyObject *)__pyx_v_self->_res);
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->_res);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 5, ((PyObject *)__pyx_v_self->_res)) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_token1);
  __Pyx_GIVEREF(__pyx_v_self->_token1);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 6, __pyx_v_self->_token1) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __Pyx_INCREF(__pyx_v_self->_tokens);
  __Pyx_GIVEREF(__pyx_v_self->_tokens);
  if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 7, __pyx_v_self->_tokens) != (0)) __PYX_ERR(7, 5, __pyx_L1_error);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self._Parser__cls, self._cfg, self._ignoretz, self._length, self._pos, self._res, self._token1, self._tokens)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None and _dict:
 *         state += (_dict,)
*/
  __pyx_t_4 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_mstate_global->__pyx_n_u_dict, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v__dict = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "(tree fragment)":7
 *     state = (self._Parser__cls, self._cfg, self._ignoretz, self._length, self._pos, self._res, self._token1, self._tokens)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
  __pyx_t_6 = (__pyx_v__dict != Py_None);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v__dict); if (unlikely((__pyx_t_6 < 0))) __PYX_ERR(7, 7, __pyx_L1_error)
  __pyx_t_5 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_5) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
*/
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__dict) != (0)) __PYX_ERR(7, 8, __pyx_L1_error);
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None and _dict:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = ('self._Parser__cls is not None or self._cfg is not None or self._res is not None or self._token1 is not None or self._tokens is not None',)
*/
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self._Parser__cls, self._cfg, self._ignoretz, self._length, self._pos, self._res, self._token1, self._tokens)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None and _dict:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
*/
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self._Parser__cls is not None or self._cfg is not None or self._res is not None or self._token1 is not None or self._tokens is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, None), state
*/
  /*else*/ {
    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_mstate_global->__pyx_tuple[1]); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 11, __pyx_L1_error)
    __pyx_v_use_setstate = __pyx_t_5;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self._Parser__cls is not None or self._cfg is not None or self._res is not None or self._token1 is not None or self._tokens is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, None), state
 *     else:
*/
  if (__pyx_v_use_setstate) {

    /* "(tree fragment)":13
 *         use_setstate = ('self._Parser__cls is not None or self._cfg is not None or self._res is not None or self._token1 is not None or self._tokens is not None',)
 *     if use_setstate:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)
*/
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Parser); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_258420170);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_258420170);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_mstate_global->__pyx_int_258420170) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state) != (0)) __PYX_ERR(7, 13, __pyx_L1_error);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = ('self._Parser__cls is not None or self._cfg is not None or self._res is not None or self._token1 is not None or self._tokens is not None',)
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, None), state
 *     else:
*/
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, None), state
 *     else:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Parser__set_state(self, __pyx_state)
*/
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Parser); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_mstate_global->__pyx_int_258420170);
    __Pyx_GIVEREF(__pyx_mstate_global->__pyx_int_258420170);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_mstate_global->__pyx_int_258420170) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __Pyx_GIVEREF(__pyx_t_4);
    if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4) != (0)) __PYX_ERR(7, 15, __pyx_L1_error);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/

  /* 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("cytimes.parser.Parser.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Parser__set_state(self, __pyx_state)
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_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_7cytimes_6parser_6Parser_7__setstate_cython__ = {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Parser_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_6Parser_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
) {
  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(7, 16, __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, 16, __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(7, 16, __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(7, 16, __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, 16, __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(7, 16, __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("cytimes.parser.Parser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_7cytimes_6parser_6Parser_6__setstate_cython__(((struct __pyx_obj_7cytimes_6parser_Parser *)__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_7cytimes_6parser_6Parser_6__setstate_cython__(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_Parser__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
*/
  __pyx_t_1 = __pyx_v___pyx_state;
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_t_1))) __PYX_ERR(7, 17, __pyx_L1_error)
  if (unlikely(__pyx_t_1 == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
    __PYX_ERR(7, 17, __pyx_L1_error)
  }
  __pyx_t_2 = __pyx_f_7cytimes_6parser___pyx_unpickle_Parser__set_state(__pyx_v_self, ((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Parser__set_state(self, __pyx_state)
*/

  /* 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("cytimes.parser.Parser.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":4259
 * 
 * # Parse --------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse(
 *     dtstr: str,
*/

static PyObject *__pyx_pw_7cytimes_6parser_3parse(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 PyDateTime_DateTime *__pyx_f_7cytimes_6parser_parse(PyObject *__pyx_v_dtstr, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse *__pyx_optional_args) {

  /* "cytimes/parser.py":4262
 * def parse(
 *     dtstr: str,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
  PyObject *__pyx_v_default = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4263
 *     dtstr: str,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
  PyObject *__pyx_v_yearfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4264
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
  PyObject *__pyx_v_dayfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4265
 *     yearfirst: object = None,
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
*/
  int __pyx_v_ignoretz = ((int)1);

  /* "cytimes/parser.py":4266
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *     cfg: Configs = None,
 *     dtclass: object = None,
*/
  int __pyx_v_isoformat = ((int)1);

  /* "cytimes/parser.py":4267
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None);

  /* "cytimes/parser.py":4268
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_6Parser_parse __pyx_t_3;
  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("parse", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default = __pyx_optional_args->__pyx_default;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_yearfirst = __pyx_optional_args->yearfirst;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dayfirst = __pyx_optional_args->dayfirst;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_ignoretz = __pyx_optional_args->ignoretz;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_isoformat = __pyx_optional_args->isoformat;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_cfg = __pyx_optional_args->cfg;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_dtclass = __pyx_optional_args->dtclass;
                }
              }
            }
          }
        }
      }
    }
  }

  /* "cytimes/parser.py":4336
 *     """
 *     # fmt: off
 *     if cfg is None:             # <<<<<<<<<<<<<<
 *         return _DEFAULT_PARSER.parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)
 *     else:
*/
  __pyx_t_1 = (((PyObject *)__pyx_v_cfg) == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4337
 *     # fmt: off
 *     if cfg is None:
 *         return _DEFAULT_PARSER.parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)             # <<<<<<<<<<<<<<
 *     else:
 *         return Parser(cfg).parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_3.__pyx_n = 6;
    __pyx_t_3.__pyx_default = __pyx_v_default;
    __pyx_t_3.yearfirst = __pyx_v_yearfirst;
    __pyx_t_3.dayfirst = __pyx_v_dayfirst;
    __pyx_t_3.ignoretz = __pyx_v_ignoretz;
    __pyx_t_3.isoformat = __pyx_v_isoformat;
    __pyx_t_3.dtclass = __pyx_v_dtclass;
    __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_7cytimes_6parser_Parser *)__pyx_v_7cytimes_6parser__DEFAULT_PARSER->__pyx_vtab)->parse(__pyx_v_7cytimes_6parser__DEFAULT_PARSER, __pyx_v_dtstr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_2);
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4336
 *     """
 *     # fmt: off
 *     if cfg is None:             # <<<<<<<<<<<<<<
 *         return _DEFAULT_PARSER.parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)
 *     else:
*/
  }

  /* "cytimes/parser.py":4339
 *         return _DEFAULT_PARSER.parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)
 *     else:
 *         return Parser(cfg).parse(dtstr, default, yearfirst, dayfirst, ignoretz, isoformat, dtclass)             # <<<<<<<<<<<<<<
 *     # fmt: on
 * 
*/
  /*else*/ {
    __Pyx_XDECREF((PyObject *)__pyx_r);
    __pyx_t_4 = NULL;
    __pyx_t_5 = 1;
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_4, ((PyObject *)__pyx_v_cfg)};
      __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser, __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_2)) __PYX_ERR(0, 4339, __pyx_L1_error)
      __Pyx_GOTREF((PyObject *)__pyx_t_2);
    }
    __pyx_t_3.__pyx_n = 6;
    __pyx_t_3.__pyx_default = __pyx_v_default;
    __pyx_t_3.yearfirst = __pyx_v_yearfirst;
    __pyx_t_3.dayfirst = __pyx_v_dayfirst;
    __pyx_t_3.ignoretz = __pyx_v_ignoretz;
    __pyx_t_3.isoformat = __pyx_v_isoformat;
    __pyx_t_3.dtclass = __pyx_v_dtclass;
    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_7cytimes_6parser_Parser *)((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_t_2)->__pyx_vtab)->parse(((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_t_2), __pyx_v_dtstr, 0, &__pyx_t_3)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4339, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF((PyObject *)__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_4);
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }

  /* "cytimes/parser.py":4259
 * 
 * # Parse --------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse(
 *     dtstr: str,
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cytimes.parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_3parse(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_7cytimes_6parser_2parse, "Parse a date/time string into a datetime `<'datetime.datetime'>`.\n\n    This is a convenience wrapper around `Parser.parse()`.\n        - When `cfg` is `None` it uses a module-level default parser for speed.\n        - Otherwise it constructs a temporary `Parser(cfg)`.\n\n    ## Parsing Strategies\n    1) `ISO fast-path` (when `isoformat=True`): attempts an ISO 8601 calendar/ordinal/week\n        date plus optional time, fractional seconds, and timezone. If an extra tail remains\n        (e.g., AM/PM, weekday, timezone tail), a lightweight ISO-extra pass handles it.\n    2) `Heuristic token path` (fallback or when `isoformat=False`): tokenizes the string\n        and scans left\342\206\222right, using specialized handlers for numeric blocks, month/weekday\n        names, AM/PM, timezone names, and timezone offsets.\n\n    After parsing, ambiguous Y/M/D fields are resolved using `yearfirst`/`dayfirst` (or the\n    configured defaults when they are `None`). Finally, a datetime is built using parsed\n    fields plus `default` for any missing calendar components.\n\n    :param dtstr `<'str'>`: The input date/time string.\n    :param default `<'datetime/date/None'>`: Fallback source for missing Y/M/D. Defaults to `None`.\n        If `None` and required fields are missing, raises an error.\n    :param yearfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D value as year. Defaults to `None`.\n        If 'None', uses `cfg.yearfirst` if 'cfg' is specified; otherwise. Defaults to `True`.\n    :param dayfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D values as day. Defaults to `None`.\n        If 'None', uses `cfg.dayfirst` if 'cfg' is specified; otherwise. Defaults to `False`.\n    :param ignoretz `<'bool'>`: If `True`, ignore any timezone information and return a naive datetime. Defaults to `True`.\n        When timezone info is not needed, setting to `True` can improve performance.\n    :param isoformat `<'bool'>`: If `True`, attempt ISO parsing first (automatica""lly falls back to token parsing on failure).\n        Otherwise always use token parsing. Defaults to `True`. For most common datetime strings,\n        ISO parsing (when matched even partially) is faster.\n    :param cfg `<'Configs/None'>`: The Parser configuration. Defaults to `None`.\n        If `None`, uses the module's default `Configs`.\n    :param dtclass `<'type[datetime.datetime]/None'>`: Optional custom datetime class. Defaults to `None`.\n        If `None` uses python's built-in `datetime.datetime` as the constructor.\n    :returns `<'datetime.datetime'>`: The parsed datetime (or subclass if 'dtclass' is specified).\n    :raises `<'ParserFailedError'>`: If nothing extractable is found (or ISO parsing\n        fails and token scanning yields no fields).\n    :raises `<'ParserBuildError'>`: If fields cannot be assembled into a datetime\n        (e.g., invalid field combination, unsupported custom class).\n\n    ## Field Construction\n    - `Y/M/D`: use parsed values; if missing, copy from `default` (if provided), otherwise raise.\n        If `day > 28`, it is clamped to the month's maximum.\n    - `Weekday`: if a weekday was parsed and does not match `(Y, M, D)`, the date is shifted by\n        the difference so the resulting weekday matches the requested one (within the same week as\n        the parsed date).\n    - `Time`: unset H/M/S/us default to `0`. AM/PM is applied when present.\n    - `Timezone`:\n        * If `ignoretz=True`, any parsed timezone info is ignored and a naive datetime\n            (`tzinfo=None`) is returned.\n        * Otherwise, a timezone-aware datetime is returned if a timezone name/offset was parsed:\n            UTC for offset `0`, or a fixed-offset timezone for non-zero offsets.\n\n    ## Ambiguous Y/M/D\n    Both `yearfirst` and `dayfirst` control how ambiguous digit tokens are interpreted;\n    `yearfirst` has higher priority. When all three are ambiguous (e.g., `01/05/09`):\n    - `yearfirst=False & dayfirst=False` \342\206""\222 `M/D/Y`  \342\206\222 `2009-01-05`\n    - `yearfirst=False & dayfirst=True`  \342\206\222 `D/M/Y`  \342\206\222 `2009-05-01`\n    - `yearfirst=True  & dayfirst=False` \342\206\222 `Y/M/D`  \342\206\222 `2001-05-09`\n    - `yearfirst=True  & dayfirst=True`  \342\206\222 `Y/D/M`  \342\206\222 `2001-09-05`\n\n    When the year is already known (e.g., `32/01/05`), `dayfirst` alone decides between `Y/M/D`\n    vs `Y/D/M`. When only one value is ambiguous, the parser picks the only consistent\n    interpretation and ignores the flags.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_3parse = {"parse", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_3parse, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_2parse};
static PyObject *__pyx_pw_7cytimes_6parser_3parse(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_dtstr = 0;
  PyObject *__pyx_v_default = 0;
  PyObject *__pyx_v_yearfirst = 0;
  PyObject *__pyx_v_dayfirst = 0;
  int __pyx_v_ignoretz;
  int __pyx_v_isoformat;
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 0;
  PyObject *__pyx_v_dtclass = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[8] = {0,0,0,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("parse (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_dtstr,&__pyx_mstate_global->__pyx_n_u_default,&__pyx_mstate_global->__pyx_n_u_yearfirst,&__pyx_mstate_global->__pyx_n_u_dayfirst,&__pyx_mstate_global->__pyx_n_u_ignoretz,&__pyx_mstate_global->__pyx_n_u_isoformat,&__pyx_mstate_global->__pyx_n_u_cfg,&__pyx_mstate_global->__pyx_n_u_dtclass,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, 4259, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 4259, __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, 4259, __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, 4259, __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, 4259, __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, 4259, __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, "parse", 0) < (0)) __PYX_ERR(0, 4259, __pyx_L3_error)

      /* "cytimes/parser.py":4262
 * def parse(
 *     dtstr: str,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4263
 *     dtstr: str,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4264
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4267
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));

      /* "cytimes/parser.py":4268
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 8, i); __PYX_ERR(0, 4259, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 4259, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 4259, __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, 4259, __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, 4259, __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, 4259, __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, 4259, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "cytimes/parser.py":4262
 * def parse(
 *     dtstr: str,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4263
 *     dtstr: str,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4264
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4267
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));

      /* "cytimes/parser.py":4268
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a date/time string into a datetime `<'datetime.datetime'>`.
*/
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_dtstr = ((PyObject*)values[0]);
    __pyx_v_default = values[1];
    __pyx_v_yearfirst = values[2];
    __pyx_v_dayfirst = values[3];
    if (values[4]) {
      __pyx_v_ignoretz = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_ignoretz == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4265, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4265
 *     yearfirst: object = None,
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
*/
      __pyx_v_ignoretz = ((int)1);
    }
    if (values[5]) {
      __pyx_v_isoformat = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_isoformat == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4266, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4266
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *     cfg: Configs = None,
 *     dtclass: object = None,
*/
      __pyx_v_isoformat = ((int)1);
    }
    __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)values[6]);
    __pyx_v_dtclass = values[7];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse", 0, 1, 8, __pyx_nargs); __PYX_ERR(0, 4259, __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("cytimes.parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dtstr), (&PyUnicode_Type), 0, "dtstr", 2))) __PYX_ERR(0, 4261, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cfg), __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, 1, "cfg", 0))) __PYX_ERR(0, 4267, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_2parse(__pyx_self, __pyx_v_dtstr, __pyx_v_default, __pyx_v_yearfirst, __pyx_v_dayfirst, __pyx_v_ignoretz, __pyx_v_isoformat, __pyx_v_cfg, __pyx_v_dtclass);

  /* "cytimes/parser.py":4259
 * 
 * # Parse --------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse(
 *     dtstr: 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_7cytimes_6parser_2parse(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtstr, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, PyObject *__pyx_v_dtclass) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_parse __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 7;
  __pyx_t_2.__pyx_default = __pyx_v_default;
  __pyx_t_2.yearfirst = __pyx_v_yearfirst;
  __pyx_t_2.dayfirst = __pyx_v_dayfirst;
  __pyx_t_2.ignoretz = __pyx_v_ignoretz;
  __pyx_t_2.isoformat = __pyx_v_isoformat;
  __pyx_t_2.cfg = __pyx_v_cfg;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_6parser_parse(__pyx_v_dtstr, 1, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.parse", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":4343
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse_obj(
 *     dtobj: object,
*/

static PyObject *__pyx_pw_7cytimes_6parser_5parse_obj(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 PyDateTime_DateTime *__pyx_f_7cytimes_6parser_parse_obj(PyObject *__pyx_v_dtobj, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_obj *__pyx_optional_args) {

  /* "cytimes/parser.py":4346
 * def parse_obj(
 *     dtobj: object,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
  PyObject *__pyx_v_default = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4347
 *     dtobj: object,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
  PyObject *__pyx_v_yearfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4348
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
  PyObject *__pyx_v_dayfirst = ((PyObject *)Py_None);

  /* "cytimes/parser.py":4349
 *     yearfirst: object = None,
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
*/
  int __pyx_v_ignoretz = ((int)1);

  /* "cytimes/parser.py":4350
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *     cfg: Configs = None,
 *     dtclass: object = None,
*/
  int __pyx_v_isoformat = ((int)1);

  /* "cytimes/parser.py":4351
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None);

  /* "cytimes/parser.py":4352
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a datetime-like object into a datetime `<'datetime.datetime'>`.
*/
  PyObject *__pyx_v_dtclass = ((PyObject *)Py_None);
  PyObject *__pyx_v_err = NULL;
  PyDateTime_DateTime *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_parse __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_dt __pyx_t_8;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_date __pyx_t_9;
  int __pyx_t_10;
  double __pyx_t_11;
  struct __pyx_opt_args_7cytimes_5utils_dt_fr_sec __pyx_t_12;
  struct __pyx_opt_args_7cytimes_5utils_dt64_to_dt __pyx_t_13;
  int __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[5];
  PyObject *__pyx_t_20 = NULL;
  struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error __pyx_t_21;
  int __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("parse_obj", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_default = __pyx_optional_args->__pyx_default;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_yearfirst = __pyx_optional_args->yearfirst;
        if (__pyx_optional_args->__pyx_n > 2) {
          __pyx_v_dayfirst = __pyx_optional_args->dayfirst;
          if (__pyx_optional_args->__pyx_n > 3) {
            __pyx_v_ignoretz = __pyx_optional_args->ignoretz;
            if (__pyx_optional_args->__pyx_n > 4) {
              __pyx_v_isoformat = __pyx_optional_args->isoformat;
              if (__pyx_optional_args->__pyx_n > 5) {
                __pyx_v_cfg = __pyx_optional_args->cfg;
                if (__pyx_optional_args->__pyx_n > 6) {
                  __pyx_v_dtclass = __pyx_optional_args->dtclass;
                }
              }
            }
          }
        }
      }
    }
  }
  __Pyx_INCREF(__pyx_v_dtobj);

  /* "cytimes/parser.py":4393
 *     """
 *     # . datetime string
 *     if isinstance(dtobj, str):             # <<<<<<<<<<<<<<
 *         if not is_str_exact(dtobj):
 *             dtobj = str(dtobj)
*/
  __pyx_t_1 = PyUnicode_Check(__pyx_v_dtobj); 
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4394
 *     # . datetime string
 *     if isinstance(dtobj, str):
 *         if not is_str_exact(dtobj):             # <<<<<<<<<<<<<<
 *             dtobj = str(dtobj)
 *         return parse(
*/
    __pyx_t_1 = (!PyUnicode_CheckExact(__pyx_v_dtobj));
    if (__pyx_t_1) {

      /* "cytimes/parser.py":4395
 *     if isinstance(dtobj, str):
 *         if not is_str_exact(dtobj):
 *             dtobj = str(dtobj)             # <<<<<<<<<<<<<<
 *         return parse(
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
*/
      __pyx_t_2 = __Pyx_PyObject_Unicode(__pyx_v_dtobj); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4395, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF_SET(__pyx_v_dtobj, __pyx_t_2);
      __pyx_t_2 = 0;

      /* "cytimes/parser.py":4394
 *     # . datetime string
 *     if isinstance(dtobj, str):
 *         if not is_str_exact(dtobj):             # <<<<<<<<<<<<<<
 *             dtobj = str(dtobj)
 *         return parse(
*/
    }

    /* "cytimes/parser.py":4396
 *         if not is_str_exact(dtobj):
 *             dtobj = str(dtobj)
 *         return parse(             # <<<<<<<<<<<<<<
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
 *         )
*/
    __Pyx_XDECREF((PyObject *)__pyx_r);

    /* "cytimes/parser.py":4397
 *             dtobj = str(dtobj)
 *         return parse(
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass             # <<<<<<<<<<<<<<
 *         )
 *     try:
*/
    __pyx_t_2 = __pyx_v_dtobj;
    __Pyx_INCREF(__pyx_t_2);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_2))) __PYX_ERR(0, 4397, __pyx_L1_error)

    /* "cytimes/parser.py":4396
 *         if not is_str_exact(dtobj):
 *             dtobj = str(dtobj)
 *         return parse(             # <<<<<<<<<<<<<<
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
 *         )
*/
    __pyx_t_4.__pyx_n = 7;
    __pyx_t_4.__pyx_default = __pyx_v_default;
    __pyx_t_4.yearfirst = __pyx_v_yearfirst;
    __pyx_t_4.dayfirst = __pyx_v_dayfirst;
    __pyx_t_4.ignoretz = __pyx_v_ignoretz;
    __pyx_t_4.isoformat = __pyx_v_isoformat;
    __pyx_t_4.cfg = __pyx_v_cfg;
    __pyx_t_4.dtclass = __pyx_v_dtclass;
    __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_6parser_parse(((PyObject*)__pyx_t_2), 0, &__pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4396, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "cytimes/parser.py":4393
 *     """
 *     # . datetime string
 *     if isinstance(dtobj, str):             # <<<<<<<<<<<<<<
 *         if not is_str_exact(dtobj):
 *             dtobj = str(dtobj)
*/
  }

  /* "cytimes/parser.py":4399
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
 *         )
 *     try:             # <<<<<<<<<<<<<<
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):
*/
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_7);
    /*try:*/ {

      /* "cytimes/parser.py":4401
 *     try:
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_dt(dtobj, dtclass)
 *         # . datetime.date
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt(__pyx_v_dtobj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4401, __pyx_L5_error)
      if (__pyx_t_1) {

        /* "cytimes/parser.py":4402
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):
 *             return utils.dt_fr_dt(dtobj, dtclass)             # <<<<<<<<<<<<<<
 *         # . datetime.date
 *         if utils.is_date(dtobj):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        if (!(likely(((__pyx_v_dtobj) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dtobj, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_datetime))))) __PYX_ERR(0, 4402, __pyx_L5_error)
        __pyx_t_8.__pyx_n = 1;
        __pyx_t_8.dtclass = __pyx_v_dtclass;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_dt(((PyDateTime_DateTime *)__pyx_v_dtobj), &__pyx_t_8)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4402, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L9_try_return;

        /* "cytimes/parser.py":4401
 *     try:
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_dt(dtobj, dtclass)
 *         # . datetime.date
*/
      }

      /* "cytimes/parser.py":4404
 *             return utils.dt_fr_dt(dtobj, dtclass)
 *         # . datetime.date
 *         if utils.is_date(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_date(dtobj, None, dtclass)
 *         # . numeric
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_date(__pyx_v_dtobj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4404, __pyx_L5_error)
      if (__pyx_t_1) {

        /* "cytimes/parser.py":4405
 *         # . datetime.date
 *         if utils.is_date(dtobj):
 *             return utils.dt_fr_date(dtobj, None, dtclass)             # <<<<<<<<<<<<<<
 *         # . numeric
 *         if isinstance(dtobj, (int, float)):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        if (!(likely(((__pyx_v_dtobj) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dtobj, __pyx_mstate_global->__pyx_ptype_7cpython_8datetime_date))))) __PYX_ERR(0, 4405, __pyx_L5_error)
        __pyx_t_9.__pyx_n = 2;
        __pyx_t_9.tzinfo = Py_None;
        __pyx_t_9.dtclass = __pyx_v_dtclass;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_date(((PyDateTime_Date *)__pyx_v_dtobj), &__pyx_t_9)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4405, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L9_try_return;

        /* "cytimes/parser.py":4404
 *             return utils.dt_fr_dt(dtobj, dtclass)
 *         # . datetime.date
 *         if utils.is_date(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_date(dtobj, None, dtclass)
 *         # . numeric
*/
      }

      /* "cytimes/parser.py":4407
 *             return utils.dt_fr_date(dtobj, None, dtclass)
 *         # . numeric
 *         if isinstance(dtobj, (int, float)):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_sec(dtobj, None, dtclass)
 *         # . np.datetime64
*/
      __pyx_t_10 = PyLong_Check(__pyx_v_dtobj); 
      if (!__pyx_t_10) {
      } else {
        __pyx_t_1 = __pyx_t_10;
        goto __pyx_L14_bool_binop_done;
      }
      __pyx_t_10 = PyFloat_Check(__pyx_v_dtobj); 
      __pyx_t_1 = __pyx_t_10;
      __pyx_L14_bool_binop_done:;
      if (__pyx_t_1) {

        /* "cytimes/parser.py":4408
 *         # . numeric
 *         if isinstance(dtobj, (int, float)):
 *             return utils.dt_fr_sec(dtobj, None, dtclass)             # <<<<<<<<<<<<<<
 *         # . np.datetime64
 *         if utils.is_dt64(dtobj):
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_11 = __Pyx_PyFloat_AsDouble(__pyx_v_dtobj); if (unlikely((__pyx_t_11 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 4408, __pyx_L5_error)
        __pyx_t_12.__pyx_n = 2;
        __pyx_t_12.tzinfo = Py_None;
        __pyx_t_12.dtclass = __pyx_v_dtclass;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt_fr_sec(__pyx_t_11, &__pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4408, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L9_try_return;

        /* "cytimes/parser.py":4407
 *             return utils.dt_fr_date(dtobj, None, dtclass)
 *         # . numeric
 *         if isinstance(dtobj, (int, float)):             # <<<<<<<<<<<<<<
 *             return utils.dt_fr_sec(dtobj, None, dtclass)
 *         # . np.datetime64
*/
      }

      /* "cytimes/parser.py":4410
 *             return utils.dt_fr_sec(dtobj, None, dtclass)
 *         # . np.datetime64
 *         if utils.is_dt64(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt64_to_dt(dtobj, None, dtclass)
 *     except Exception as err:
*/
      __pyx_t_1 = __pyx_f_7cytimes_5utils_is_dt64(__pyx_v_dtobj); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 4410, __pyx_L5_error)
      if (__pyx_t_1) {

        /* "cytimes/parser.py":4411
 *         # . np.datetime64
 *         if utils.is_dt64(dtobj):
 *             return utils.dt64_to_dt(dtobj, None, dtclass)             # <<<<<<<<<<<<<<
 *     except Exception as err:
 *         errors.raise_parser_failed_error(
*/
        __Pyx_XDECREF((PyObject *)__pyx_r);
        __pyx_t_13.__pyx_n = 2;
        __pyx_t_13.tzinfo = Py_None;
        __pyx_t_13.dtclass = __pyx_v_dtclass;
        __pyx_t_3 = ((PyObject *)__pyx_f_7cytimes_5utils_dt64_to_dt(__pyx_v_dtobj, &__pyx_t_13)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4411, __pyx_L5_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = ((PyDateTime_DateTime *)__pyx_t_3);
        __pyx_t_3 = 0;
        goto __pyx_L9_try_return;

        /* "cytimes/parser.py":4410
 *             return utils.dt_fr_sec(dtobj, None, dtclass)
 *         # . np.datetime64
 *         if utils.is_dt64(dtobj):             # <<<<<<<<<<<<<<
 *             return utils.dt64_to_dt(dtobj, None, dtclass)
 *     except Exception as err:
*/
      }

      /* "cytimes/parser.py":4399
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
 *         )
 *     try:             # <<<<<<<<<<<<<<
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):
*/
    }
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "cytimes/parser.py":4412
 *         if utils.is_dt64(dtobj):
 *             return utils.dt64_to_dt(dtobj, None, dtclass)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         errors.raise_parser_failed_error(
 *             _DEFAULT_PARSER.__cls,
*/
    __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(((PyTypeObject*)PyExc_Exception))));
    if (__pyx_t_14) {
      __Pyx_AddTraceback("cytimes.parser.parse_obj", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_2, &__pyx_t_15) < 0) __PYX_ERR(0, 4412, __pyx_L7_except_error)
      __Pyx_XGOTREF(__pyx_t_3);
      __Pyx_XGOTREF(__pyx_t_2);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_2);
      __pyx_v_err = __pyx_t_2;
      /*try:*/ {

        /* "cytimes/parser.py":4414
 *     except Exception as err:
 *         errors.raise_parser_failed_error(
 *             _DEFAULT_PARSER.__cls,             # <<<<<<<<<<<<<<
 *             "Failed to parse '%s' %s." % (dtobj, type(dtobj)),
 *             err,
*/
        __pyx_t_16 = __pyx_v_7cytimes_6parser__DEFAULT_PARSER->_Parser__cls;
        __Pyx_INCREF(__pyx_t_16);

        /* "cytimes/parser.py":4415
 *         errors.raise_parser_failed_error(
 *             _DEFAULT_PARSER.__cls,
 *             "Failed to parse '%s' %s." % (dtobj, type(dtobj)),             # <<<<<<<<<<<<<<
 *             err,
 *         )
*/
        __pyx_t_17 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_dtobj), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 4415, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_17);
        __pyx_t_18 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_dtobj))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 4415, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_18);
        __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Failed_to_parse;
        __pyx_t_19[1] = __pyx_t_17;
        __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u__9;
        __pyx_t_19[3] = __pyx_t_18;
        __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u__2;
        __pyx_t_20 = __Pyx_PyUnicode_Join(__pyx_t_19, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_17) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_18) + 1, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_17) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_18));
        if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4415, __pyx_L22_error)
        __Pyx_GOTREF(__pyx_t_20);
        __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
        __Pyx_DECREF(__pyx_t_18); __pyx_t_18 = 0;

        /* "cytimes/parser.py":4413
 *             return utils.dt64_to_dt(dtobj, None, dtclass)
 *     except Exception as err:
 *         errors.raise_parser_failed_error(             # <<<<<<<<<<<<<<
 *             _DEFAULT_PARSER.__cls,
 *             "Failed to parse '%s' %s." % (dtobj, type(dtobj)),
*/
        __pyx_t_21.__pyx_n = 3;
        __pyx_t_21.cls = __pyx_t_16;
        __pyx_t_21.error_msg = ((PyObject*)__pyx_t_20);
        __pyx_t_21.tb_exc = __pyx_v_err;
        __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_21); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4413, __pyx_L22_error)
        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
        __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;
      }

      /* "cytimes/parser.py":4412
 *         if utils.is_dt64(dtobj):
 *             return utils.dt64_to_dt(dtobj, None, dtclass)
 *     except Exception as err:             # <<<<<<<<<<<<<<
 *         errors.raise_parser_failed_error(
 *             _DEFAULT_PARSER.__cls,
*/
      /*finally:*/ {
        /*normal exit:*/{
          __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          goto __pyx_L23;
        }
        __pyx_L22_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_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_20); __pyx_t_20 = 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_14 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
          {
            __Pyx_DECREF(__pyx_v_err); __pyx_v_err = 0;
          }
          __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_14; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_23;
          goto __pyx_L7_except_error;
        }
        __pyx_L23:;
      }
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L6_exception_handled;
    }
    goto __pyx_L7_except_error;

    /* "cytimes/parser.py":4399
 *             dtobj, default, yearfirst, dayfirst, ignoretz, isoformat, cfg, dtclass
 *         )
 *     try:             # <<<<<<<<<<<<<<
 *         # . datetime.datetime
 *         if utils.is_dt(dtobj):
*/
    __pyx_L7_except_error:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L1_error;
    __pyx_L9_try_return:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    goto __pyx_L0;
    __pyx_L6_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
    __pyx_L10_try_end:;
  }

  /* "cytimes/parser.py":4421
 *     # . invalid
 *     errors.raise_parser_failed_error(
 *         _DEFAULT_PARSER.__cls,             # <<<<<<<<<<<<<<
 *         "Failed to parse '%s' %s.\nUnsupported data type." % (dtobj, type(dtobj)),
 *     )
*/
  __pyx_t_15 = __pyx_v_7cytimes_6parser__DEFAULT_PARSER->_Parser__cls;
  __Pyx_INCREF(__pyx_t_15);

  /* "cytimes/parser.py":4422
 *     errors.raise_parser_failed_error(
 *         _DEFAULT_PARSER.__cls,
 *         "Failed to parse '%s' %s.\nUnsupported data type." % (dtobj, type(dtobj)),             # <<<<<<<<<<<<<<
 *     )
 * 
*/
  __pyx_t_2 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_dtobj), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_dtobj))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_19[0] = __pyx_mstate_global->__pyx_kp_u_Failed_to_parse;
  __pyx_t_19[1] = __pyx_t_2;
  __pyx_t_19[2] = __pyx_mstate_global->__pyx_kp_u__9;
  __pyx_t_19[3] = __pyx_t_3;
  __pyx_t_19[4] = __pyx_mstate_global->__pyx_kp_u_Unsupported_data_type;
  __pyx_t_20 = __Pyx_PyUnicode_Join(__pyx_t_19, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3) + 24, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3));
  if (unlikely(!__pyx_t_20)) __PYX_ERR(0, 4422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_20);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "cytimes/parser.py":4420
 * 
 *     # . invalid
 *     errors.raise_parser_failed_error(             # <<<<<<<<<<<<<<
 *         _DEFAULT_PARSER.__cls,
 *         "Failed to parse '%s' %s.\nUnsupported data type." % (dtobj, type(dtobj)),
*/
  __pyx_t_21.__pyx_n = 2;
  __pyx_t_21.cls = __pyx_t_15;
  __pyx_t_21.error_msg = ((PyObject*)__pyx_t_20);
  __pyx_f_7cytimes_6errors_raise_parser_failed_error(0, &__pyx_t_21); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4420, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_20); __pyx_t_20 = 0;

  /* "cytimes/parser.py":4343
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse_obj(
 *     dtobj: object,
*/

  /* function exit code */
  __pyx_r = ((PyDateTime_DateTime *)Py_None); __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_16);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_XDECREF(__pyx_t_20);
  __Pyx_AddTraceback("cytimes.parser.parse_obj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_err);
  __Pyx_XDECREF(__pyx_v_dtobj);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_5parse_obj(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_7cytimes_6parser_4parse_obj, "Parse a datetime-like object into a datetime `<'datetime.datetime'>`.\n\n    :param dtobj `<'object'>`: A datetime-like object, supports:\n\n        - `<'str'>`                 \342\206\222 parsed via function `parse()`, honoring `default`, `yearfirst`, `dayfirst`,\n                                      `ignoretz`, `isoformat`, `cfg`, and `dtclass`.\n        - `<'datetime.datetime'>`   \342\206\222 returns as-is or re-create using optional `dtclass`.\n        - `<'datetime.date'>`       \342\206\222 converts to timezone-naive datetime with the same date fields, optionally using `dtclass`.\n        - `<'int/float'>`           \342\206\222 interprets as `seconds since Unix epoch` and converts to timezone-naive datetime\n                                      (fractional seconds \342\206\222 microseconds).\n        - `<'np.datetime64'>`       \342\206\222 converts to timezone-naive datetime; resolution finer than microseconds is truncated.\n\n    :param dtclass `<'type[datetime.datetime]/None'>`: Optional custom datetime class. Defaults to `None`.\n        If `None` uses python's built-in `datetime.datetime` as the constructor.\n\n    ## Parameters (Only for String Input)\n\n    :param default `<'datetime/date/None'>`: Fallback source for missing Y/M/D. Defaults to `None`.\n        If `None` and required fields are missing, raises an error.\n    :param yearfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D value as year. Defaults to `None`.\n        If 'None', uses `cfg.yearfirst` if 'cfg' is specified; otherwise. Defaults to `True`.\n    :param dayfirst `<'bool/None'>`: Parse the first ambiguous Y/M/D values as day. Defaults to `None`.\n        If 'None', uses `cfg.dayfirst` if 'cfg' is specified; otherwise. Defaults to `False`.\n    :param ignoretz `<'bool'>`: If `True`, ignore any timezone information and return a naive datetime. Defaults to `True`.\n        When timezone info is not needed, setting to `True` can improve performance.\n    :param isoformat `<'bool""'>`: If `True`, attempt ISO parsing first (automatically falls back to token parsing on failure).\n        Otherwise always use token parsing. Defaults to `True`. For most common datetime strings,\n        ISO parsing (when matched even partially) is faster.\n    :param cfg `<'Configs/None'>`: The Parser configuration. Defaults to `None`.\n        If `None`, uses the module's default `Configs`.\n\n    :returns `<'datetime.datetime'>`: The parsed/converted datetime (or subclass if 'dtclass' is specified).\n    :raises `<'ParserFailedError'>`: On unsupported input types or any conversion/parsing failed.\n    :raises `<'ParserBuildError'>`: If a string parse succeeds but fields cannot be assembled (string input).\n\n    ## Notes\n    - Non-string inputs do `NOT` use `default`, `yearfirst`, `dayfirst`, `ignoretz`, `isoformat` or `cfg`.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_5parse_obj = {"parse_obj", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_5parse_obj, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_4parse_obj};
static PyObject *__pyx_pw_7cytimes_6parser_5parse_obj(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_dtobj = 0;
  PyObject *__pyx_v_default = 0;
  PyObject *__pyx_v_yearfirst = 0;
  PyObject *__pyx_v_dayfirst = 0;
  int __pyx_v_ignoretz;
  int __pyx_v_isoformat;
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 0;
  PyObject *__pyx_v_dtclass = 0;
  #if !CYTHON_METH_FASTCALL
  CYTHON_UNUSED Py_ssize_t __pyx_nargs;
  #endif
  CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
  PyObject* values[8] = {0,0,0,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("parse_obj (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_dtobj,&__pyx_mstate_global->__pyx_n_u_default,&__pyx_mstate_global->__pyx_n_u_yearfirst,&__pyx_mstate_global->__pyx_n_u_dayfirst,&__pyx_mstate_global->__pyx_n_u_ignoretz,&__pyx_mstate_global->__pyx_n_u_isoformat,&__pyx_mstate_global->__pyx_n_u_cfg,&__pyx_mstate_global->__pyx_n_u_dtclass,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, 4343, __pyx_L3_error)
    if (__pyx_kwds_len > 0) {
      switch (__pyx_nargs) {
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 4343, __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, 4343, __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, 4343, __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, 4343, __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, 4343, __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, "parse_obj", 0) < (0)) __PYX_ERR(0, 4343, __pyx_L3_error)

      /* "cytimes/parser.py":4346
 * def parse_obj(
 *     dtobj: object,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4347
 *     dtobj: object,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4348
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4351
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));

      /* "cytimes/parser.py":4352
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a datetime-like object into a datetime `<'datetime.datetime'>`.
*/
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse_obj", 0, 1, 8, i); __PYX_ERR(0, 4343, __pyx_L3_error) }
      }
    } else {
      switch (__pyx_nargs) {
        case  8:
        values[7] = __Pyx_ArgRef_FASTCALL(__pyx_args, 7);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[7])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  7:
        values[6] = __Pyx_ArgRef_FASTCALL(__pyx_args, 6);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[6])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  6:
        values[5] = __Pyx_ArgRef_FASTCALL(__pyx_args, 5);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[5])) __PYX_ERR(0, 4343, __pyx_L3_error)
        CYTHON_FALLTHROUGH;
        case  5:
        values[4] = __Pyx_ArgRef_FASTCALL(__pyx_args, 4);
        if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[4])) __PYX_ERR(0, 4343, __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, 4343, __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, 4343, __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, 4343, __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, 4343, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }

      /* "cytimes/parser.py":4346
 * def parse_obj(
 *     dtobj: object,
 *     default: object = None,             # <<<<<<<<<<<<<<
 *     yearfirst: object = None,
 *     dayfirst: object = None,
*/
      if (!values[1]) values[1] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4347
 *     dtobj: object,
 *     default: object = None,
 *     yearfirst: object = None,             # <<<<<<<<<<<<<<
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
*/
      if (!values[2]) values[2] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4348
 *     default: object = None,
 *     yearfirst: object = None,
 *     dayfirst: object = None,             # <<<<<<<<<<<<<<
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
*/
      if (!values[3]) values[3] = __Pyx_NewRef(((PyObject *)Py_None));

      /* "cytimes/parser.py":4351
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     dtclass: object = None,
 * ) -> datetime.datetime:
*/
      if (!values[6]) values[6] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));

      /* "cytimes/parser.py":4352
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
 *     dtclass: object = None,             # <<<<<<<<<<<<<<
 * ) -> datetime.datetime:
 *     """Parse a datetime-like object into a datetime `<'datetime.datetime'>`.
*/
      if (!values[7]) values[7] = __Pyx_NewRef(((PyObject *)Py_None));
    }
    __pyx_v_dtobj = values[0];
    __pyx_v_default = values[1];
    __pyx_v_yearfirst = values[2];
    __pyx_v_dayfirst = values[3];
    if (values[4]) {
      __pyx_v_ignoretz = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_ignoretz == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4349, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4349
 *     yearfirst: object = None,
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,             # <<<<<<<<<<<<<<
 *     isoformat: cython.bint = True,
 *     cfg: Configs = None,
*/
      __pyx_v_ignoretz = ((int)1);
    }
    if (values[5]) {
      __pyx_v_isoformat = __Pyx_PyObject_IsTrue(values[5]); if (unlikely((__pyx_v_isoformat == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4350, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4350
 *     dayfirst: object = None,
 *     ignoretz: cython.bint = True,
 *     isoformat: cython.bint = True,             # <<<<<<<<<<<<<<
 *     cfg: Configs = None,
 *     dtclass: object = None,
*/
      __pyx_v_isoformat = ((int)1);
    }
    __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)values[6]);
    __pyx_v_dtclass = values[7];
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_obj", 0, 1, 8, __pyx_nargs); __PYX_ERR(0, 4343, __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("cytimes.parser.parse_obj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cfg), __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, 1, "cfg", 0))) __PYX_ERR(0, 4351, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_4parse_obj(__pyx_self, __pyx_v_dtobj, __pyx_v_default, __pyx_v_yearfirst, __pyx_v_dayfirst, __pyx_v_ignoretz, __pyx_v_isoformat, __pyx_v_cfg, __pyx_v_dtclass);

  /* "cytimes/parser.py":4343
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse_obj(
 *     dtobj: object,
*/

  /* 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_7cytimes_6parser_4parse_obj(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_dtobj, PyObject *__pyx_v_default, PyObject *__pyx_v_yearfirst, PyObject *__pyx_v_dayfirst, int __pyx_v_ignoretz, int __pyx_v_isoformat, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, PyObject *__pyx_v_dtclass) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  struct __pyx_opt_args_7cytimes_6parser_parse_obj __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_obj", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 7;
  __pyx_t_2.__pyx_default = __pyx_v_default;
  __pyx_t_2.yearfirst = __pyx_v_yearfirst;
  __pyx_t_2.dayfirst = __pyx_v_dayfirst;
  __pyx_t_2.ignoretz = __pyx_v_ignoretz;
  __pyx_t_2.isoformat = __pyx_v_isoformat;
  __pyx_t_2.cfg = __pyx_v_cfg;
  __pyx_t_2.dtclass = __pyx_v_dtclass;
  __pyx_t_1 = ((PyObject *)__pyx_f_7cytimes_6parser_parse_obj(__pyx_v_dtobj, 1, &__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.parse_obj", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":4426
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_month(
*/

static PyObject *__pyx_pw_7cytimes_6parser_7parse_month(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 int __pyx_f_7cytimes_6parser_parse_month(PyObject *__pyx_v_token, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_month *__pyx_optional_args) {

  /* "cytimes/parser.py":4430
 * def parse_month(
 *     token: int | str | None,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     raise_error: cython.bint = True,
 * ) -> cython.int:
*/
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None);

  /* "cytimes/parser.py":4431
 *     token: int | str | None,
 *     cfg: Configs = None,
 *     raise_error: cython.bint = True,             # <<<<<<<<<<<<<<
 * ) -> cython.int:
 *     """Normalize a month token to month number 1(Jan)..12(Dec) `<'int'>`.
*/
  int __pyx_v_raise_error = ((int)1);
  PY_LONG_LONG __pyx_v_num;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PY_LONG_LONG __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 = NULL;
  size_t __pyx_t_9;
  int __pyx_t_10;
  PyObject *__pyx_t_11[5];
  PyObject *__pyx_t_12 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_month", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_cfg = __pyx_optional_args->cfg;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_raise_error = __pyx_optional_args->raise_error;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_cfg);

  /* "cytimes/parser.py":4451
 *     """
 *     # <'None'>
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit
 * 
*/
  __pyx_t_1 = (__pyx_v_token == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4452
 *     # <'None'>
 *     if token is None:
 *         return -1  # exit             # <<<<<<<<<<<<<<
 * 
 *     # `<'int'>`
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4451
 *     """
 *     # <'None'>
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit
 * 
*/
  }

  /* "cytimes/parser.py":4455
 * 
 *     # `<'int'>`
 *     if isinstance(token, int):             # <<<<<<<<<<<<<<
 *         num: cython.longlong = token
 *         if num == -1:
*/
  __pyx_t_1 = PyLong_Check(__pyx_v_token); 
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4456
 *     # `<'int'>`
 *     if isinstance(token, int):
 *         num: cython.longlong = token             # <<<<<<<<<<<<<<
 *         if num == -1:
 *             return -1
*/
    __pyx_t_2 = __Pyx_PyLong_As_PY_LONG_LONG(__pyx_v_token); if (unlikely((__pyx_t_2 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 4456, __pyx_L1_error)
    __pyx_v_num = __pyx_t_2;

    /* "cytimes/parser.py":4457
 *     if isinstance(token, int):
 *         num: cython.longlong = token
 *         if num == -1:             # <<<<<<<<<<<<<<
 *             return -1
 *         if not (1 <= num <= 12):
*/
    __pyx_t_1 = (__pyx_v_num == -1LL);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":4458
 *         num: cython.longlong = token
 *         if num == -1:
 *             return -1             # <<<<<<<<<<<<<<
 *         if not (1 <= num <= 12):
 *             if raise_error:
*/
      __pyx_r = -1;
      goto __pyx_L0;

      /* "cytimes/parser.py":4457
 *     if isinstance(token, int):
 *         num: cython.longlong = token
 *         if num == -1:             # <<<<<<<<<<<<<<
 *             return -1
 *         if not (1 <= num <= 12):
*/
    }

    /* "cytimes/parser.py":4459
 *         if num == -1:
 *             return -1
 *         if not (1 <= num <= 12):             # <<<<<<<<<<<<<<
 *             if raise_error:
 *                 raise errors.InvalidMonthError(
*/
    __pyx_t_1 = (1 <= __pyx_v_num);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_num <= 12);
    }
    __pyx_t_3 = (!__pyx_t_1);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":4460
 *             return -1
 *         if not (1 <= num <= 12):
 *             if raise_error:             # <<<<<<<<<<<<<<
 *                 raise errors.InvalidMonthError(
 *                     "Invalid month number '%d', must be between 1(Jan)..12(Dec)." % num
*/
      if (unlikely(__pyx_v_raise_error)) {

        /* "cytimes/parser.py":4461
 *         if not (1 <= num <= 12):
 *             if raise_error:
 *                 raise errors.InvalidMonthError(             # <<<<<<<<<<<<<<
 *                     "Invalid month number '%d', must be between 1(Jan)..12(Dec)." % num
 *                 )
*/
        __pyx_t_5 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4461, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidMonthError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4461, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

        /* "cytimes/parser.py":4462
 *             if raise_error:
 *                 raise errors.InvalidMonthError(
 *                     "Invalid month number '%d', must be between 1(Jan)..12(Dec)." % num             # <<<<<<<<<<<<<<
 *                 )
 *             return -1
*/
        __pyx_t_6 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_num); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4462, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_8 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_month_number_d_must_be_b, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4462, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_9 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
          assert(__pyx_t_5);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
          __pyx_t_9 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4461, __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(0, 4461, __pyx_L1_error)

        /* "cytimes/parser.py":4460
 *             return -1
 *         if not (1 <= num <= 12):
 *             if raise_error:             # <<<<<<<<<<<<<<
 *                 raise errors.InvalidMonthError(
 *                     "Invalid month number '%d', must be between 1(Jan)..12(Dec)." % num
*/
      }

      /* "cytimes/parser.py":4464
 *                     "Invalid month number '%d', must be between 1(Jan)..12(Dec)." % num
 *                 )
 *             return -1             # <<<<<<<<<<<<<<
 *         return num  # exit
 * 
*/
      __pyx_r = -1;
      goto __pyx_L0;

      /* "cytimes/parser.py":4459
 *         if num == -1:
 *             return -1
 *         if not (1 <= num <= 12):             # <<<<<<<<<<<<<<
 *             if raise_error:
 *                 raise errors.InvalidMonthError(
*/
    }

    /* "cytimes/parser.py":4465
 *                 )
 *             return -1
 *         return num  # exit             # <<<<<<<<<<<<<<
 * 
 *     # <'str'>
*/
    __pyx_r = __pyx_v_num;
    goto __pyx_L0;

    /* "cytimes/parser.py":4455
 * 
 *     # `<'int'>`
 *     if isinstance(token, int):             # <<<<<<<<<<<<<<
 *         num: cython.longlong = token
 *         if num == -1:
*/
  }

  /* "cytimes/parser.py":4468
 * 
 *     # <'str'>
 *     if isinstance(token, str):             # <<<<<<<<<<<<<<
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
*/
  __pyx_t_3 = PyUnicode_Check(__pyx_v_token); 
  if (__pyx_t_3) {

    /* "cytimes/parser.py":4469
 *     # <'str'>
 *     if isinstance(token, str):
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_month(token)
*/
    __pyx_t_3 = (((PyObject *)__pyx_v_cfg) == Py_None);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":4470
 *     if isinstance(token, str):
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS             # <<<<<<<<<<<<<<
 *         num: cython.longlong = cfg.get_month(token)
 *         if num == -1 and raise_error:
*/
      __Pyx_INCREF((PyObject *)__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);
      __Pyx_DECREF_SET(__pyx_v_cfg, __pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);

      /* "cytimes/parser.py":4469
 *     # <'str'>
 *     if isinstance(token, str):
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_month(token)
*/
    }

    /* "cytimes/parser.py":4471
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_month(token)             # <<<<<<<<<<<<<<
 *         if num == -1 and raise_error:
 *             raise errors.InvalidMonthError(
*/
    __pyx_t_4 = __pyx_v_token;
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 4471, __pyx_L1_error)
    __pyx_t_10 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->get_month(__pyx_v_cfg, ((PyObject*)__pyx_t_4), 0); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 4471, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_num = __pyx_t_10;

    /* "cytimes/parser.py":4472
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_month(token)
 *         if num == -1 and raise_error:             # <<<<<<<<<<<<<<
 *             raise errors.InvalidMonthError(
 *                 "Invalid month '%s', not recognized." % token
*/
    __pyx_t_1 = (__pyx_v_num == -1LL);
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_3 = __pyx_v_raise_error;
    __pyx_L11_bool_binop_done:;
    if (unlikely(__pyx_t_3)) {

      /* "cytimes/parser.py":4473
 *         num: cython.longlong = cfg.get_month(token)
 *         if num == -1 and raise_error:
 *             raise errors.InvalidMonthError(             # <<<<<<<<<<<<<<
 *                 "Invalid month '%s', not recognized." % token
 *             )
*/
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidMonthError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4473, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "cytimes/parser.py":4474
 *         if num == -1 and raise_error:
 *             raise errors.InvalidMonthError(
 *                 "Invalid month '%s', not recognized." % token             # <<<<<<<<<<<<<<
 *             )
 *         return num  # exit
*/
      __pyx_t_8 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Invalid_month_s_not_recognized, __pyx_v_token); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4474, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4473, __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(0, 4473, __pyx_L1_error)

      /* "cytimes/parser.py":4472
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_month(token)
 *         if num == -1 and raise_error:             # <<<<<<<<<<<<<<
 *             raise errors.InvalidMonthError(
 *                 "Invalid month '%s', not recognized." % token
*/
    }

    /* "cytimes/parser.py":4476
 *                 "Invalid month '%s', not recognized." % token
 *             )
 *         return num  # exit             # <<<<<<<<<<<<<<
 * 
 *     # Invalid
*/
    __pyx_r = __pyx_v_num;
    goto __pyx_L0;

    /* "cytimes/parser.py":4468
 * 
 *     # <'str'>
 *     if isinstance(token, str):             # <<<<<<<<<<<<<<
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
*/
  }

  /* "cytimes/parser.py":4479
 * 
 *     # Invalid
 *     if raise_error:             # <<<<<<<<<<<<<<
 *         raise errors.InvalidMonthError(
 *             "Invalid month '%s' %s.\n"
*/
  if (unlikely(__pyx_v_raise_error)) {

    /* "cytimes/parser.py":4480
 *     # Invalid
 *     if raise_error:
 *         raise errors.InvalidMonthError(             # <<<<<<<<<<<<<<
 *             "Invalid month '%s' %s.\n"
 *             "Expects integer (1-12) or literal month name." % (token, type(token))
*/
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4480, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidMonthError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4480, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "cytimes/parser.py":4482
 *         raise errors.InvalidMonthError(
 *             "Invalid month '%s' %s.\n"
 *             "Expects integer (1-12) or literal month name." % (token, type(token))             # <<<<<<<<<<<<<<
 *         )
 *     return -1
*/
    __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_token), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_token))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4482, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_month;
    __pyx_t_11[1] = __pyx_t_8;
    __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_11[3] = __pyx_t_6;
    __pyx_t_11[4] = __pyx_mstate_global->__pyx_kp_u_Expects_integer_1_12_or_literal;

    /* "cytimes/parser.py":4481
 *     if raise_error:
 *         raise errors.InvalidMonthError(
 *             "Invalid month '%s' %s.\n"             # <<<<<<<<<<<<<<
 *             "Expects integer (1-12) or literal month name." % (token, type(token))
 *         )
*/
    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 5, 15 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 47, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4481, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_12};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4480, __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(0, 4480, __pyx_L1_error)

    /* "cytimes/parser.py":4479
 * 
 *     # Invalid
 *     if raise_error:             # <<<<<<<<<<<<<<
 *         raise errors.InvalidMonthError(
 *             "Invalid month '%s' %s.\n"
*/
  }

  /* "cytimes/parser.py":4484
 *             "Expects integer (1-12) or literal month name." % (token, type(token))
 *         )
 *     return -1             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_r = -1;
  goto __pyx_L0;

  /* "cytimes/parser.py":4426
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_month(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cytimes.parser.parse_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cfg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_7parse_month(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_7cytimes_6parser_6parse_month, "Normalize a month token to month number 1(Jan)..12(Dec) `<'int'>`.\n\n    :param token `<'int/str/None'>`: Month token to normalize, accepts:\n\n        - `None` \342\206\222 returns `-1` (or raises if `raise_error=True`)\n        - `int`  \342\206\222 returns the number if in `1..12`; returns `-1` (or raises) otherwise.\n                   Special case: `-1` is passed through as a sentinel.\n        - `str`  \342\206\222 resolved via `Configs.get_month` (e.g., \"Jan\", \"September\",\n                   localized aliases). Returns `1..12`, or `-1` (or raises) if unrecognized.\n\n    :param cfg `<'Configs/None'>`: Configs used for string lookup. Defaults to `None`.\n        If `None` uses module's default Configs.\n    :param raise_error `<'bool'>`: If True, raise `InvalidMonthError` on invalid input;\n        if False, return `-1`. Defaults to True.\n    :returns `<'int'>`: Month number in `1..12`, or `-1` if invalid and `raise_error=False`.\n    :raises `<'InvalidMonthError'>`: On invalid `token` input when `raise_error=True`.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_7parse_month = {"parse_month", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7parse_month, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_6parse_month};
static PyObject *__pyx_pw_7cytimes_6parser_7parse_month(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_token = 0;
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 0;
  int __pyx_v_raise_error;
  #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("parse_month (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_token,&__pyx_mstate_global->__pyx_n_u_cfg,&__pyx_mstate_global->__pyx_n_u_raise_error,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, 4426, __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, 4426, __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, 4426, __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, 4426, __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, "parse_month", 0) < (0)) __PYX_ERR(0, 4426, __pyx_L3_error)

      /* "cytimes/parser.py":4430
 * def parse_month(
 *     token: int | str | None,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     raise_error: cython.bint = True,
 * ) -> cython.int:
*/
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse_month", 0, 1, 3, i); __PYX_ERR(0, 4426, __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, 4426, __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, 4426, __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, 4426, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));
    }
    __pyx_v_token = values[0];
    __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)values[1]);
    if (values[2]) {
      __pyx_v_raise_error = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_raise_error == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4431, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4431
 *     token: int | str | None,
 *     cfg: Configs = None,
 *     raise_error: cython.bint = True,             # <<<<<<<<<<<<<<
 * ) -> cython.int:
 *     """Normalize a month token to month number 1(Jan)..12(Dec) `<'int'>`.
*/
      __pyx_v_raise_error = ((int)1);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_month", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 4426, __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("cytimes.parser.parse_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cfg), __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, 1, "cfg", 0))) __PYX_ERR(0, 4430, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_6parse_month(__pyx_self, __pyx_v_token, __pyx_v_cfg, __pyx_v_raise_error);

  /* "cytimes/parser.py":4426
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_month(
*/

  /* 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_7cytimes_6parser_6parse_month(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, int __pyx_v_raise_error) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_parse_month __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_month", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.cfg = __pyx_v_cfg;
  __pyx_t_2.raise_error = __pyx_v_raise_error;
  __pyx_t_1 = __pyx_f_7cytimes_6parser_parse_month(__pyx_v_token, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 4426, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.parse_month", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "cytimes/parser.py":4487
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_weekday(
*/

static PyObject *__pyx_pw_7cytimes_6parser_9parse_weekday(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 int __pyx_f_7cytimes_6parser_parse_weekday(PyObject *__pyx_v_token, CYTHON_UNUSED int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_weekday *__pyx_optional_args) {

  /* "cytimes/parser.py":4491
 * def parse_weekday(
 *     token: int | str | None,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     raise_error: cython.bint = True,
 * ) -> cython.int:
*/
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None);

  /* "cytimes/parser.py":4492
 *     token: int | str | None,
 *     cfg: Configs = None,
 *     raise_error: cython.bint = True,             # <<<<<<<<<<<<<<
 * ) -> cython.int:
 *     """Normalize a weekday token to weekday number 0(Mon)..6(Sun) `<'int'>`.
*/
  int __pyx_v_raise_error = ((int)1);
  PY_LONG_LONG __pyx_v_num;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PY_LONG_LONG __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 = NULL;
  size_t __pyx_t_9;
  int __pyx_t_10;
  PyObject *__pyx_t_11[5];
  PyObject *__pyx_t_12 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_weekday", 0);
  if (__pyx_optional_args) {
    if (__pyx_optional_args->__pyx_n > 0) {
      __pyx_v_cfg = __pyx_optional_args->cfg;
      if (__pyx_optional_args->__pyx_n > 1) {
        __pyx_v_raise_error = __pyx_optional_args->raise_error;
      }
    }
  }
  __Pyx_INCREF((PyObject *)__pyx_v_cfg);

  /* "cytimes/parser.py":4512
 *     """
 *     # <'None'>
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit
 * 
*/
  __pyx_t_1 = (__pyx_v_token == Py_None);
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4513
 *     # <'None'>
 *     if token is None:
 *         return -1  # exit             # <<<<<<<<<<<<<<
 * 
 *     # `<'int'>`
*/
    __pyx_r = -1;
    goto __pyx_L0;

    /* "cytimes/parser.py":4512
 *     """
 *     # <'None'>
 *     if token is None:             # <<<<<<<<<<<<<<
 *         return -1  # exit
 * 
*/
  }

  /* "cytimes/parser.py":4516
 * 
 *     # `<'int'>`
 *     if isinstance(token, int):             # <<<<<<<<<<<<<<
 *         num: cython.longlong = token
 *         if num == -1:
*/
  __pyx_t_1 = PyLong_Check(__pyx_v_token); 
  if (__pyx_t_1) {

    /* "cytimes/parser.py":4517
 *     # `<'int'>`
 *     if isinstance(token, int):
 *         num: cython.longlong = token             # <<<<<<<<<<<<<<
 *         if num == -1:
 *             return -1
*/
    __pyx_t_2 = __Pyx_PyLong_As_PY_LONG_LONG(__pyx_v_token); if (unlikely((__pyx_t_2 == (PY_LONG_LONG)-1) && PyErr_Occurred())) __PYX_ERR(0, 4517, __pyx_L1_error)
    __pyx_v_num = __pyx_t_2;

    /* "cytimes/parser.py":4518
 *     if isinstance(token, int):
 *         num: cython.longlong = token
 *         if num == -1:             # <<<<<<<<<<<<<<
 *             return -1
 *         if not (0 <= num <= 6):
*/
    __pyx_t_1 = (__pyx_v_num == -1LL);
    if (__pyx_t_1) {

      /* "cytimes/parser.py":4519
 *         num: cython.longlong = token
 *         if num == -1:
 *             return -1             # <<<<<<<<<<<<<<
 *         if not (0 <= num <= 6):
 *             if raise_error:
*/
      __pyx_r = -1;
      goto __pyx_L0;

      /* "cytimes/parser.py":4518
 *     if isinstance(token, int):
 *         num: cython.longlong = token
 *         if num == -1:             # <<<<<<<<<<<<<<
 *             return -1
 *         if not (0 <= num <= 6):
*/
    }

    /* "cytimes/parser.py":4520
 *         if num == -1:
 *             return -1
 *         if not (0 <= num <= 6):             # <<<<<<<<<<<<<<
 *             if raise_error:
 *                 raise errors.InvalidWeekdayError(
*/
    __pyx_t_1 = (0 <= __pyx_v_num);
    if (__pyx_t_1) {
      __pyx_t_1 = (__pyx_v_num <= 6);
    }
    __pyx_t_3 = (!__pyx_t_1);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":4521
 *             return -1
 *         if not (0 <= num <= 6):
 *             if raise_error:             # <<<<<<<<<<<<<<
 *                 raise errors.InvalidWeekdayError(
 *                     "Invalid weekday number '%d', must be between 0(Mon)..6(Sun)." % num
*/
      if (unlikely(__pyx_v_raise_error)) {

        /* "cytimes/parser.py":4522
 *         if not (0 <= num <= 6):
 *             if raise_error:
 *                 raise errors.InvalidWeekdayError(             # <<<<<<<<<<<<<<
 *                     "Invalid weekday number '%d', must be between 0(Mon)..6(Sun)." % num
 *                 )
*/
        __pyx_t_5 = NULL;
        __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_mstate_global->__pyx_n_u_InvalidWeekdayError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4522, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

        /* "cytimes/parser.py":4523
 *             if raise_error:
 *                 raise errors.InvalidWeekdayError(
 *                     "Invalid weekday number '%d', must be between 0(Mon)..6(Sun)." % num             # <<<<<<<<<<<<<<
 *                 )
 *             return -1
*/
        __pyx_t_6 = __Pyx_PyLong_From_PY_LONG_LONG(__pyx_v_num); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4523, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_8 = PyUnicode_Format(__pyx_mstate_global->__pyx_kp_u_Invalid_weekday_number_d_must_be, __pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4523, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_9 = 1;
        #if CYTHON_UNPACK_METHODS
        if (unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
          assert(__pyx_t_5);
          PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
          __Pyx_INCREF(__pyx_t_5);
          __Pyx_INCREF(__pyx__function);
          __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
          __pyx_t_9 = 0;
        }
        #endif
        {
          PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_8};
          __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4522, __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(0, 4522, __pyx_L1_error)

        /* "cytimes/parser.py":4521
 *             return -1
 *         if not (0 <= num <= 6):
 *             if raise_error:             # <<<<<<<<<<<<<<
 *                 raise errors.InvalidWeekdayError(
 *                     "Invalid weekday number '%d', must be between 0(Mon)..6(Sun)." % num
*/
      }

      /* "cytimes/parser.py":4525
 *                     "Invalid weekday number '%d', must be between 0(Mon)..6(Sun)." % num
 *                 )
 *             return -1             # <<<<<<<<<<<<<<
 *         return num  # exit
 * 
*/
      __pyx_r = -1;
      goto __pyx_L0;

      /* "cytimes/parser.py":4520
 *         if num == -1:
 *             return -1
 *         if not (0 <= num <= 6):             # <<<<<<<<<<<<<<
 *             if raise_error:
 *                 raise errors.InvalidWeekdayError(
*/
    }

    /* "cytimes/parser.py":4526
 *                 )
 *             return -1
 *         return num  # exit             # <<<<<<<<<<<<<<
 * 
 *     # <'str'>
*/
    __pyx_r = __pyx_v_num;
    goto __pyx_L0;

    /* "cytimes/parser.py":4516
 * 
 *     # `<'int'>`
 *     if isinstance(token, int):             # <<<<<<<<<<<<<<
 *         num: cython.longlong = token
 *         if num == -1:
*/
  }

  /* "cytimes/parser.py":4529
 * 
 *     # <'str'>
 *     if isinstance(token, str):             # <<<<<<<<<<<<<<
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
*/
  __pyx_t_3 = PyUnicode_Check(__pyx_v_token); 
  if (__pyx_t_3) {

    /* "cytimes/parser.py":4530
 *     # <'str'>
 *     if isinstance(token, str):
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_weekday(token)
*/
    __pyx_t_3 = (((PyObject *)__pyx_v_cfg) == Py_None);
    if (__pyx_t_3) {

      /* "cytimes/parser.py":4531
 *     if isinstance(token, str):
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS             # <<<<<<<<<<<<<<
 *         num: cython.longlong = cfg.get_weekday(token)
 *         if num == -1 and raise_error:
*/
      __Pyx_INCREF((PyObject *)__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);
      __Pyx_DECREF_SET(__pyx_v_cfg, __pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);

      /* "cytimes/parser.py":4530
 *     # <'str'>
 *     if isinstance(token, str):
 *         if cfg is None:             # <<<<<<<<<<<<<<
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_weekday(token)
*/
    }

    /* "cytimes/parser.py":4532
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_weekday(token)             # <<<<<<<<<<<<<<
 *         if num == -1 and raise_error:
 *             raise errors.InvalidWeekdayError(
*/
    __pyx_t_4 = __pyx_v_token;
    __Pyx_INCREF(__pyx_t_4);
    if (!(likely(PyUnicode_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_4))) __PYX_ERR(0, 4532, __pyx_L1_error)
    __pyx_t_10 = ((struct __pyx_vtabstruct_7cytimes_6parser_Configs *)__pyx_v_cfg->__pyx_vtab)->get_weekday(__pyx_v_cfg, ((PyObject*)__pyx_t_4), 0); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 4532, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_num = __pyx_t_10;

    /* "cytimes/parser.py":4533
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_weekday(token)
 *         if num == -1 and raise_error:             # <<<<<<<<<<<<<<
 *             raise errors.InvalidWeekdayError(
 *                 "Invalid weekday '%s', not recognized." % token
*/
    __pyx_t_1 = (__pyx_v_num == -1LL);
    if (__pyx_t_1) {
    } else {
      __pyx_t_3 = __pyx_t_1;
      goto __pyx_L11_bool_binop_done;
    }
    __pyx_t_3 = __pyx_v_raise_error;
    __pyx_L11_bool_binop_done:;
    if (unlikely(__pyx_t_3)) {

      /* "cytimes/parser.py":4534
 *         num: cython.longlong = cfg.get_weekday(token)
 *         if num == -1 and raise_error:
 *             raise errors.InvalidWeekdayError(             # <<<<<<<<<<<<<<
 *                 "Invalid weekday '%s', not recognized." % token
 *             )
*/
      __pyx_t_7 = NULL;
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidWeekdayError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4534, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "cytimes/parser.py":4535
 *         if num == -1 and raise_error:
 *             raise errors.InvalidWeekdayError(
 *                 "Invalid weekday '%s', not recognized." % token             # <<<<<<<<<<<<<<
 *             )
 *         return num  # exit
*/
      __pyx_t_8 = __Pyx_PyUnicode_FormatSafe(__pyx_mstate_global->__pyx_kp_u_Invalid_weekday_s_not_recognized, __pyx_v_token); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = 1;
      #if CYTHON_UNPACK_METHODS
      if (unlikely(PyMethod_Check(__pyx_t_5))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
        assert(__pyx_t_7);
        PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx__function);
        __Pyx_DECREF_SET(__pyx_t_5, __pyx__function);
        __pyx_t_9 = 0;
      }
      #endif
      {
        PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_8};
        __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_5, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__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_5); __pyx_t_5 = 0;
        if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4534, __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(0, 4534, __pyx_L1_error)

      /* "cytimes/parser.py":4533
 *             cfg = _DEFAULT_CONFIGS
 *         num: cython.longlong = cfg.get_weekday(token)
 *         if num == -1 and raise_error:             # <<<<<<<<<<<<<<
 *             raise errors.InvalidWeekdayError(
 *                 "Invalid weekday '%s', not recognized." % token
*/
    }

    /* "cytimes/parser.py":4537
 *                 "Invalid weekday '%s', not recognized." % token
 *             )
 *         return num  # exit             # <<<<<<<<<<<<<<
 * 
 *     # Invalid
*/
    __pyx_r = __pyx_v_num;
    goto __pyx_L0;

    /* "cytimes/parser.py":4529
 * 
 *     # <'str'>
 *     if isinstance(token, str):             # <<<<<<<<<<<<<<
 *         if cfg is None:
 *             cfg = _DEFAULT_CONFIGS
*/
  }

  /* "cytimes/parser.py":4540
 * 
 *     # Invalid
 *     if raise_error:             # <<<<<<<<<<<<<<
 *         raise errors.InvalidWeekdayError(
 *             "Invalid weekday '%s' %s.\n"
*/
  if (unlikely(__pyx_v_raise_error)) {

    /* "cytimes/parser.py":4541
 *     # Invalid
 *     if raise_error:
 *         raise errors.InvalidWeekdayError(             # <<<<<<<<<<<<<<
 *             "Invalid weekday '%s' %s.\n"
 *             "Expects integer (0-6) or literal weekday name." % (token, type(token))
*/
    __pyx_t_5 = NULL;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_errors); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4541, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_mstate_global->__pyx_n_u_InvalidWeekdayError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4541, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

    /* "cytimes/parser.py":4543
 *         raise errors.InvalidWeekdayError(
 *             "Invalid weekday '%s' %s.\n"
 *             "Expects integer (0-6) or literal weekday name." % (token, type(token))             # <<<<<<<<<<<<<<
 *         )
 *     return -1
*/
    __pyx_t_8 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(__pyx_v_token), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_6 = __Pyx_PyObject_FormatSimpleAndDecref(PyObject_Str(((PyObject *)Py_TYPE(__pyx_v_token))), __pyx_mstate_global->__pyx_empty_unicode); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4543, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_11[0] = __pyx_mstate_global->__pyx_kp_u_Invalid_weekday;
    __pyx_t_11[1] = __pyx_t_8;
    __pyx_t_11[2] = __pyx_mstate_global->__pyx_kp_u__9;
    __pyx_t_11[3] = __pyx_t_6;
    __pyx_t_11[4] = __pyx_mstate_global->__pyx_kp_u_Expects_integer_0_6_or_literal;

    /* "cytimes/parser.py":4542
 *     if raise_error:
 *         raise errors.InvalidWeekdayError(
 *             "Invalid weekday '%s' %s.\n"             # <<<<<<<<<<<<<<
 *             "Expects integer (0-6) or literal weekday name." % (token, type(token))
 *         )
*/
    __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_11, 5, 17 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_8) + 2 + __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6) + 48, 127 | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_8) | __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_6));
    if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4542, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_9 = 1;
    #if CYTHON_UNPACK_METHODS
    if (unlikely(PyMethod_Check(__pyx_t_7))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
      assert(__pyx_t_5);
      PyObject* __pyx__function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx__function);
      __Pyx_DECREF_SET(__pyx_t_7, __pyx__function);
      __pyx_t_9 = 0;
    }
    #endif
    {
      PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_12};
      __pyx_t_4 = __Pyx_PyObject_FastCall((PyObject*)__pyx_t_7, __pyx_callargs+__pyx_t_9, (2-__pyx_t_9) | (__pyx_t_9*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4541, __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(0, 4541, __pyx_L1_error)

    /* "cytimes/parser.py":4540
 * 
 *     # Invalid
 *     if raise_error:             # <<<<<<<<<<<<<<
 *         raise errors.InvalidWeekdayError(
 *             "Invalid weekday '%s' %s.\n"
*/
  }

  /* "cytimes/parser.py":4545
 *             "Expects integer (0-6) or literal weekday name." % (token, type(token))
 *         )
 *     return -1             # <<<<<<<<<<<<<<
*/
  __pyx_r = -1;
  goto __pyx_L0;

  /* "cytimes/parser.py":4487
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_weekday(
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cytimes.parser.parse_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_cfg);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_9parse_weekday(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_7cytimes_6parser_8parse_weekday, "Normalize a weekday token to weekday number 0(Mon)..6(Sun) `<'int'>`.\n\n    :param token `<'int/str/None'>`: Weekday token to normalize, accepts:\n\n        - `None` \342\206\222 returns `-1` (or raises if `raise_error=True`)\n        - `int`  \342\206\222 returns the number if in `0..6`; returns `-1` (or raises) otherwise.\n                   Special case: `-1` is passed through as a sentinel.\n        - `str`  \342\206\222 resolved via `Configs.get_weekday` (e.g., \"Mon\", \"Sunday\",\n                   localized aliases). Returns `0..6`, or `-1` (or raises) if unrecognized.\n\n    :param cfg `<'Configs/None'>`: Configs used for string lookup. Defaults to `None`.\n        If `None` uses module's default Configs.\n    :param raise_error `<'bool'>`: If True, raise `InvalidWeekdayError` on invalid input;\n        if False, return `-1`. Defaults to True.\n    :returns `<'int'>`: Weekday number in `0..6`, or `-1` if invalid and `raise_error=False`.\n    :raises `<'InvalidWeekdayError'>`: On invalid `token` input when `raise_error=True`.\n    ");
static PyMethodDef __pyx_mdef_7cytimes_6parser_9parse_weekday = {"parse_weekday", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_9parse_weekday, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_8parse_weekday};
static PyObject *__pyx_pw_7cytimes_6parser_9parse_weekday(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_token = 0;
  struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg = 0;
  int __pyx_v_raise_error;
  #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("parse_weekday (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_token,&__pyx_mstate_global->__pyx_n_u_cfg,&__pyx_mstate_global->__pyx_n_u_raise_error,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, 4487, __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, 4487, __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, 4487, __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, 4487, __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, "parse_weekday", 0) < (0)) __PYX_ERR(0, 4487, __pyx_L3_error)

      /* "cytimes/parser.py":4491
 * def parse_weekday(
 *     token: int | str | None,
 *     cfg: Configs = None,             # <<<<<<<<<<<<<<
 *     raise_error: cython.bint = True,
 * ) -> cython.int:
*/
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));
      for (Py_ssize_t i = __pyx_nargs; i < 1; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("parse_weekday", 0, 1, 3, i); __PYX_ERR(0, 4487, __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, 4487, __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, 4487, __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, 4487, __pyx_L3_error)
        break;
        default: goto __pyx_L5_argtuple_error;
      }
      if (!values[1]) values[1] = __Pyx_NewRef((PyObject *)((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None));
    }
    __pyx_v_token = values[0];
    __pyx_v_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)values[1]);
    if (values[2]) {
      __pyx_v_raise_error = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_raise_error == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 4492, __pyx_L3_error)
    } else {

      /* "cytimes/parser.py":4492
 *     token: int | str | None,
 *     cfg: Configs = None,
 *     raise_error: cython.bint = True,             # <<<<<<<<<<<<<<
 * ) -> cython.int:
 *     """Normalize a weekday token to weekday number 0(Mon)..6(Sun) `<'int'>`.
*/
      __pyx_v_raise_error = ((int)1);
    }
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("parse_weekday", 0, 1, 3, __pyx_nargs); __PYX_ERR(0, 4487, __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("cytimes.parser.parse_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cfg), __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, 1, "cfg", 0))) __PYX_ERR(0, 4491, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_8parse_weekday(__pyx_self, __pyx_v_token, __pyx_v_cfg, __pyx_v_raise_error);

  /* "cytimes/parser.py":4487
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_weekday(
*/

  /* 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_7cytimes_6parser_8parse_weekday(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_token, struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v_cfg, int __pyx_v_raise_error) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  struct __pyx_opt_args_7cytimes_6parser_parse_weekday __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("parse_weekday", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2.__pyx_n = 2;
  __pyx_t_2.cfg = __pyx_v_cfg;
  __pyx_t_2.raise_error = __pyx_v_raise_error;
  __pyx_t_1 = __pyx_f_7cytimes_6parser_parse_weekday(__pyx_v_token, 1, &__pyx_t_2); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 4487, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyLong_From_int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.parse_weekday", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Configs(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_11__pyx_unpickle_Configs(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_7cytimes_6parser_11__pyx_unpickle_Configs = {"__pyx_unpickle_Configs", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_11__pyx_unpickle_Configs, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_11__pyx_unpickle_Configs(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___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  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[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("__pyx_unpickle_Configs (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_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__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(7, 4, __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, 4, __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, 4, __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, 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, "__pyx_unpickle_Configs", 0) < (0)) __PYX_ERR(7, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Configs", 1, 3, 3, i); __PYX_ERR(7, 4, __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(7, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(7, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Configs", 1, 3, 3, __pyx_nargs); __PYX_ERR(7, 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("cytimes.parser.__pyx_unpickle_Configs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(7, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_10__pyx_unpickle_Configs(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_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_7cytimes_6parser_10__pyx_unpickle_Configs(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_result = 0;
  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;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Configs", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_Configs(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')             # <<<<<<<<<<<<<<
 *     __pyx_result = Configs.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, ((char const *)"_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst")); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
 *     __pyx_result = Configs.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __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(7, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
 *     __pyx_result = Configs.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = Configs.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(7, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_7cytimes_6parser___pyx_unpickle_Configs__set_state(((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
 *     __pyx_result = Configs.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Configs__cls = __pyx_state[0]; __pyx_result._ampm = __pyx_state[1]; __pyx_result._ampm_ext = __pyx_state[2]; __pyx_result._dayfirst = __pyx_state[3]; __pyx_result._hms = __pyx_state[4]; __pyx_result._hms_ext = __pyx_state[5]; __pyx_result._jump = __pyx_state[6]; __pyx_result._jump_ext = __pyx_state[7]; __pyx_result._month = __pyx_state[8]; __pyx_result._month_ext = __pyx_state[9]; __pyx_result._pertain = __pyx_state[10]; __pyx_result._pertain_ext = __pyx_state[11]; __pyx_result._tz = __pyx_state[12]; __pyx_result._tz_ext = __pyx_state[13]; __pyx_result._utc = __pyx_state[14]; __pyx_result._utc_ext = __pyx_state[15]; __pyx_result._weekday = __pyx_state[16]; __pyx_result._weekday_ext = __pyx_state[17]; __pyx_result._yearfirst = __pyx_state[18]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Configs(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.__pyx_unpickle_Configs", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result._Configs__cls = __pyx_state[0]; __pyx_result._ampm = __pyx_state[1]; __pyx_result._ampm_ext = __pyx_state[2]; __pyx_result._dayfirst = __pyx_state[3]; __pyx_result._hms = __pyx_state[4]; __pyx_result._hms_ext = __pyx_state[5]; __pyx_result._jump = __pyx_state[6]; __pyx_result._jump_ext = __pyx_state[7]; __pyx_result._month = __pyx_state[8]; __pyx_result._month_ext = __pyx_state[9]; __pyx_result._pertain = __pyx_state[10]; __pyx_result._pertain_ext = __pyx_state[11]; __pyx_result._tz = __pyx_state[12]; __pyx_result._tz_ext = __pyx_state[13]; __pyx_result._utc = __pyx_state[14]; __pyx_result._utc_ext = __pyx_state[15]; __pyx_result._weekday = __pyx_state[16]; __pyx_result._weekday_ext = __pyx_state[17]; __pyx_result._yearfirst = __pyx_state[18]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 19)
*/

static PyObject *__pyx_f_7cytimes_6parser___pyx_unpickle_Configs__set_state(struct __pyx_obj_7cytimes_6parser_Configs *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Configs__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Configs__cls = __pyx_state[0]; __pyx_result._ampm = __pyx_state[1]; __pyx_result._ampm_ext = __pyx_state[2]; __pyx_result._dayfirst = __pyx_state[3]; __pyx_result._hms = __pyx_state[4]; __pyx_result._hms_ext = __pyx_state[5]; __pyx_result._jump = __pyx_state[6]; __pyx_result._jump_ext = __pyx_state[7]; __pyx_result._month = __pyx_state[8]; __pyx_result._month_ext = __pyx_state[9]; __pyx_result._pertain = __pyx_state[10]; __pyx_result._pertain_ext = __pyx_state[11]; __pyx_result._tz = __pyx_state[12]; __pyx_result._tz_ext = __pyx_state[13]; __pyx_result._utc = __pyx_state[14]; __pyx_result._utc_ext = __pyx_state[15]; __pyx_result._weekday = __pyx_state[16]; __pyx_result._weekday_ext = __pyx_state[17]; __pyx_result._yearfirst = __pyx_state[18]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 19)
*/
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 0);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_Configs__cls);
  __Pyx_DECREF(__pyx_v___pyx_result->_Configs__cls);
  __pyx_v___pyx_result->_Configs__cls = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 1);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_ampm);
  __Pyx_DECREF(__pyx_v___pyx_result->_ampm);
  __pyx_v___pyx_result->_ampm = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 2);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_ampm_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_ampm_ext);
  __pyx_v___pyx_result->_ampm_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 3)); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 12, __pyx_L1_error)
  __pyx_v___pyx_result->_dayfirst = __pyx_t_2;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 4);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_hms);
  __Pyx_DECREF(__pyx_v___pyx_result->_hms);
  __pyx_v___pyx_result->_hms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 5);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_hms_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_hms_ext);
  __pyx_v___pyx_result->_hms_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 6);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_jump);
  __Pyx_DECREF(__pyx_v___pyx_result->_jump);
  __pyx_v___pyx_result->_jump = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 7);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_jump_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_jump_ext);
  __pyx_v___pyx_result->_jump_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 8);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_month);
  __Pyx_DECREF(__pyx_v___pyx_result->_month);
  __pyx_v___pyx_result->_month = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 9);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_month_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_month_ext);
  __pyx_v___pyx_result->_month_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 10);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_pertain);
  __Pyx_DECREF(__pyx_v___pyx_result->_pertain);
  __pyx_v___pyx_result->_pertain = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 11);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_pertain_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_pertain_ext);
  __pyx_v___pyx_result->_pertain_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 12);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_tz);
  __Pyx_DECREF(__pyx_v___pyx_result->_tz);
  __pyx_v___pyx_result->_tz = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 13);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_tz_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_tz_ext);
  __pyx_v___pyx_result->_tz_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 14);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_utc);
  __Pyx_DECREF(__pyx_v___pyx_result->_utc);
  __pyx_v___pyx_result->_utc = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 15);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("set", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_utc_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_utc_ext);
  __pyx_v___pyx_result->_utc_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 16);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_weekday);
  __Pyx_DECREF(__pyx_v___pyx_result->_weekday);
  __pyx_v___pyx_result->_weekday = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 17);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("dict", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_weekday_ext);
  __Pyx_DECREF(__pyx_v___pyx_result->_weekday_ext);
  __pyx_v___pyx_result->_weekday_ext = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 18)); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 12, __pyx_L1_error)
  __pyx_v___pyx_result->_yearfirst = __pyx_t_2;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Configs__cls = __pyx_state[0]; __pyx_result._ampm = __pyx_state[1]; __pyx_result._ampm_ext = __pyx_state[2]; __pyx_result._dayfirst = __pyx_state[3]; __pyx_result._hms = __pyx_state[4]; __pyx_result._hms_ext = __pyx_state[5]; __pyx_result._jump = __pyx_state[6]; __pyx_result._jump_ext = __pyx_state[7]; __pyx_result._month = __pyx_state[8]; __pyx_result._month_ext = __pyx_state[9]; __pyx_result._pertain = __pyx_state[10]; __pyx_result._pertain_ext = __pyx_state[11]; __pyx_result._tz = __pyx_state[12]; __pyx_result._tz_ext = __pyx_state[13]; __pyx_result._utc = __pyx_state[14]; __pyx_result._utc_ext = __pyx_state[15]; __pyx_result._weekday = __pyx_state[16]; __pyx_result._weekday_ext = __pyx_state[17]; __pyx_result._yearfirst = __pyx_state[18]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 19)             # <<<<<<<<<<<<<<
*/
  __pyx_t_3 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 19); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(7, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_Configs__set_state(<Configs> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Configs__set_state(Configs __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result._Configs__cls = __pyx_state[0]; __pyx_result._ampm = __pyx_state[1]; __pyx_result._ampm_ext = __pyx_state[2]; __pyx_result._dayfirst = __pyx_state[3]; __pyx_result._hms = __pyx_state[4]; __pyx_result._hms_ext = __pyx_state[5]; __pyx_result._jump = __pyx_state[6]; __pyx_result._jump_ext = __pyx_state[7]; __pyx_result._month = __pyx_state[8]; __pyx_result._month_ext = __pyx_state[9]; __pyx_result._pertain = __pyx_state[10]; __pyx_result._pertain_ext = __pyx_state[11]; __pyx_result._tz = __pyx_state[12]; __pyx_result._tz_ext = __pyx_state[13]; __pyx_result._utc = __pyx_state[14]; __pyx_result._utc_ext = __pyx_state[15]; __pyx_result._weekday = __pyx_state[16]; __pyx_result._weekday_ext = __pyx_state[17]; __pyx_result._yearfirst = __pyx_state[18]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 19)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.__pyx_unpickle_Configs__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Parser(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')
*/

/* Python wrapper */
static PyObject *__pyx_pw_7cytimes_6parser_13__pyx_unpickle_Parser(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_7cytimes_6parser_13__pyx_unpickle_Parser = {"__pyx_unpickle_Parser", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_13__pyx_unpickle_Parser, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_7cytimes_6parser_13__pyx_unpickle_Parser(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___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  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[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("__pyx_unpickle_Parser (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_type,&__pyx_mstate_global->__pyx_n_u_pyx_checksum,&__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(7, 4, __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, 4, __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, 4, __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, 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, "__pyx_unpickle_Parser", 0) < (0)) __PYX_ERR(7, 4, __pyx_L3_error)
      for (Py_ssize_t i = __pyx_nargs; i < 3; i++) {
        if (unlikely(!values[i])) { __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Parser", 1, 3, 3, i); __PYX_ERR(7, 4, __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(7, 4, __pyx_L3_error)
      values[1] = __Pyx_ArgRef_FASTCALL(__pyx_args, 1);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[1])) __PYX_ERR(7, 4, __pyx_L3_error)
      values[2] = __Pyx_ArgRef_FASTCALL(__pyx_args, 2);
      if (!CYTHON_ASSUME_SAFE_MACROS && unlikely(!values[2])) __PYX_ERR(7, 4, __pyx_L3_error)
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyLong_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(7, 4, __pyx_L3_error)
    __pyx_v___pyx_state = ((PyObject*)values[2]);
  }
  goto __pyx_L6_skip;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Parser", 1, 3, 3, __pyx_nargs); __PYX_ERR(7, 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("cytimes.parser.__pyx_unpickle_Parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v___pyx_state), (&PyTuple_Type), 1, "__pyx_state", 1))) __PYX_ERR(7, 4, __pyx_L1_error)
  __pyx_r = __pyx_pf_7cytimes_6parser_12__pyx_unpickle_Parser(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_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_7cytimes_6parser_12__pyx_unpickle_Parser(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_result = 0;
  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;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Parser", 0);

  /* "(tree fragment)":6
 * def __pyx_unpickle_Parser(__pyx_type, long __pyx_checksum, tuple __pyx_state):
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')             # <<<<<<<<<<<<<<
 *     __pyx_result = Parser.__new__(__pyx_type)
 *     if __pyx_state is not None:
*/
  __pyx_t_1 = __Pyx_CheckUnpickleChecksum(__pyx_v___pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, ((char const *)"_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens")); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 6, __pyx_L1_error)

  /* "(tree fragment)":7
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')
 *     __pyx_result = Parser.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
*/
  __pyx_t_3 = ((PyObject *)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser);
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_4 = 0;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_v___pyx_type};
    __pyx_t_2 = __Pyx_PyObject_FastCallMethod((PyObject*)__pyx_mstate_global->__pyx_n_u_new, __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(7, 7, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
  }
  __pyx_v___pyx_result = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')
 *     __pyx_result = Parser.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  __pyx_t_5 = (__pyx_v___pyx_state != ((PyObject*)Py_None));
  if (__pyx_t_5) {

    /* "(tree fragment)":9
 *     __pyx_result = Parser.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):
*/
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "cannot pass None into a C function argument that is declared 'not None'");
      __PYX_ERR(7, 9, __pyx_L1_error)
    }
    __pyx_t_2 = __pyx_f_7cytimes_6parser___pyx_unpickle_Parser__set_state(((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_v___pyx_result), __pyx_v___pyx_state); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "(tree fragment)":8
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')
 *     __pyx_result = Parser.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
 *     return __pyx_result
*/
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Parser__cls = __pyx_state[0]; __pyx_result._cfg = __pyx_state[1]; __pyx_result._ignoretz = __pyx_state[2]; __pyx_result._length = __pyx_state[3]; __pyx_result._pos = __pyx_state[4]; __pyx_result._res = __pyx_state[5]; __pyx_result._token1 = __pyx_state[6]; __pyx_result._tokens = __pyx_state[7]
*/
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Parser(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0xf672dca, 0x6aec409, 0x5a3452e, b'_Parser__cls, _cfg, _ignoretz, _length, _pos, _res, _token1, _tokens')
*/

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cytimes.parser.__pyx_unpickle_Parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result._Parser__cls = __pyx_state[0]; __pyx_result._cfg = __pyx_state[1]; __pyx_result._ignoretz = __pyx_state[2]; __pyx_result._length = __pyx_state[3]; __pyx_result._pos = __pyx_state[4]; __pyx_result._res = __pyx_state[5]; __pyx_result._token1 = __pyx_state[6]; __pyx_result._tokens = __pyx_state[7]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 8)
*/

static PyObject *__pyx_f_7cytimes_6parser___pyx_unpickle_Parser__set_state(struct __pyx_obj_7cytimes_6parser_Parser *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  Py_ssize_t __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_Parser__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Parser__cls = __pyx_state[0]; __pyx_result._cfg = __pyx_state[1]; __pyx_result._ignoretz = __pyx_state[2]; __pyx_result._length = __pyx_state[3]; __pyx_result._pos = __pyx_state[4]; __pyx_result._res = __pyx_state[5]; __pyx_result._token1 = __pyx_state[6]; __pyx_result._tokens = __pyx_state[7]             # <<<<<<<<<<<<<<
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 8)
*/
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 0);
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_Parser__cls);
  __Pyx_DECREF(__pyx_v___pyx_result->_Parser__cls);
  __pyx_v___pyx_result->_Parser__cls = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 1);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs))))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->_cfg);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->_cfg);
  __pyx_v___pyx_result->_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 2)); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(7, 12, __pyx_L1_error)
  __pyx_v___pyx_result->_ignoretz = __pyx_t_2;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 3)); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(7, 12, __pyx_L1_error)
  __pyx_v___pyx_result->_length = __pyx_t_3;
  __pyx_t_3 = __Pyx_PyIndex_AsSsize_t(__Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 4)); if (unlikely((__pyx_t_3 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(7, 12, __pyx_L1_error)
  __pyx_v___pyx_result->_pos = __pyx_t_3;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 5);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Result))))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF((PyObject *)__pyx_v___pyx_result->_res);
  __Pyx_DECREF((PyObject *)__pyx_v___pyx_result->_res);
  __pyx_v___pyx_result->_res = ((struct __pyx_obj_7cytimes_6parser_Result *)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 6);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyUnicode_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("str", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_token1);
  __Pyx_DECREF(__pyx_v___pyx_result->_token1);
  __pyx_v___pyx_result->_token1 = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyTuple_GET_ITEM(__pyx_v___pyx_state, 7);
  __Pyx_INCREF(__pyx_t_1);
  if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None) || __Pyx_RaiseUnexpectedTypeError("list", __pyx_t_1))) __PYX_ERR(7, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->_tokens);
  __Pyx_DECREF(__pyx_v___pyx_result->_tokens);
  __pyx_v___pyx_result->_tokens = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):
 *     __pyx_result._Parser__cls = __pyx_state[0]; __pyx_result._cfg = __pyx_state[1]; __pyx_result._ignoretz = __pyx_state[2]; __pyx_result._length = __pyx_state[3]; __pyx_result._pos = __pyx_state[4]; __pyx_result._res = __pyx_state[5]; __pyx_result._token1 = __pyx_state[6]; __pyx_result._tokens = __pyx_state[7]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 8)             # <<<<<<<<<<<<<<
*/
  __pyx_t_4 = __Pyx_UpdateUnpickledDict(((PyObject *)__pyx_v___pyx_result), __pyx_v___pyx_state, 8); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(7, 13, __pyx_L1_error)

  /* "(tree fragment)":11
 *         __pyx_unpickle_Parser__set_state(<Parser> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_Parser__set_state(Parser __pyx_result, __pyx_state: tuple):             # <<<<<<<<<<<<<<
 *     __pyx_result._Parser__cls = __pyx_state[0]; __pyx_result._cfg = __pyx_state[1]; __pyx_result._ignoretz = __pyx_state[2]; __pyx_result._length = __pyx_state[3]; __pyx_result._pos = __pyx_state[4]; __pyx_result._res = __pyx_state[5]; __pyx_result._token1 = __pyx_state[6]; __pyx_result._tokens = __pyx_state[7]
 *     __Pyx_UpdateUnpickledDict(__pyx_result, __pyx_state, 8)
*/

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cytimes.parser.__pyx_unpickle_Parser__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* #### Code section: module_exttypes ### */
static struct __pyx_vtabstruct_7cytimes_6parser_Configs __pyx_vtable_7cytimes_6parser_Configs;

static PyObject *__pyx_tp_new_7cytimes_6parser_Configs(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7cytimes_6parser_Configs *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7cytimes_6parser_Configs *)o);
  p->__pyx_vtab = __pyx_vtabptr_7cytimes_6parser_Configs;
  p->_jump = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_jump_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_pertain = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_pertain_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_utc = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_utc_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_tz = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_tz_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_month = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_month_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_weekday = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_weekday_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_hms = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_hms_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_ampm = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_ampm_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_Configs__cls = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_7cytimes_6parser_Configs(PyObject *o) {
  struct __pyx_obj_7cytimes_6parser_Configs *p = (struct __pyx_obj_7cytimes_6parser_Configs *)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_7cytimes_6parser_Configs) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_jump);
  Py_CLEAR(p->_jump_ext);
  Py_CLEAR(p->_pertain);
  Py_CLEAR(p->_pertain_ext);
  Py_CLEAR(p->_utc);
  Py_CLEAR(p->_utc_ext);
  Py_CLEAR(p->_tz);
  Py_CLEAR(p->_tz_ext);
  Py_CLEAR(p->_month);
  Py_CLEAR(p->_month_ext);
  Py_CLEAR(p->_weekday);
  Py_CLEAR(p->_weekday_ext);
  Py_CLEAR(p->_hms);
  Py_CLEAR(p->_hms_ext);
  Py_CLEAR(p->_ampm);
  Py_CLEAR(p->_ampm_ext);
  Py_CLEAR(p->_Configs__cls);
  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_7cytimes_6parser_Configs(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7cytimes_6parser_Configs *p = (struct __pyx_obj_7cytimes_6parser_Configs *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_jump) {
    e = (*v)(p->_jump, a); if (e) return e;
  }
  if (p->_jump_ext) {
    e = (*v)(p->_jump_ext, a); if (e) return e;
  }
  if (p->_pertain) {
    e = (*v)(p->_pertain, a); if (e) return e;
  }
  if (p->_pertain_ext) {
    e = (*v)(p->_pertain_ext, a); if (e) return e;
  }
  if (p->_utc) {
    e = (*v)(p->_utc, a); if (e) return e;
  }
  if (p->_utc_ext) {
    e = (*v)(p->_utc_ext, a); if (e) return e;
  }
  if (p->_tz) {
    e = (*v)(p->_tz, a); if (e) return e;
  }
  if (p->_tz_ext) {
    e = (*v)(p->_tz_ext, a); if (e) return e;
  }
  if (p->_month) {
    e = (*v)(p->_month, a); if (e) return e;
  }
  if (p->_month_ext) {
    e = (*v)(p->_month_ext, a); if (e) return e;
  }
  if (p->_weekday) {
    e = (*v)(p->_weekday, a); if (e) return e;
  }
  if (p->_weekday_ext) {
    e = (*v)(p->_weekday_ext, a); if (e) return e;
  }
  if (p->_hms) {
    e = (*v)(p->_hms, a); if (e) return e;
  }
  if (p->_hms_ext) {
    e = (*v)(p->_hms_ext, a); if (e) return e;
  }
  if (p->_ampm) {
    e = (*v)(p->_ampm, a); if (e) return e;
  }
  if (p->_ampm_ext) {
    e = (*v)(p->_ampm_ext, a); if (e) return e;
  }
  if (p->_Configs__cls) {
    e = (*v)(p->_Configs__cls, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7cytimes_6parser_Configs(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7cytimes_6parser_Configs *p = (struct __pyx_obj_7cytimes_6parser_Configs *)o;
  tmp = ((PyObject*)p->_jump);
  p->_jump = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_jump_ext);
  p->_jump_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_pertain);
  p->_pertain = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_pertain_ext);
  p->_pertain_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_utc);
  p->_utc = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_utc_ext);
  p->_utc_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_tz);
  p->_tz = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_tz_ext);
  p->_tz_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_month);
  p->_month = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_month_ext);
  p->_month_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_weekday);
  p->_weekday = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_weekday_ext);
  p->_weekday_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_hms);
  p->_hms = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_hms_ext);
  p->_hms_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_ampm);
  p->_ampm = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_ampm_ext);
  p->_ampm_ext = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_Configs__cls);
  p->_Configs__cls = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_yearfirst(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_9yearfirst_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_dayfirst(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_8dayfirst_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_jump(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_4jump_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_pertain(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_7pertain_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_utc(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_3utc_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_tz(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_2tz_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_month(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_5month_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_weekday(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_7weekday_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_hms(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_3hms_1__get__(o);
}

static PyObject *__pyx_getprop_7cytimes_6parser_7Configs_ampm(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_7cytimes_6parser_7Configs_4ampm_1__get__(o);
}

static PyMethodDef __pyx_methods_7cytimes_6parser_Configs[] = {
  {"from_parserinfo", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_3from_parserinfo, __Pyx_METH_FASTCALL|METH_KEYWORDS, __pyx_doc_7cytimes_6parser_7Configs_2from_parserinfo},
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_87__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_7Configs_89__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_7cytimes_6parser_Configs[] = {
  {"yearfirst", __pyx_getprop_7cytimes_6parser_7Configs_yearfirst, 0, PyDoc_STR("Whether to interpret ambiguous Y/M/D with the first position as `year` `<'bool'>`.\n\n        ## Notice\n        - `yearfirst` has higher priority than `dayfirst` when both are set to `True`.\n        "), 0},
  {"dayfirst", __pyx_getprop_7cytimes_6parser_7Configs_dayfirst, 0, PyDoc_STR("Whether to interpret ambiguous Y/M/D with the first position as `day` `<'bool'>`.\n\n        ## Notice\n        - `yearfirst` has higher priority than `dayfirst` when both are set to `True`.\n        "), 0},
  {"jump", __pyx_getprop_7cytimes_6parser_7Configs_jump, 0, PyDoc_STR("Set of tokens that should be skipped `<'set[str]'>`."), 0},
  {"pertain", __pyx_getprop_7cytimes_6parser_7Configs_pertain, 0, PyDoc_STR("Set of tokens to recognize as `pertain` `<'set[str]'>`."), 0},
  {"utc", __pyx_getprop_7cytimes_6parser_7Configs_utc, 0, PyDoc_STR("Set of tokens to recognize as `UTC` timezone `<'set[str]'>`."), 0},
  {"tz", __pyx_getprop_7cytimes_6parser_7Configs_tz, 0, PyDoc_STR("Map of tokens to recognize as a `timezone` `<'dict[str, int]'>`\n\n        - Keys are timezone names and values are UTC offsets in seconds.\n        "), 0},
  {"month", __pyx_getprop_7cytimes_6parser_7Configs_month, 0, PyDoc_STR("Map of tokens to recognize as `month` `<'dict[str, int]'>`.\n\n        - Keys are month names and values are month numbers: 1(Jan)...12(Dec).\n        "), 0},
  {"weekday", __pyx_getprop_7cytimes_6parser_7Configs_weekday, 0, PyDoc_STR("Map of tokens to recognize as `weekday` `<'dict[str, int]'>`.\n\n        - Keys are weekday names and values are weekday numbers: 0=Mon...6=Sun.\n        "), 0},
  {"hms", __pyx_getprop_7cytimes_6parser_7Configs_hms, 0, PyDoc_STR("Map of tokens to recognize as H/M/S flag `<'dict[str, int]'>`.\n\n        - Keys are H/M/S tokens and values are the corresponding\n        flag numbers: 0=hour; 1=minute; 2=second.\n        "), 0},
  {"ampm", __pyx_getprop_7cytimes_6parser_7Configs_ampm, 0, PyDoc_STR("Map of tokens to recognize as AM/PM flag `<'dict[str, int]'>`.\n\n        - Keys are the AM/PM tokens and values are the corresponding\n          flag numbers: 0=AM; 1=PM.\n        "), 0},
  {0, 0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_7cytimes_6parser_Configs_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_7cytimes_6parser_Configs},
  {Py_tp_repr, (void *)__pyx_pw_7cytimes_6parser_7Configs_85__repr__},
  {Py_tp_doc, (void *)PyDoc_STR("Configuration for the `<'Parser'>`.\n\n    A `Configs` instance controls how tokens are recognized and how ambiguous\n    year/month/day triples are interpreted. It maintains several token namespaces\n    (e.g., month, weekday, AM/PM, timezone names) and enforces cross-namespace\n    uniqueness rules so a token cannot silently change meaning.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_7cytimes_6parser_Configs},
  {Py_tp_clear, (void *)__pyx_tp_clear_7cytimes_6parser_Configs},
  {Py_tp_methods, (void *)__pyx_methods_7cytimes_6parser_Configs},
  {Py_tp_getset, (void *)__pyx_getsets_7cytimes_6parser_Configs},
  {Py_tp_init, (void *)__pyx_pw_7cytimes_6parser_7Configs_1__init__},
  {Py_tp_new, (void *)__pyx_tp_new_7cytimes_6parser_Configs},
  {0, 0},
};
static PyType_Spec __pyx_type_7cytimes_6parser_Configs_spec = {
  "cytimes.parser.Configs",
  sizeof(struct __pyx_obj_7cytimes_6parser_Configs),
  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_7cytimes_6parser_Configs_slots,
};
#else

static PyTypeObject __pyx_type_7cytimes_6parser_Configs = {
  PyVarObject_HEAD_INIT(0, 0)
  "cytimes.parser.""Configs", /*tp_name*/
  sizeof(struct __pyx_obj_7cytimes_6parser_Configs), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7cytimes_6parser_Configs, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  __pyx_pw_7cytimes_6parser_7Configs_85__repr__, /*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*/
  PyDoc_STR("Configuration for the `<'Parser'>`.\n\n    A `Configs` instance controls how tokens are recognized and how ambiguous\n    year/month/day triples are interpreted. It maintains several token namespaces\n    (e.g., month, weekday, AM/PM, timezone names) and enforces cross-namespace\n    uniqueness rules so a token cannot silently change meaning.\n    "), /*tp_doc*/
  __pyx_tp_traverse_7cytimes_6parser_Configs, /*tp_traverse*/
  __pyx_tp_clear_7cytimes_6parser_Configs, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7cytimes_6parser_Configs, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_7cytimes_6parser_Configs, /*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_7cytimes_6parser_7Configs_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7cytimes_6parser_Configs, /*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_7cytimes_6parser_Result __pyx_vtable_7cytimes_6parser_Result;

static PyObject *__pyx_tp_new_7cytimes_6parser_Result(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7cytimes_6parser_Result *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7cytimes_6parser_Result *)o);
  p->__pyx_vtab = __pyx_vtabptr_7cytimes_6parser_Result;
  if (unlikely(__pyx_pw_7cytimes_6parser_6Result_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_7cytimes_6parser_Result(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_7cytimes_6parser_Result) {
      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 PyMethodDef __pyx_methods_7cytimes_6parser_Result[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Result_7__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Result_9__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_7cytimes_6parser_Result_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_7cytimes_6parser_Result},
  {Py_tp_repr, (void *)__pyx_pw_7cytimes_6parser_6Result_3__repr__},
  {Py_nb_bool, (void *)__pyx_pw_7cytimes_6parser_6Result_5__bool__},
  {Py_tp_doc, (void *)PyDoc_STR("Parsed datetime result container for the Parser.\n\n    This class stores raw date tokens as they are encountered (up to three\n    positional Y/M/D `values`) and, separately, which positions are known to be\n    year/month/day (`role indices`). It then resolves ambiguities to concrete\n    `year`, `month`, and `day`, and also carries time/weekday/tzoffset\n    information when available.\n\n    ## Sentinels\n    - Unset date/time component: `-1`\n    - Unset tzoffset: `-100_000`\n\n    ## Notice\n    This class is designed to be used internally by the Parser\n    only, and all attributes/methods are only available in Cython\n    (`NOT` exposed to Python).\n    ")},
  {Py_tp_methods, (void *)__pyx_methods_7cytimes_6parser_Result},
  {Py_tp_new, (void *)__pyx_tp_new_7cytimes_6parser_Result},
  {0, 0},
};
static PyType_Spec __pyx_type_7cytimes_6parser_Result_spec = {
  "cytimes.parser.Result",
  sizeof(struct __pyx_obj_7cytimes_6parser_Result),
  0,
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE,
  __pyx_type_7cytimes_6parser_Result_slots,
};
#else

static PyNumberMethods __pyx_tp_as_number_Result = {
  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_7cytimes_6parser_6Result_5__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 PyTypeObject __pyx_type_7cytimes_6parser_Result = {
  PyVarObject_HEAD_INIT(0, 0)
  "cytimes.parser.""Result", /*tp_name*/
  sizeof(struct __pyx_obj_7cytimes_6parser_Result), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7cytimes_6parser_Result, /*tp_dealloc*/
  0, /*tp_vectorcall_offset*/
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  0, /*tp_as_async*/
  __pyx_pw_7cytimes_6parser_6Result_3__repr__, /*tp_repr*/
  &__pyx_tp_as_number_Result, /*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*/
  PyDoc_STR("Parsed datetime result container for the Parser.\n\n    This class stores raw date tokens as they are encountered (up to three\n    positional Y/M/D `values`) and, separately, which positions are known to be\n    year/month/day (`role indices`). It then resolves ambiguities to concrete\n    `year`, `month`, and `day`, and also carries time/weekday/tzoffset\n    information when available.\n\n    ## Sentinels\n    - Unset date/time component: `-1`\n    - Unset tzoffset: `-100_000`\n\n    ## Notice\n    This class is designed to be used internally by the Parser\n    only, and all attributes/methods are only available in Cython\n    (`NOT` exposed to Python).\n    "), /*tp_doc*/
  0, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7cytimes_6parser_Result, /*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_7cytimes_6parser_Result, /*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_7cytimes_6parser_Parser __pyx_vtable_7cytimes_6parser_Parser;

static PyObject *__pyx_tp_new_7cytimes_6parser_Parser(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_7cytimes_6parser_Parser *p;
  PyObject *o;
  o = __Pyx_AllocateExtensionType(t, 0);
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_7cytimes_6parser_Parser *)o);
  p->__pyx_vtab = __pyx_vtabptr_7cytimes_6parser_Parser;
  p->_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None); Py_INCREF(Py_None);
  p->_res = ((struct __pyx_obj_7cytimes_6parser_Result *)Py_None); Py_INCREF(Py_None);
  p->_tokens = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_token1 = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->_Parser__cls = Py_None; Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_7cytimes_6parser_Parser(PyObject *o) {
  struct __pyx_obj_7cytimes_6parser_Parser *p = (struct __pyx_obj_7cytimes_6parser_Parser *)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_7cytimes_6parser_Parser) {
      if (PyObject_CallFinalizerFromDealloc(o)) return;
    }
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->_cfg);
  Py_CLEAR(p->_res);
  Py_CLEAR(p->_tokens);
  Py_CLEAR(p->_token1);
  Py_CLEAR(p->_Parser__cls);
  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_7cytimes_6parser_Parser(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_7cytimes_6parser_Parser *p = (struct __pyx_obj_7cytimes_6parser_Parser *)o;
  {
    e = __Pyx_call_type_traverse(o, 1, v, a);
    if (e) return e;
  }
  if (p->_cfg) {
    e = (*v)(((PyObject *)p->_cfg), a); if (e) return e;
  }
  if (p->_res) {
    e = (*v)(((PyObject *)p->_res), a); if (e) return e;
  }
  if (p->_tokens) {
    e = (*v)(p->_tokens, a); if (e) return e;
  }
  if (p->_Parser__cls) {
    e = (*v)(p->_Parser__cls, a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_7cytimes_6parser_Parser(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_7cytimes_6parser_Parser *p = (struct __pyx_obj_7cytimes_6parser_Parser *)o;
  tmp = ((PyObject*)p->_cfg);
  p->_cfg = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_res);
  p->_res = ((struct __pyx_obj_7cytimes_6parser_Result *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_tokens);
  p->_tokens = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->_Parser__cls);
  p->_Parser__cls = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_7cytimes_6parser_Parser[] = {
  {"__reduce_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Parser_5__reduce_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {"__setstate_cython__", (PyCFunction)(void(*)(void))(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_7cytimes_6parser_6Parser_7__setstate_cython__, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0},
  {0, 0, 0, 0}
};
#if CYTHON_USE_TYPE_SPECS
static PyType_Slot __pyx_type_7cytimes_6parser_Parser_slots[] = {
  {Py_tp_dealloc, (void *)__pyx_tp_dealloc_7cytimes_6parser_Parser},
  {Py_tp_doc, (void *)PyDoc_STR("Flexible date/time parser with ISO fast-path and token heuristics.\n\n    The `Parser` reads a free-form date/time string and populates an\n    internal `Result` accumulator via two complementary strategies:\n\n    1) `ISO fast-path`: a tuned parser for ISO-8601 calendar/ordinal/week dates\n       with optional time, fractional seconds, and timezone. When the core ISO\n       portion parses but an extra tail remains (e.g., AM/PM, weekday, timezone\n       adornments), a lightweight \342\200\234ISO-extra\342\200\235 pass consumes the tail.\n    2) `Heuristic token path`: a tokenizer + left\342\206\222right scan that recognizes\n       numeric blocks, month/weekday names, AM/PM, timezone names, and timezone\n       offsets. Ambiguous Y/M/D triples are resolved later according to the\n       configuration (or explicit flags passed to `parse`).\n\n    The parser defers construction of the final `datetime` object until all\n    fields have been gathered and disambiguated.\n    ")},
  {Py_tp_traverse, (void *)__pyx_tp_traverse_7cytimes_6parser_Parser},
  {Py_tp_clear, (void *)__pyx_tp_clear_7cytimes_6parser_Parser},
  {Py_tp_methods, (void *)__pyx_methods_7cytimes_6parser_Parser},
  {Py_tp_init, (void *)__pyx_pw_7cytimes_6parser_6Parser_1__init__},
  {Py_tp_new, (void *)__pyx_tp_new_7cytimes_6parser_Parser},
  {0, 0},
};
static PyType_Spec __pyx_type_7cytimes_6parser_Parser_spec = {
  "cytimes.parser.Parser",
  sizeof(struct __pyx_obj_7cytimes_6parser_Parser),
  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_7cytimes_6parser_Parser_slots,
};
#else

static PyTypeObject __pyx_type_7cytimes_6parser_Parser = {
  PyVarObject_HEAD_INIT(0, 0)
  "cytimes.parser.""Parser", /*tp_name*/
  sizeof(struct __pyx_obj_7cytimes_6parser_Parser), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_7cytimes_6parser_Parser, /*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*/
  PyDoc_STR("Flexible date/time parser with ISO fast-path and token heuristics.\n\n    The `Parser` reads a free-form date/time string and populates an\n    internal `Result` accumulator via two complementary strategies:\n\n    1) `ISO fast-path`: a tuned parser for ISO-8601 calendar/ordinal/week dates\n       with optional time, fractional seconds, and timezone. When the core ISO\n       portion parses but an extra tail remains (e.g., AM/PM, weekday, timezone\n       adornments), a lightweight \342\200\234ISO-extra\342\200\235 pass consumes the tail.\n    2) `Heuristic token path`: a tokenizer + left\342\206\222right scan that recognizes\n       numeric blocks, month/weekday names, AM/PM, timezone names, and timezone\n       offsets. Ambiguous Y/M/D triples are resolved later according to the\n       configuration (or explicit flags passed to `parse`).\n\n    The parser defers construction of the final `datetime` object until all\n    fields have been gathered and disambiguated.\n    "), /*tp_doc*/
  __pyx_tp_traverse_7cytimes_6parser_Parser, /*tp_traverse*/
  __pyx_tp_clear_7cytimes_6parser_Parser, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_7cytimes_6parser_Parser, /*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_7cytimes_6parser_6Parser_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_7cytimes_6parser_Parser, /*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_v_7cytimes_6parser__DEFAULT_PERTAIN = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_JUMP = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_UTC = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_TZ = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_MONTH = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_HMS = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_AMPM = ((PyObject*)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_CONFIGS = ((struct __pyx_obj_7cytimes_6parser_Configs *)Py_None); Py_INCREF(Py_None);
  __pyx_v_7cytimes_6parser__DEFAULT_PARSER = ((struct __pyx_obj_7cytimes_6parser_Parser *)Py_None); Py_INCREF(Py_None);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  {
    __pyx_t_1 = __Pyx_ApiExport_GetApiDict(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    const char * __pyx_export_signature = __Pyx_PyBytes_AsString(__pyx_mstate_global->__pyx_kp_b_PyObject_struct___pyx_obj_7cytim);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (unlikely(!__pyx_export_signature)) __PYX_ERR(0, 1, __pyx_L1_error)
    #endif
    const char * __pyx_export_name = __pyx_export_signature + 105;
    void *const __pyx_export_pointers[] = {(void *)&__pyx_v_7cytimes_6parser__DEFAULT_AMPM, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_HMS, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_JUMP, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_MONTH, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_PERTAIN, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_TZ, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_UTC, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS, (void *)&__pyx_v_7cytimes_6parser__DEFAULT_PARSER, (void *) NULL};
    void *const *__pyx_export_pointer = __pyx_export_pointers;
    const char *__pyx_export_current_signature = __pyx_export_signature;
    while (*__pyx_export_pointer) {
      if (__Pyx_ExportVoidPtr(__pyx_t_1, __pyx_export_name, *__pyx_export_pointer, __pyx_export_current_signature) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
      ++__pyx_export_pointer;
      __pyx_export_name = strchr(__pyx_export_name, '\0') + 1;
      __pyx_export_signature = strchr(__pyx_export_signature, '\0') + 1;
      if (*__pyx_export_signature != '\0') __pyx_export_current_signature = __pyx_export_signature;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_function_export_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  {
    __pyx_t_1 = __Pyx_ApiExport_GetApiDict(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    const char * __pyx_export_signature = __Pyx_PyBytes_AsString(__pyx_mstate_global->__pyx_kp_b_PyDateTime_DateTime_PyObject_int);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (unlikely(!__pyx_export_signature)) __PYX_ERR(0, 1, __pyx_L1_error)
    #endif
    const char * __pyx_export_name = __pyx_export_signature + 536;
    void (*const __pyx_export_pointers[])(void) = {(void (*)(void))&__pyx_f_7cytimes_6parser_parse, (void (*)(void))&__pyx_f_7cytimes_6parser_parse_obj, (void (*)(void))&__pyx_f_7cytimes_6parser_timelex, (void (*)(void))&__pyx_f_7cytimes_6parser_parse_month, (void (*)(void))&__pyx_f_7cytimes_6parser_parse_weekday, (void (*)(void)) NULL};
    void (*const *__pyx_export_pointer)(void) = __pyx_export_pointers;
    const char *__pyx_export_current_signature = __pyx_export_signature;
    while (*__pyx_export_pointer) {
      if (__Pyx_ExportFunction(__pyx_t_1, __pyx_export_name, *__pyx_export_pointer, __pyx_export_current_signature) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
      ++__pyx_export_pointer;
      __pyx_export_name = strchr(__pyx_export_name, '\0') + 1;
      __pyx_export_signature = strchr(__pyx_export_signature, '\0') + 1;
      if (*__pyx_export_signature != '\0') __pyx_export_current_signature = __pyx_export_signature;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

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_7cytimes_6parser_Configs = &__pyx_vtable_7cytimes_6parser_Configs;
  __pyx_vtable_7cytimes_6parser_Configs.order_hint = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_order_hint;
  __pyx_vtable_7cytimes_6parser_Configs.add_jump = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_jump;
  __pyx_vtable_7cytimes_6parser_Configs.remove_jump = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_jump;
  __pyx_vtable_7cytimes_6parser_Configs.replace_jump = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_jump *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_jump;
  __pyx_vtable_7cytimes_6parser_Configs.is_jump = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_jump;
  __pyx_vtable_7cytimes_6parser_Configs.add_pertain = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_pertain;
  __pyx_vtable_7cytimes_6parser_Configs.remove_pertain = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_pertain;
  __pyx_vtable_7cytimes_6parser_Configs.replace_pertain = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_pertain *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_pertain;
  __pyx_vtable_7cytimes_6parser_Configs.is_pertain = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_pertain;
  __pyx_vtable_7cytimes_6parser_Configs.add_utc = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_utc;
  __pyx_vtable_7cytimes_6parser_Configs.remove_utc = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_utc;
  __pyx_vtable_7cytimes_6parser_Configs.replace_utc = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_utc *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_utc;
  __pyx_vtable_7cytimes_6parser_Configs.is_utc = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_utc;
  __pyx_vtable_7cytimes_6parser_Configs.add_tz = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_add_tz *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_add_tz;
  __pyx_vtable_7cytimes_6parser_Configs.remove_tz = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_tz;
  __pyx_vtable_7cytimes_6parser_Configs.replace_tz = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_tz *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_tz;
  __pyx_vtable_7cytimes_6parser_Configs.is_tz = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_tz;
  __pyx_vtable_7cytimes_6parser_Configs.get_tz_offset = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_get_tz_offset;
  __pyx_vtable_7cytimes_6parser_Configs.add_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_month;
  __pyx_vtable_7cytimes_6parser_Configs.remove_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_month;
  __pyx_vtable_7cytimes_6parser_Configs.replace_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_month *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_month;
  __pyx_vtable_7cytimes_6parser_Configs.is_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_month;
  __pyx_vtable_7cytimes_6parser_Configs.get_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_get_month;
  __pyx_vtable_7cytimes_6parser_Configs.add_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_weekday;
  __pyx_vtable_7cytimes_6parser_Configs.remove_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_weekday;
  __pyx_vtable_7cytimes_6parser_Configs.replace_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_weekday *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_weekday;
  __pyx_vtable_7cytimes_6parser_Configs.is_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_weekday;
  __pyx_vtable_7cytimes_6parser_Configs.get_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_get_weekday;
  __pyx_vtable_7cytimes_6parser_Configs.add_hms = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_hms;
  __pyx_vtable_7cytimes_6parser_Configs.remove_hms = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_hms;
  __pyx_vtable_7cytimes_6parser_Configs.replace_hms = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_hms *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_hms;
  __pyx_vtable_7cytimes_6parser_Configs.is_hms = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_hms;
  __pyx_vtable_7cytimes_6parser_Configs.get_hms = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_get_hms;
  __pyx_vtable_7cytimes_6parser_Configs.add_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_add_ampm;
  __pyx_vtable_7cytimes_6parser_Configs.remove_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_remove_ampm;
  __pyx_vtable_7cytimes_6parser_Configs.replace_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_7Configs_replace_ampm *__pyx_optional_args))__pyx_f_7cytimes_6parser_7Configs_replace_ampm;
  __pyx_vtable_7cytimes_6parser_Configs.is_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_is_ampm;
  __pyx_vtable_7cytimes_6parser_Configs.get_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_get_ampm;
  __pyx_vtable_7cytimes_6parser_Configs.clear_settings = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_clear_settings;
  __pyx_vtable_7cytimes_6parser_Configs.reset_settings = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, int __pyx_skip_dispatch))__pyx_f_7cytimes_6parser_7Configs_reset_settings;
  __pyx_vtable_7cytimes_6parser_Configs._ensure_str_token = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_7Configs__ensure_str_token;
  __pyx_vtable_7cytimes_6parser_Configs._validate_token = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_7Configs__validate_token;
  __pyx_vtable_7cytimes_6parser_Configs._lowercase_token = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_7Configs__lowercase_token;
  __pyx_vtable_7cytimes_6parser_Configs._gen_token_case_variants = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *))__pyx_f_7cytimes_6parser_7Configs__gen_token_case_variants;
  __pyx_vtable_7cytimes_6parser_Configs._ensure_int_value = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_7Configs__ensure_int_value;
  __pyx_vtable_7cytimes_6parser_Configs._validate_value = (int (*)(struct __pyx_obj_7cytimes_6parser_Configs *, PyObject *, int, int, int))__pyx_f_7cytimes_6parser_7Configs__validate_value;
  __pyx_vtable_7cytimes_6parser_Configs._cls = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Configs *))__pyx_f_7cytimes_6parser_7Configs__cls;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_7cytimes_6parser_Configs_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs)) __PYX_ERR(0, 125, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_7cytimes_6parser_Configs_spec, __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs = &__pyx_type_7cytimes_6parser_Configs;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs->tp_dictoffset && __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 125, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_7cytimes_6parser_7Configs___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7cytimes_6parser_7Configs___init__.doc = __pyx_doc_7cytimes_6parser_7Configs___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7cytimes_6parser_7Configs___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs, __pyx_vtabptr_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Configs, (PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Configs) < (0)) __PYX_ERR(0, 125, __pyx_L1_error)
  __pyx_vtabptr_7cytimes_6parser_Result = &__pyx_vtable_7cytimes_6parser_Result;
  __pyx_vtable_7cytimes_6parser_Result.set_ymd_int = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, int, PY_LONG_LONG))__pyx_f_7cytimes_6parser_6Result_set_ymd_int;
  __pyx_vtable_7cytimes_6parser_Result.set_ymd_str = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, int, PyObject *, struct __pyx_opt_args_7cytimes_6parser_6Result_set_ymd_str *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Result_set_ymd_str;
  __pyx_vtable_7cytimes_6parser_Result.ymd_slots_filled = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_ymd_slots_filled;
  __pyx_vtable_7cytimes_6parser_Result.ymd_roles_resolved = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_ymd_roles_resolved;
  __pyx_vtable_7cytimes_6parser_Result.could_be_day = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG))__pyx_f_7cytimes_6parser_6Result_could_be_day;
  __pyx_vtable_7cytimes_6parser_Result.could_be_doy = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, PY_LONG_LONG))__pyx_f_7cytimes_6parser_6Result_could_be_doy;
  __pyx_vtable_7cytimes_6parser_Result.resolve = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, int, int))__pyx_f_7cytimes_6parser_6Result_resolve;
  __pyx_vtable_7cytimes_6parser_Result.valid = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_valid;
  __pyx_vtable_7cytimes_6parser_Result.is_year_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_year_set;
  __pyx_vtable_7cytimes_6parser_Result.is_month_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_month_set;
  __pyx_vtable_7cytimes_6parser_Result.is_day_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_day_set;
  __pyx_vtable_7cytimes_6parser_Result.is_hour_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_hour_set;
  __pyx_vtable_7cytimes_6parser_Result.is_minute_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_minute_set;
  __pyx_vtable_7cytimes_6parser_Result.is_second_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_second_set;
  __pyx_vtable_7cytimes_6parser_Result.is_microsecond_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_microsecond_set;
  __pyx_vtable_7cytimes_6parser_Result.is_weekday_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_weekday_set;
  __pyx_vtable_7cytimes_6parser_Result.is_doy_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_doy_set;
  __pyx_vtable_7cytimes_6parser_Result.is_ampm_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_ampm_set;
  __pyx_vtable_7cytimes_6parser_Result.is_tzoffset_set = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result_is_tzoffset_set;
  __pyx_vtable_7cytimes_6parser_Result._record_ymd = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *, int, int))__pyx_f_7cytimes_6parser_6Result__record_ymd;
  __pyx_vtable_7cytimes_6parser_Result._reset = (int (*)(struct __pyx_obj_7cytimes_6parser_Result *))__pyx_f_7cytimes_6parser_6Result__reset;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_7cytimes_6parser_Result_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result)) __PYX_ERR(0, 1580, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_7cytimes_6parser_Result_spec, __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result = &__pyx_type_7cytimes_6parser_Result;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result->tp_dictoffset && __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result, __pyx_vtabptr_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Result, (PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Result) < (0)) __PYX_ERR(0, 1580, __pyx_L1_error)
  __pyx_vtabptr_7cytimes_6parser_Parser = &__pyx_vtable_7cytimes_6parser_Parser;
  __pyx_vtable_7cytimes_6parser_Parser.parse = (PyDateTime_DateTime *(*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_6Parser_parse *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser_parse;
  __pyx_vtable_7cytimes_6parser_Parser._process = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, int))__pyx_f_7cytimes_6parser_6Parser__process;
  __pyx_vtable_7cytimes_6parser_Parser._build = (PyDateTime_DateTime *(*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__build;
  __pyx_vtable_7cytimes_6parser_Parser._gen_dt = (PyDateTime_DateTime *(*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *, PyObject *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__gen_dt;
  __pyx_vtable_7cytimes_6parser_Parser._process_iso_format = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__process_iso_format;
  __pyx_vtable_7cytimes_6parser_Parser._parse_iso_date = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_iso_date;
  __pyx_vtable_7cytimes_6parser_Parser._parse_iso_time = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_iso_time;
  __pyx_vtable_7cytimes_6parser_Parser._parse_iso_extra = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_iso_extra;
  __pyx_vtable_7cytimes_6parser_Parser._process_timelex_tokens = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__process_timelex_tokens;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_numeric = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_numeric;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_month = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_month;
  __pyx_vtable_7cytimes_6parser_Parser._parse_iso_week = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_iso_week;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_weekday = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_weekday;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_ampm;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_tzname = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_tzname;
  __pyx_vtable_7cytimes_6parser_Parser._parse_token_tzoffset = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, PyObject *))__pyx_f_7cytimes_6parser_6Parser__parse_token_tzoffset;
  __pyx_vtable_7cytimes_6parser_Parser._has_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t))__pyx_f_7cytimes_6parser_6Parser__has_token;
  __pyx_vtable_7cytimes_6parser_Parser._get_token = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Parser *, Py_ssize_t))__pyx_f_7cytimes_6parser_6Parser__get_token;
  __pyx_vtable_7cytimes_6parser_Parser._get_token1 = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Parser *))__pyx_f_7cytimes_6parser_6Parser__get_token1;
  __pyx_vtable_7cytimes_6parser_Parser._get_next_token = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Parser *))__pyx_f_7cytimes_6parser_6Parser__get_next_token;
  __pyx_vtable_7cytimes_6parser_Parser._reset_token_peeks = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *))__pyx_f_7cytimes_6parser_6Parser__reset_token_peeks;
  __pyx_vtable_7cytimes_6parser_Parser._set_ymd_by_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_ymd_by_token *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser__set_ymd_by_token;
  __pyx_vtable_7cytimes_6parser_Parser._set_hms_by_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, int, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hms_by_token *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser__set_hms_by_token;
  __pyx_vtable_7cytimes_6parser_Parser._set_hour_by_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_hour_by_token *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser__set_hour_by_token;
  __pyx_vtable_7cytimes_6parser_Parser._set_minute_by_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_minute_by_token *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser__set_minute_by_token;
  __pyx_vtable_7cytimes_6parser_Parser._set_second_by_token = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, struct __pyx_opt_args_7cytimes_6parser_6Parser__set_second_by_token *__pyx_optional_args))__pyx_f_7cytimes_6parser_6Parser__set_second_by_token;
  __pyx_vtable_7cytimes_6parser_Parser._adjust_hour_by_ampm = (int (*)(struct __pyx_obj_7cytimes_6parser_Parser *, int, int))__pyx_f_7cytimes_6parser_6Parser__adjust_hour_by_ampm;
  __pyx_vtable_7cytimes_6parser_Parser._cls = (PyObject *(*)(struct __pyx_obj_7cytimes_6parser_Parser *))__pyx_f_7cytimes_6parser_6Parser__cls;
  #if CYTHON_USE_TYPE_SPECS
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_7cytimes_6parser_Parser_spec, NULL); if (unlikely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser)) __PYX_ERR(0, 2292, __pyx_L1_error)
  if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_7cytimes_6parser_Parser_spec, __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  #else
  __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser = &__pyx_type_7cytimes_6parser_Parser;
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  #endif
  #if !CYTHON_USE_TYPE_SPECS
  if (__Pyx_PyType_Ready(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  #endif
  #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030E0000
  PyUnstable_Object_EnableDeferredRefcount((PyObject*)__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser);
  #endif
  #if !CYTHON_COMPILING_IN_LIMITED_API
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser->tp_dictoffset && __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser->tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser->tp_getattro = PyObject_GenericGetAttr;
  }
  #endif
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
  {
    PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 2292, __pyx_L1_error)
    if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
      __pyx_wrapperbase_7cytimes_6parser_6Parser___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
      __pyx_wrapperbase_7cytimes_6parser_6Parser___init__.doc = __pyx_doc_7cytimes_6parser_6Parser___init__;
      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_7cytimes_6parser_6Parser___init__;
    }
  }
  #endif
  if (__Pyx_SetVtable(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser, __pyx_vtabptr_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  if (__Pyx_MergeVtables(__pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_Parser, (PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject *) __pyx_mstate->__pyx_ptype_7cytimes_6parser_Parser) < (0)) __PYX_ERR(0, 2292, __pyx_L1_error)
  __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);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 9, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_4type_type = __Pyx_ImportType_3_2_1(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyTypeObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyHeapTypeObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyHeapTypeObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_4type_type) __PYX_ERR(8, 9, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_4bool_bool = __Pyx_ImportType_3_2_1(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "bool",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyLongObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyLongObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyLongObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyLongObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_4bool_bool) __PYX_ERR(9, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 16, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_7complex_complex = __Pyx_ImportType_3_2_1(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "complex",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyComplexObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  0, 0,
  #else
  sizeof(PyComplexObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyComplexObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_7complex_complex) __PYX_ERR(10, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("datetime"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_7cpython_8datetime_date = __Pyx_ImportType_3_2_1(__pyx_t_1, "datetime", "date",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyDateTime_Date), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Date),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyDateTime_Date), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Date),
  #else
  sizeof(PyDateTime_Date), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Date),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_8datetime_date) __PYX_ERR(2, 43, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_7cpython_8datetime_time = __Pyx_ImportType_3_2_1(__pyx_t_1, "datetime", "time",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyDateTime_Time), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Time),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyDateTime_Time), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Time),
  #else
  sizeof(PyDateTime_Time), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Time),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_8datetime_time) __PYX_ERR(2, 56, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_7cpython_8datetime_datetime = __Pyx_ImportType_3_2_1(__pyx_t_1, "datetime", "datetime",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyDateTime_DateTime), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_DateTime),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyDateTime_DateTime), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_DateTime),
  #else
  sizeof(PyDateTime_DateTime), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_DateTime),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_8datetime_datetime) __PYX_ERR(2, 82, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_7cpython_8datetime_timedelta = __Pyx_ImportType_3_2_1(__pyx_t_1, "datetime", "timedelta",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyDateTime_Delta), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Delta),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyDateTime_Delta), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Delta),
  #else
  sizeof(PyDateTime_Delta), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_Delta),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_8datetime_timedelta) __PYX_ERR(2, 120, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_7cpython_8datetime_tzinfo = __Pyx_ImportType_3_2_1(__pyx_t_1, "datetime", "tzinfo",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyDateTime_TZInfo), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_TZInfo),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyDateTime_TZInfo), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_TZInfo),
  #else
  sizeof(PyDateTime_TZInfo), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyDateTime_TZInfo),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_7cpython_8datetime_tzinfo) __PYX_ERR(2, 133, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("numpy"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 228, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_mstate->__pyx_ptype_5numpy_dtype = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "dtype",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArray_Descr),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArray_Descr),
  #else
  sizeof(PyArray_Descr), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArray_Descr),
  #endif
  __Pyx_ImportType_CheckSize_Ignore_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_dtype) __PYX_ERR(3, 228, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_flatiter = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "flatiter",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayIterObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayIterObject),
  #else
  sizeof(PyArrayIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayIterObject),
  #endif
  __Pyx_ImportType_CheckSize_Ignore_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_flatiter) __PYX_ERR(3, 273, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_broadcast = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "broadcast",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayMultiIterObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayMultiIterObject),
  #else
  sizeof(PyArrayMultiIterObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayMultiIterObject),
  #endif
  __Pyx_ImportType_CheckSize_Ignore_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_broadcast) __PYX_ERR(3, 277, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_ndarray = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "ndarray",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayObject),
  #else
  sizeof(PyArrayObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyArrayObject),
  #endif
  __Pyx_ImportType_CheckSize_Ignore_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_ndarray) __PYX_ERR(3, 316, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_generic = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "generic",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_generic) __PYX_ERR(3, 825, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_number = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "number",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_number) __PYX_ERR(3, 827, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_integer = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "integer",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_integer) __PYX_ERR(3, 829, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_signedinteger = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "signedinteger",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_signedinteger) __PYX_ERR(3, 831, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_unsignedinteger = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "unsignedinteger",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_unsignedinteger) __PYX_ERR(3, 833, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_inexact = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "inexact",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_inexact) __PYX_ERR(3, 835, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_floating = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "floating",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_floating) __PYX_ERR(3, 837, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_complexfloating = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "complexfloating",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_complexfloating) __PYX_ERR(3, 839, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_flexible = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "flexible",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_flexible) __PYX_ERR(3, 841, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_character = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "character",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #else
  sizeof(PyObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyObject),
  #endif
  __Pyx_ImportType_CheckSize_Warn_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_character) __PYX_ERR(3, 843, __pyx_L1_error)
  __pyx_mstate->__pyx_ptype_5numpy_ufunc = __Pyx_ImportType_3_2_1(__pyx_t_1, "numpy", "ufunc",
  #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000
  sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyUFuncObject),
  #elif CYTHON_COMPILING_IN_LIMITED_API
  sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyUFuncObject),
  #else
  sizeof(PyUFuncObject), __PYX_GET_STRUCT_ALIGNMENT_3_2_1(PyUFuncObject),
  #endif
  __Pyx_ImportType_CheckSize_Ignore_3_2_1); if (!__pyx_mstate->__pyx_ptype_5numpy_ufunc) __PYX_ERR(3, 907, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_variable_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  {
    __pyx_t_1 = PyImport_ImportModule("cytimes.utils"); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    const char * __pyx_import_signature = __Pyx_PyBytes_AsString(__pyx_mstate_global->__pyx_kp_b_PY_LONG_LONG_PyDateTime_DateTime);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (unlikely(!__pyx_import_signature)) __PYX_ERR(0, 1, __pyx_L1_error)
    #endif
    const char * __pyx_import_name = __pyx_import_signature + 185;
    void **const __pyx_import_pointers[] = {(void **)&__pyx_vp_7cytimes_5utils_DT64_NS_DD_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_DD_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_HH_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_HH_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MI_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MI_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MM_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MM_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MS_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_MS_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_NS_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_NS_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_SS_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_SS_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_US_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_US_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_WW_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_WW_MIN, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_YY_MAX, (void **)&__pyx_vp_7cytimes_5utils_DT64_NS_YY_MIN, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_C100, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_C4, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_C400, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_CBASE, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_DAY, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_HOUR, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_MICROSECOND, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_MILLISECOND, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_MINUTE, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_MONTH, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_SECOND, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_YEAR, (void **)&__pyx_vp_7cytimes_5utils_MS_DAY, (void **)&__pyx_vp_7cytimes_5utils_MS_HOUR, (void **)&__pyx_vp_7cytimes_5utils_MS_MINUTE, (void **)&__pyx_vp_7cytimes_5utils_MS_SECOND, (void **)&__pyx_vp_7cytimes_5utils_NS_DAY, (void **)&__pyx_vp_7cytimes_5utils_NS_HOUR, (void **)&__pyx_vp_7cytimes_5utils_NS_MICROSECOND, (void **)&__pyx_vp_7cytimes_5utils_NS_MILLISECOND, (void **)&__pyx_vp_7cytimes_5utils_NS_MINUTE, (void **)&__pyx_vp_7cytimes_5utils_NS_SECOND, (void **)&__pyx_vp_7cytimes_5utils_SS_DAY, (void **)&__pyx_vp_7cytimes_5utils_SS_HOUR, (void **)&__pyx_vp_7cytimes_5utils_SS_MINUTE, (void **)&__pyx_vp_7cytimes_5utils_TD64_MM_MICROSECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_MM_MILLISECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_MM_NANOSECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_MM_SECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_YY_MICROSECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_YY_MILLISECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_YY_NANOSECOND, (void **)&__pyx_vp_7cytimes_5utils_TD64_YY_SECOND, (void **)&__pyx_vp_7cytimes_5utils_US_DAY, (void **)&__pyx_vp_7cytimes_5utils_US_HOUR, (void **)&__pyx_vp_7cytimes_5utils_US_MILLISECOND, (void **)&__pyx_vp_7cytimes_5utils_US_MINUTE, (void **)&__pyx_vp_7cytimes_5utils_US_SECOND, (void **)&__pyx_vp_7cytimes_5utils_EPOCH_DT, (void **)&__pyx_vp_7cytimes_5utils_UTC, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_AS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_DD, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_FS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_HH, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_MI, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_MM, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_MS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_NS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_PS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_SS, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_US, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_WW, (void **)&__pyx_vp_7cytimes_5utils_DT64_DTYPE_YY, (void **)&__pyx_vp_7cytimes_5utils_NAT, (void **)&__pyx_vp_7cytimes_5utils_T_TIMEZONE, (void **)&__pyx_vp_7cytimes_5utils_T_ZONEINFO, (void **)&__pyx_vp_7cytimes_5utils__LOCAL_TIMEZONE, (void **)&__pyx_vp_7cytimes_5utils__UTC_ALIASES, (void **)&__pyx_vp_7cytimes_5utils_TD64_MM_DAY, (void **)&__pyx_vp_7cytimes_5utils_TD64_YY_DAY, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_AS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_DD, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_FS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_HH, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MI, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MM, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_MS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_NS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_PS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_SS, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_US, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_WW, (void **)&__pyx_vp_7cytimes_5utils_DT_NPY_UNIT_YY, (void **)&__pyx_vp_7cytimes_5utils_NULL_TZOFFSET, (void **)&__pyx_vp_7cytimes_5utils_ORDINAL_MAX, (void **)&__pyx_vp_7cytimes_5utils_DAYS_BR_MONTH, (void **)&__pyx_vp_7cytimes_5utils_DAYS_IN_MONTH, (void **)&__pyx_vp_7cytimes_5utils_DAYS_BR_QUARTER, (void **)&__pyx_vp_7cytimes_5utils_DAYS_IN_QUARTER, (void **) NULL};
    void **const *__pyx_import_pointer = __pyx_import_pointers;
    const char *__pyx_import_current_signature = __pyx_import_signature;
    while (*__pyx_import_pointer) {
      if (__Pyx_ImportVoidPtr_3_2_1(__pyx_t_1, __pyx_import_name, *__pyx_import_pointer, __pyx_import_current_signature) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
      ++__pyx_import_pointer;
      __pyx_import_name = strchr(__pyx_import_name, '\0') + 1;
      __pyx_import_signature = strchr(__pyx_import_signature, '\0') + 1;
      if (*__pyx_import_signature != '\0') __pyx_import_current_signature = __pyx_import_signature;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_function_import_code(__pyx_mstatetype *__pyx_mstate) {
  __Pyx_RefNannyDeclarations
  CYTHON_UNUSED_VAR(__pyx_mstate);
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  {
    __pyx_t_1 = PyImport_ImportModule("cytimes.errors"); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    const char * __pyx_import_signature = __Pyx_PyBytes_AsString(__pyx_mstate_global->__pyx_kp_b_int_PyObject_int___pyx_skip_disp);
    #if !CYTHON_ASSUME_SAFE_MACROS
    if (unlikely(!__pyx_import_signature)) __PYX_ERR(0, 1, __pyx_L1_error)
    #endif
    const char * __pyx_import_name = __pyx_import_signature + 466;
    void (**const __pyx_import_pointers[])(void) = {(void (**)(void))&__pyx_f_7cytimes_6errors_raise_error, (void (**)(void))&__pyx_f_7cytimes_6errors_raise_configs_token_error, (void (**)(void))&__pyx_f_7cytimes_6errors_raise_configs_value_error, (void (**)(void))&__pyx_f_7cytimes_6errors_raise_parser_failed_error, (void (**)(void)) NULL};
    void (**const *__pyx_import_pointer)(void) = __pyx_import_pointers;
    const char *__pyx_import_current_signature = __pyx_import_signature;
    while (*__pyx_import_pointer) {
      if (__Pyx_ImportFunction_3_2_1(__pyx_t_1, __pyx_import_name, *__pyx_import_pointer, __pyx_import_current_signature) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
      ++__pyx_import_pointer;
      __pyx_import_name = strchr(__pyx_import_name, '\0') + 1;
      __pyx_import_signature = strchr(__pyx_import_signature, '\0') + 1;
      if (*__pyx_import_signature != '\0') __pyx_import_current_signature = __pyx_import_signature;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec_parser(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_parser},
  #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
  {Py_mod_gil, Py_MOD_GIL_USED},
  #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,
      "parser",
      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_parser(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_parser(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_parser(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;
  int __pyx_t_3;
  Py_ssize_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_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module 'parser' 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 "parser" 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_parser", 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_cytimes__parser) {
    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, "cytimes.parser")) {
      if (unlikely((PyDict_SetItemString(modules, "cytimes.parser", __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);
  if (unlikely((__Pyx_modinit_variable_export_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_function_export_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_init_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_type_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_variable_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely((__Pyx_modinit_function_import_code(__pyx_mstate) < 0))) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Execution code ---*/

  /* "utils.pxd":1438
 * 
 * # . parse and convert
 * cpdef inline long long parse_to_int(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `long long` `<'int'>`.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_5utils_1parse_to_int, 0, __pyx_mstate_global->__pyx_n_u_parse_to_int, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_utils, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1438, __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_parse_to_int, __pyx_t_2) < (0)) __PYX_ERR(5, 1438, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "utils.pxd":1527
 *     return -out if neg else out
 * 
 * cpdef inline double parse_to_float(str token) except *:             # <<<<<<<<<<<<<<
 *     """Parse the first numeric token from a string into a `double` `<'float'>`.
 * 
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_5utils_3parse_to_float, 0, __pyx_mstate_global->__pyx_n_u_parse_to_float, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_utils, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[1])); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 1527, __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_parse_to_float, __pyx_t_2) < (0)) __PYX_ERR(5, 1527, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":30
 * from cython.cimports.cytimes import errors, utils  # type: ignore
 * 
 * np.import_array()             # <<<<<<<<<<<<<<
 * np.import_umath()
 * datetime.import_datetime()
*/
  __pyx_t_3 = __pyx_f_5numpy_import_array(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 30, __pyx_L1_error)

  /* "cytimes/parser.py":31
 * 
 * np.import_array()
 * np.import_umath()             # <<<<<<<<<<<<<<
 * datetime.import_datetime()
 * 
*/
  __pyx_t_3 = __pyx_f_5numpy_import_umath(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 31, __pyx_L1_error)

  /* "cytimes/parser.py":32
 * np.import_array()
 * np.import_umath()
 * datetime.import_datetime()             # <<<<<<<<<<<<<<
 * 
 * # Python imports
*/
  __pyx_f_7cpython_8datetime_import_datetime();

  /* "cytimes/parser.py":35
 * 
 * # Python imports
 * import datetime             # <<<<<<<<<<<<<<
 * from dateutil.parser._parser import parserinfo
 * from cytimes import errors, utils
*/
  __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_datetime, 0, 0, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 35, __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_datetime, __pyx_t_2) < (0)) __PYX_ERR(0, 35, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":36
 * # Python imports
 * import datetime
 * from dateutil.parser._parser import parserinfo             # <<<<<<<<<<<<<<
 * from cytimes import errors, utils
 * 
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_parserinfo};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_dateutil_parser__parser, __pyx_imported_names, 1, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __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_parserinfo};
    __pyx_t_4 = 0; {
      __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_4]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 36, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_4], __pyx_t_5) < (0)) __PYX_ERR(0, 36, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":37
 * import datetime
 * from dateutil.parser._parser import parserinfo
 * from cytimes import errors, utils             # <<<<<<<<<<<<<<
 * 
 * __all__ = [
*/
  {
    PyObject* const __pyx_imported_names[] = {__pyx_mstate_global->__pyx_n_u_errors,__pyx_mstate_global->__pyx_n_u_utils};
    __pyx_t_1 = __Pyx_Import(__pyx_mstate_global->__pyx_n_u_cytimes, __pyx_imported_names, 2, NULL, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __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_errors,__pyx_mstate_global->__pyx_n_u_utils};
    for (__pyx_t_4=0; __pyx_t_4 < 2; __pyx_t_4++) {
      __pyx_t_5 = __Pyx_ImportFrom(__pyx_t_2, __pyx_imported_names[__pyx_t_4]); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 37, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_imported_names[__pyx_t_4], __pyx_t_5) < (0)) __PYX_ERR(0, 37, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":39
 * from cytimes import errors, utils
 * 
 * __all__ = [             # <<<<<<<<<<<<<<
 *     "timelex",
 *     "Configs",
*/
  __pyx_t_2 = __Pyx_PyList_Pack(7, __pyx_mstate_global->__pyx_n_u_timelex, __pyx_mstate_global->__pyx_n_u_Configs, __pyx_mstate_global->__pyx_n_u_Parser, __pyx_mstate_global->__pyx_n_u_parse, __pyx_mstate_global->__pyx_n_u_parse_obj, __pyx_mstate_global->__pyx_n_u_parse_month, __pyx_mstate_global->__pyx_n_u_parse_weekday); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_all, __pyx_t_2) < (0)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":51
 * 
 * # Timelex -------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def timelex(data: str) -> list[str]:
 *     """Tokenize a datetime-like string into lexical units (tokens).
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_data, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 51, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_1timelex, 0, __pyx_mstate_global->__pyx_n_u_timelex, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[2])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 51, __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 (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_timelex, __pyx_t_5) < (0)) __PYX_ERR(0, 51, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":73
 * # . default configs
 * # fmt: off
 * _DEFAULT_PERTAIN: set[str] = {"of"}             # <<<<<<<<<<<<<<
 * _DEFAULT_JUMP: set[str] = {
 *     " ", ".", ",", ";", "-", "/", "'",
*/
  __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_of) < (0)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_PERTAIN);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_PERTAIN, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":75
 * _DEFAULT_PERTAIN: set[str] = {"of"}
 * _DEFAULT_JUMP: set[str] = {
 *     " ", ".", ",", ";", "-", "/", "'",             # <<<<<<<<<<<<<<
 *     "at", "on", "and", "ad", "m", "t", "of",
 *     "st", "nd", "rd", "th", "" ,"", ""
*/
  __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__8) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__2) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__12) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__21) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__4) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__22) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u__23) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_at) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_on) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_and) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ad) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_m) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_t) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_of) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_st) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_nd) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_rd) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_th) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__24) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__25) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__26) < (0)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_JUMP);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_JUMP, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":79
 *     "st", "nd", "rd", "th", "" ,"", ""
 * }
 * _DEFAULT_UTC: set[str] = {"utc", "gmt", "z"}             # <<<<<<<<<<<<<<
 * _DEFAULT_TZ: dict[str, int] = {}
 * _DEFAULT_MONTH: dict[str, int] = {
*/
  __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_utc) < (0)) __PYX_ERR(0, 79, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gmt) < (0)) __PYX_ERR(0, 79, __pyx_L1_error)
  if (PySet_Add(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_z) < (0)) __PYX_ERR(0, 79, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_UTC);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_UTC, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":80
 * }
 * _DEFAULT_UTC: set[str] = {"utc", "gmt", "z"}
 * _DEFAULT_TZ: dict[str, int] = {}             # <<<<<<<<<<<<<<
 * _DEFAULT_MONTH: dict[str, int] = {
 *     # EN(a)    # EN            # DE            # FR            # IT            # ES             # PT            # NL            # SE            #PL                 # TR          # CN         # Special
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_TZ);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_TZ, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":83
 * _DEFAULT_MONTH: dict[str, int] = {
 *     # EN(a)    # EN            # DE            # FR            # IT            # ES             # PT            # NL            # SE            #PL                 # TR          # CN         # Special
 *     "jan": 1,  "january": 1,   "januar": 1,    "janvier": 1,   "gennaio": 1,   "enero": 1,      "janeiro": 1,   "januari": 1,   "januari": 1,   "stycznia": 1,      "ocak": 1,    "": 1,             # <<<<<<<<<<<<<<
 *     "feb": 2,  "february": 2,  "februar": 2,   "fvrier": 2,   "febbraio": 2,  "febrero": 2,    "fevereiro": 2, "februari": 2,  "februari": 2,  "lutego": 2,        "ubat": 2,   "": 2,    "febr": 2,
 *     "mar": 3,  "march": 3,     "mrz": 3,      "mars": 3,      "marzo": 3,     "marzo": 3,      "maro": 3,     "maart": 3,     "mars": 3,      "marca": 3,         "mart": 3,    "": 3,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(146); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_jan, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_january, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_januar, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_janvier, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gennaio, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_enero, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_janeiro, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_januari, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_januari, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_stycznia, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ocak, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__27, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_feb, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_february, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_februar, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_fvrier, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_febbraio, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_febrero, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_fevereiro, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_februari, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_februari, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_lutego, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ubat, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__28, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_febr, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mar, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_march, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mrz, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mars, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_marzo, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_marzo, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maro, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maart, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mars, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_marca, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mart, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__29, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_apr, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_april, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_april, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_avril, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_aprile, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_abril, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_abril, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_april, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_april, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_kwietnia, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_nisan, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__30, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_may, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_may, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mai, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mai, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maggio, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mayo, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maio, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mei, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maj, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maja, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mays, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__31, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_jun, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_june, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juni, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juin, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_giugno, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_junio, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_junho, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juni, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juni, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_czerwca, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_haziran, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__32, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_jul, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_july, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juli, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juillet, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_luglio, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_julio, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_julho, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juli, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_juli, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_lipca, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_temmuz, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__33, __pyx_mstate_global->__pyx_int_7) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_aug, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_august, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_august, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_aot, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_agosto, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_agosto, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_agosto, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_augustus, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_augusti, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sierpnia, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_austos, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__34, __pyx_mstate_global->__pyx_int_8) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sep, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_september, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_september, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_septembre, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_settembre, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_septiembre, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_setembro, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_september, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_september, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_wrzenia, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_eyll, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__35, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sept, __pyx_mstate_global->__pyx_int_9) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_oct, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_october, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_oktober, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_octobre, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ottobre, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_octubre, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_outubro, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_oktober, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_oktober, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_padziernika, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ekim, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__36, __pyx_mstate_global->__pyx_int_10) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_nov, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_november, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_november, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_novembre, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_novembre, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_noviembre, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_novembro, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_november, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_november, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_listopada, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_kasm, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__37, __pyx_mstate_global->__pyx_int_11) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dec, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_december, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dezember, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dcembre, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dicembre, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_diciembre, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dezembro, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_december, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_december, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_grudnia, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_aralk, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__38, __pyx_mstate_global->__pyx_int_12) < (0)) __PYX_ERR(0, 83, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_MONTH);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_MONTH, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":98
 * _DEFAULT_WEEKDAY: dict[str, int] = {
 *     # EN(a)   # EN            # DE             # FR           # IT            # ES            # NL            # SE          # PL               # TR            # CN        # CN(a)
 *     "mon": 0, "monday": 0,    "montag": 0,     "lundi": 0,    "luned": 0,    "lunes": 0,     "maandag": 0,   "mndag": 0,  "poniedziaek": 0, "pazartesi": 0, "": 0, "": 0,             # <<<<<<<<<<<<<<
 *     "tue": 1, "tuesday": 1,   "dienstag": 1,   "mardi": 1,    "marted": 1,   "martes": 1,    "dinsdag": 1,   "tisdag": 1,  "wtorek": 1,       "sal": 1,      "": 1, "": 1,
 *     "wed": 2, "wednesday": 2, "mittwoch": 2,   "mercredi": 2, "mercoled": 2, "mircoles": 2, "woensdag": 2,  "onsdag": 2,  "roda": 2,        "aramba": 2,  "": 2, "": 2,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(84); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mon, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_monday, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_montag, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_lundi, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_luned, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_lunes, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maandag, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mndag, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_poniedziaek, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pazartesi, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__39, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__40, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tue, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tuesday, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dienstag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mardi, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_marted, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_martes, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dinsdag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tisdag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_wtorek, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sal, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__41, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__42, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_wed, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_wednesday, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mittwoch, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mercredi, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mercoled, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mircoles, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_woensdag, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_onsdag, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_roda, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_aramba, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__43, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__44, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_thu, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_thursday, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_donnerstag, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_jeudi, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_gioved, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_jueves, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_donderdag, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_torsdag, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_czwartek, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_perembe, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__45, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__46, __pyx_mstate_global->__pyx_int_3) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_fri, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_friday, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_freitag, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_vendredi, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_venerd, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_viernes, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_vrijdag, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_fredag, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pitek, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cuma, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__47, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__48, __pyx_mstate_global->__pyx_int_4) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sat, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_saturday, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_samstag, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_samedi, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sabato, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sbado, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_zaterdag, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_lrdag, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sobota, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cumartesi, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__49, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__50, __pyx_mstate_global->__pyx_int_5) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sun, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sunday, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sonntag, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dimanche, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_domenica, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_domingo, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_zondag, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sndag, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_niedziela, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pazar, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__51, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__52, __pyx_mstate_global->__pyx_int_6) < (0)) __PYX_ERR(0, 98, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_WEEKDAY, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":108
 * _DEFAULT_HMS: dict[str, int] = {
 *     # EN(a)   # EN          # DE           # FR           IT            # ES           # PT           # NL           # SE           # PL          # TR            # CN
 *     "h": 0,   "hour": 0,    "stunde": 0,   "heure": 0,    "ora": 0,     "hora": 0,     "hora": 0,     "uur": 0,      "timme": 0,    "godzina": 0, "saat": 0,      "": 0,             # <<<<<<<<<<<<<<
 *     "hr": 0,  "hours": 0,   "stunden": 0,  "heures": 0,   "ore": 0,     "horas": 0,    "horas": 0,    "uren": 0,     "timmar": 0,   "godziny": 0, "saatler": 0,   "": 0,
 *     "m": 1,   "minute": 1,  "minute": 1,   "minute": 1,   "minuto": 1,  "minuto": 1,   "minuto": 1,   "minuut": 1,   "minut": 1,    "minuta": 1,  "dakika": 1,    "": 1,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(72); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_h, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hour, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_stunde, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_heure, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ora, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hora, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hora, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_uur, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_timme, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_godzina, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_saat, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__53, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hr, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hours, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_stunden, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_heures, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ore, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_horas, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_horas, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_uren, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_timmar, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_godziny, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_saatler, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__54, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_m, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minute, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minute, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minute, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuto, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuto, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuto, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuut, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minut, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuta, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dakika, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__55, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_min, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minutes_2, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuten, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minutes_2, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuti, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minutos, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minutos, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuten, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuter, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minuty, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dakikalar, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__56, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_s, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_second, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekunde, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_seconde, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_secondo, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_segundo, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_segundo, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_seconde, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekund, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekunda, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_saniye, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__57, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sec, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_seconds, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekunden, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_secondes, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_secondi, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_segundos, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_segundos, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_seconden, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekunder, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sekundy, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_saniyeler, __pyx_mstate_global->__pyx_int_2) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_godzin, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 108, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_HMS);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_HMS, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":118
 * _DEFAULT_AMPM: dict[str, int] = {
 *     # EN(a)  # EN(b)  #EN             # DE             # IT             # ES         # PT        # NL          # SE              # PL             # TR          # CN
 *     "a": 0,  "am": 0, "morning": 0,   "morgen": 0,     "mattina": 0,    "maana": 0, "manh": 0, "ochtend": 0, "morgon": 0,      "rano": 0,       "sabah": 0,   "": 0,             # <<<<<<<<<<<<<<
 *     "p": 1,  "pm": 1, "afternoon": 1, "nachmittag": 1, "pomeriggio": 1, "tarde": 1,  "tarde": 1, "middag": 1,  "eftermiddag": 1, "popoudnie": 1, "leden": 1, "": 1
 * }
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_a, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_am, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_morning, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_morgen, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mattina, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_maana, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_manh, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ochtend, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_morgon, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_rano, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_sabah, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__58, __pyx_mstate_global->__pyx_int_0) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_p, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pm, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_afternoon, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_nachmittag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_pomeriggio, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tarde, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tarde, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_middag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_eftermiddag, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_popoudnie, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_leden, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u__59, __pyx_mstate_global->__pyx_int_1) < (0)) __PYX_ERR(0, 118, __pyx_L1_error)
  __Pyx_XGOTREF(__pyx_v_7cytimes_6parser__DEFAULT_AMPM);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_AMPM, ((PyObject*)__pyx_t_5));
  __Pyx_GIVEREF(__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":236
 *         self.reset_settings()
 * 
 *     @classmethod             # <<<<<<<<<<<<<<
 *     def from_parserinfo(cls, info: parserinfo) -> Configs:
 *         """Build `Configs` from an existing `dateutil.parser.parserinfo` <'Configs'>`.
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_info, __pyx_mstate_global->__pyx_n_u_parserinfo) < (0)) __PYX_ERR(0, 236, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_return, __pyx_mstate_global->__pyx_n_u_Configs) < (0)) __PYX_ERR(0, 236, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_3from_parserinfo, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_from_parserinfo, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[3])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_from_parserinfo, __pyx_t_2) < (0)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetNameInClass(__pyx_t_2, (PyObject*)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_from_parserinfo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 236, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_from_parserinfo, __pyx_t_5) < (0)) __PYX_ERR(0, 236, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":305
 *         return self._dayfirst
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def order_hint(self) -> str:
 *         """Give a hint of the ambiguous Y/M/D order based
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_5order_hint, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_order_hint, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[4])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 305, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_order_hint, __pyx_t_5) < (0)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":325
 *         return set(self._jump)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_jump(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 325, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_7add_jump, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_jump, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[5])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 325, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_jump, __pyx_t_2) < (0)) __PYX_ERR(0, 325, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":346
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_jump(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 346, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 346, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_9remove_jump, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_jump, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[6])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 346, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_jump, __pyx_t_5) < (0)) __PYX_ERR(0, 346, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tokens, __pyx_mstate_global->__pyx_kp_u_set_str) < (0)) __PYX_ERR(0, 368, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_11replace_jump, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_jump, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[7])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_jump, __pyx_t_2) < (0)) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":402
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_jump(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 402, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_13is_jump, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_jump, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[8])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 402, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_jump, __pyx_t_5) < (0)) __PYX_ERR(0, 402, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":421
 *         return set(self._pertain)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_pertain(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 421, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_15add_pertain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_pertain, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[9])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_pertain, __pyx_t_2) < (0)) __PYX_ERR(0, 421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":442
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_pertain(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 442, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_17remove_pertain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_pertain, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[10])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 442, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_pertain, __pyx_t_5) < (0)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":464
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_pertain(self, tokens: set[str] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 464, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tokens, __pyx_mstate_global->__pyx_kp_u_set_str) < (0)) __PYX_ERR(0, 464, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_19replace_pertain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_pertain, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[11])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 464, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_pertain, __pyx_t_2) < (0)) __PYX_ERR(0, 464, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":498
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_pertain(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 498, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_21is_pertain, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_pertain, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[12])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 498, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_pertain, __pyx_t_5) < (0)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":517
 *         return set(self._utc)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_utc(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 517, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 517, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_23add_utc, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_utc, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[13])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 517, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_utc, __pyx_t_2) < (0)) __PYX_ERR(0, 517, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":538
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_utc(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 538, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_25remove_utc, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_utc, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[14])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 538, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_utc, __pyx_t_5) < (0)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":560
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_utc(self, tokens: set[str] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_tokens, __pyx_mstate_global->__pyx_kp_u_set_str) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_27replace_utc, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_utc, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[15])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 560, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_utc, __pyx_t_2) < (0)) __PYX_ERR(0, 560, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":594
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_utc(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 594, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_29is_utc, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_utc, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[16])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 594, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_utc, __pyx_t_5) < (0)) __PYX_ERR(0, 594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":616
 *         return dict(self._tz)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_tz(
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 616, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_hours, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 616, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_minutes_2, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 616, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_seconds, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 616, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_31add_tz, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_tz, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[17])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __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[3]);
  __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_tz, __pyx_t_2) < (0)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":655
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_tz(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 655, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 655, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_33remove_tz, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_tz, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[18])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 655, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_tz, __pyx_t_5) < (0)) __PYX_ERR(0, 655, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":682
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_tz(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mapping, __pyx_mstate_global->__pyx_kp_u_dict_str_int) < (0)) __PYX_ERR(0, 682, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_35replace_tz, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_tz, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[19])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 682, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_tz, __pyx_t_2) < (0)) __PYX_ERR(0, 682, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":726
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_tz(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 726, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_37is_tz, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_tz, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[20])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 726, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_tz, __pyx_t_5) < (0)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":739
 *         return dict_contains(self._tz_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-200_000, check=False)
 *     def get_tz_offset(self, token: str) -> cython.int:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 739, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_39get_tz_offset, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_get_tz_offset, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[21])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_get_tz_offset, __pyx_t_2) < (0)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":766
 *         return dict(self._month)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_month(self, token: str, month: cython.int) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 766, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 766, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_month, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 766, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_41add_month, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[22])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 766, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_month, __pyx_t_5) < (0)) __PYX_ERR(0, 766, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":795
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_month(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 795, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_43remove_month, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[23])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 795, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_month, __pyx_t_2) < (0)) __PYX_ERR(0, 795, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":822
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_month(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_mapping, __pyx_mstate_global->__pyx_kp_u_dict_str_int) < (0)) __PYX_ERR(0, 822, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_45replace_month, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[24])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 822, __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[2]);
  __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_month, __pyx_t_5) < (0)) __PYX_ERR(0, 822, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":864
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_month(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 864, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_47is_month, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[25])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 864, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_month, __pyx_t_2) < (0)) __PYX_ERR(0, 864, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":877
 *         return dict_contains(self._month_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_month(self, token: str) -> cython.int:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 877, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_49get_month, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_get_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[26])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 877, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_get_month, __pyx_t_5) < (0)) __PYX_ERR(0, 877, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":904
 *         return dict(self._weekday)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_weekday(self, token: str, weekday: cython.int) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 904, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_weekday, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 904, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_51add_weekday, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[27])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 904, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_weekday, __pyx_t_2) < (0)) __PYX_ERR(0, 904, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":933
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_weekday(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 933, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_53remove_weekday, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[28])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 933, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_weekday, __pyx_t_5) < (0)) __PYX_ERR(0, 933, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":960
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_weekday(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mapping, __pyx_mstate_global->__pyx_kp_u_dict_str_int) < (0)) __PYX_ERR(0, 960, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_55replace_weekday, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[29])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 960, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_weekday, __pyx_t_2) < (0)) __PYX_ERR(0, 960, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1002
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_weekday(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_57is_weekday, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[30])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1002, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_weekday, __pyx_t_5) < (0)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1015
 *         return dict_contains(self._weekday_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_weekday(self, token: str) -> cython.int:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_59get_weekday, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_get_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[31])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1015, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_get_weekday, __pyx_t_2) < (0)) __PYX_ERR(0, 1015, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1043
 *         return dict(self._hms)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_hms(self, token: str, flag: cython.int) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1043, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_flag, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_61add_hms, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_hms, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[32])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1043, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_hms, __pyx_t_5) < (0)) __PYX_ERR(0, 1043, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1072
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_hms(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1072, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1072, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_63remove_hms, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_hms, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[33])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_hms, __pyx_t_2) < (0)) __PYX_ERR(0, 1072, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1099
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_hms(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1099, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_mapping, __pyx_mstate_global->__pyx_kp_u_dict_str_int) < (0)) __PYX_ERR(0, 1099, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_65replace_hms, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_hms, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[34])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1099, __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[2]);
  __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_hms, __pyx_t_5) < (0)) __PYX_ERR(0, 1099, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1141
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_hms(self, token: str) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_67is_hms, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_hms, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[35])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1141, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_hms, __pyx_t_2) < (0)) __PYX_ERR(0, 1141, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1154
 *         return dict_contains(self._hms_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_hms(self, token: str) -> cython.int:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_69get_hms, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_get_hms, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[36])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1154, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_get_hms, __pyx_t_5) < (0)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1182
 *         return dict(self._ampm)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_ampm(self, token: str, flag: cython.int) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1182, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_flag, __pyx_mstate_global->__pyx_kp_u_cython_int) < (0)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_71add_ampm, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_add_ampm, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[37])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1182, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_add_ampm, __pyx_t_2) < (0)) __PYX_ERR(0, 1182, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1211
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def remove_ampm(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1211, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1211, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_73remove_ampm, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_remove_ampm, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[38])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1211, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_remove_ampm, __pyx_t_5) < (0)) __PYX_ERR(0, 1211, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1238
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_ampm(self, mapping: dict[str, int] = None) -> cython.bint:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1238, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_mapping, __pyx_mstate_global->__pyx_kp_u_dict_str_int) < (0)) __PYX_ERR(0, 1238, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_75replace_ampm, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_replace_ampm, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[39])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1238, __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_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_replace_ampm, __pyx_t_2) < (0)) __PYX_ERR(0, 1238, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1280
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def is_ampm(self, token: str) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1280, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1280, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_77is_ampm, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_is_ampm, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[40])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1280, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_is_ampm, __pyx_t_5) < (0)) __PYX_ERR(0, 1280, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1293
 *         return dict_contains(self._ampm_ext, token)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-2, check=False)
 *     def get_ampm(self, token: str) -> cython.int:
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_79get_ampm, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_get_ampm, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[41])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1293, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_get_ampm, __pyx_t_2) < (0)) __PYX_ERR(0, 1293, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1312
 * 
 *     # Clear & Reset ------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def clear_settings(self) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_81clear_settings, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_clear_settings, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[42])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_clear_settings, __pyx_t_2) < (0)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1348
 *         return True
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def reset_settings(self) -> cython.bint:
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_83reset_settings, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs_reset_settings, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[43])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1348, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_reset_settings, __pyx_t_2) < (0)) __PYX_ERR(0, 1348, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_87__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[44])); 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 (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Configs__set_state(self, __pyx_state)
*/
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7Configs_89__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Configs___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[45])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 16, __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_7cytimes_6parser_Configs, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_2) < (0)) __PYX_ERR(7, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":1575
 * 
 * 
 * _DEFAULT_CONFIGS: Configs = Configs()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_5 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_5, NULL};
    __pyx_t_2 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Configs, __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_2)) __PYX_ERR(0, 1575, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_2);
  }
  __Pyx_XGOTREF((PyObject *)__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_CONFIGS, ((struct __pyx_obj_7cytimes_6parser_Configs *)__pyx_t_2));
  __Pyx_GIVEREF((PyObject *)__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_7cytimes_6parser_6Result_7__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Result___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[46])); 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_reduce_cython, __pyx_t_2) < (0)) __PYX_ERR(7, 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_7cytimes_6parser_6Result_9__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Result___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[47])); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 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(7, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dtstr, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_default, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_yearfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dayfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ignoretz, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isoformat, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dtclass, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_6Parser_3parse, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Parser_parse, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[48])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2349, __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_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_5) < (0)) __PYX_ERR(0, 2349, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_6Parser_5__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Parser___reduce_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[49])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 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 (__Pyx_SetItemOnTypeDict(__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser, __pyx_mstate_global->__pyx_n_u_reduce_cython, __pyx_t_5) < (0)) __PYX_ERR(7, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_Parser, (type(self), 0xf672dca, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_Parser__set_state(self, __pyx_state)
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_6Parser_7__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_mstate_global->__pyx_n_u_Parser___setstate_cython, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[50])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 16, __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_7cytimes_6parser_Parser, __pyx_mstate_global->__pyx_n_u_setstate_cython, __pyx_t_5) < (0)) __PYX_ERR(7, 16, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":4255
 * 
 * 
 * _DEFAULT_PARSER: Parser = Parser()             # <<<<<<<<<<<<<<
 * 
 * 
*/
  __pyx_t_2 = NULL;
  __pyx_t_6 = 1;
  {
    PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
    __pyx_t_5 = __Pyx_PyObject_FastCall((PyObject*)__pyx_mstate_global->__pyx_ptype_7cytimes_6parser_Parser, __pyx_callargs+__pyx_t_6, (1-__pyx_t_6) | (__pyx_t_6*__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET));
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4255, __pyx_L1_error)
    __Pyx_GOTREF((PyObject *)__pyx_t_5);
  }
  __Pyx_XGOTREF((PyObject *)__pyx_v_7cytimes_6parser__DEFAULT_PARSER);
  __Pyx_DECREF_SET(__pyx_v_7cytimes_6parser__DEFAULT_PARSER, ((struct __pyx_obj_7cytimes_6parser_Parser *)__pyx_t_5));
  __Pyx_GIVEREF((PyObject *)__pyx_t_5);
  __pyx_t_5 = 0;

  /* "cytimes/parser.py":4259
 * 
 * # Parse --------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse(
 *     dtstr: str,
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dtstr, __pyx_mstate_global->__pyx_n_u_str) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_default, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_yearfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dayfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_ignoretz, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_isoformat, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cfg, __pyx_mstate_global->__pyx_n_u_Configs) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_dtclass, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_3parse, 0, __pyx_mstate_global->__pyx_n_u_parse, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[51])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4259, __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[5]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_parse, __pyx_t_2) < (0)) __PYX_ERR(0, 4259, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":4343
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse_obj(
 *     dtobj: object,
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dtobj, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_default, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_yearfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dayfirst, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_ignoretz, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_isoformat, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_cfg, __pyx_mstate_global->__pyx_n_u_Configs) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_dtclass, __pyx_mstate_global->__pyx_n_u_object) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_5parse_obj, 0, __pyx_mstate_global->__pyx_n_u_parse_obj, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[52])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4343, __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[5]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __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_parse_obj, __pyx_t_5) < (0)) __PYX_ERR(0, 4343, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":4426
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_month(
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4426, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_kp_u_int_str_None) < (0)) __PYX_ERR(0, 4426, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_cfg, __pyx_mstate_global->__pyx_n_u_Configs) < (0)) __PYX_ERR(0, 4426, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_n_u_raise_error, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4426, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_7parse_month, 0, __pyx_mstate_global->__pyx_n_u_parse_month, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[53])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4426, __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[6]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_parse_month, __pyx_t_2) < (0)) __PYX_ERR(0, 4426, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "cytimes/parser.py":4487
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_weekday(
*/
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_token, __pyx_mstate_global->__pyx_kp_u_int_str_None) < (0)) __PYX_ERR(0, 4487, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_cfg, __pyx_mstate_global->__pyx_n_u_Configs) < (0)) __PYX_ERR(0, 4487, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_mstate_global->__pyx_n_u_raise_error, __pyx_mstate_global->__pyx_kp_u_cython_bint) < (0)) __PYX_ERR(0, 4487, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_9parse_weekday, 0, __pyx_mstate_global->__pyx_n_u_parse_weekday, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[54])); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 4487, __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[6]);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __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_parse_weekday, __pyx_t_5) < (0)) __PYX_ERR(0, 4487, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":4
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
 * def __pyx_unpickle_Configs(__pyx_type, long __pyx_checksum, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_result
 *     __Pyx_CheckUnpickleChecksum(__pyx_checksum, 0x1de7d70, 0xfa78498, 0x62f365b, b'_Configs__cls, _ampm, _ampm_ext, _dayfirst, _hms, _hms_ext, _jump, _jump_ext, _month, _month_ext, _pertain, _pertain_ext, _tz, _tz_ext, _utc, _utc_ext, _weekday, _weekday_ext, _yearfirst')
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_11__pyx_unpickle_Configs, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Configs, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[55])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 4, __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_pyx_unpickle_Configs, __pyx_t_5) < (0)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "(tree fragment)":1
 * cdef extern from *:             # <<<<<<<<<<<<<<
 *     int __Pyx_CheckUnpickleChecksum(long, long, long, long, const char*) except -1
 *     int __Pyx_UpdateUnpickledDict(object, object, Py_ssize_t) except -1
*/
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_7cytimes_6parser_13__pyx_unpickle_Parser, 0, __pyx_mstate_global->__pyx_n_u_pyx_unpickle_Parser, NULL, __pyx_mstate_global->__pyx_n_u_cytimes_parser, __pyx_mstate_global->__pyx_d, ((PyObject *)__pyx_mstate_global->__pyx_codeobj_tab[56])); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 4, __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_pyx_unpickle_Parser, __pyx_t_5) < (0)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /* "cytimes/parser.py":1
 * # cython: language_level=3             # <<<<<<<<<<<<<<
 * # cython: wraparound=False
 * # cython: boundscheck=False
*/
  __pyx_t_5 = __Pyx_PyDict_NewPresized(24); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_jump_line_325, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_skipped) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_jump_line_346, __pyx_mstate_global->__pyx_kp_u_Remove_jump_token_from_the_confi) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_jump_line_368, __pyx_mstate_global->__pyx_kp_u_Replace_the_set_of_jump_tokens_b) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_pertain_line_421, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_pertain_line_442, __pyx_mstate_global->__pyx_kp_u_Remove_pertain_token_from_the_co) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_pertain_line_464, __pyx_mstate_global->__pyx_kp_u_Replace_the_set_of_pertain_token) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_utc_line_517, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_2) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_utc_line_538, __pyx_mstate_global->__pyx_kp_u_Remove_UTC_timezone_token_from_t) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_utc_line_560, __pyx_mstate_global->__pyx_kp_u_Replace_the_set_of_UTC_timezone) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_tz_line_616, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_3) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_tz_line_655, __pyx_mstate_global->__pyx_kp_u_Remove_timezone_token_from_the_c) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_tz_line_682, __pyx_mstate_global->__pyx_kp_u_Replace_the_timezone_mapping_boo) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_month_line_766, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_4) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_month_line_795, __pyx_mstate_global->__pyx_kp_u_Remove_month_token_from_the_conf) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_month_line_822, __pyx_mstate_global->__pyx_kp_u_Replace_the_month_mapping_bool_p) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_weekday_line_904, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_5) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_weekday_line_933, __pyx_mstate_global->__pyx_kp_u_Remove_weekday_token_from_the_co) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_weekday_line_960, __pyx_mstate_global->__pyx_kp_u_Replace_the_weekday_mapping_bool) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_hms_line_1043, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_6) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_hms_line_1072, __pyx_mstate_global->__pyx_kp_u_Remove_H_M_S_token_from_the_conf) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_hms_line_1099, __pyx_mstate_global->__pyx_kp_u_Replace_the_H_M_S_mapping_bool_p) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_add_ampm_line_1182, __pyx_mstate_global->__pyx_kp_u_Add_token_that_should_be_recogni_7) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_remove_ampm_line_1211, __pyx_mstate_global->__pyx_kp_u_Remove_AM_PM_token_from_the_conf) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_mstate_global->__pyx_kp_u_Configs_replace_ampm_line_1238, __pyx_mstate_global->__pyx_kp_u_Replace_the_AM_PM_mapping_bool_p) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_test, __pyx_t_5) < (0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  if (__pyx_m) {
    if (__pyx_mstate->__pyx_d && stringtab_initialized) {
      __Pyx_AddTraceback("init cytimes.parser", __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 cytimes.parser");
  }
  __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_enumerate = __Pyx_GetBuiltinName(__pyx_mstate->__pyx_n_u_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 274, __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;
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__lower.type = (PyObject*)(&PyUnicode_Type);
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__lower.method_name = &__pyx_mstate->__pyx_n_u_lower;
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__title.type = (PyObject*)(&PyUnicode_Type);
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__title.method_name = &__pyx_mstate->__pyx_n_u_title;
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__upper.type = (PyObject*)(&PyUnicode_Type);
  __pyx_mstate->__pyx_umethod_PyUnicode_Type__upper.method_name = &__pyx_mstate->__pyx_n_u_upper;
  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);

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = ('self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not None',)             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_Configs, (type(self), 0x1de7d70, None), state
*/
  __pyx_mstate_global->__pyx_tuple[0] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self__Configs__cls_is_not_None_o); if (unlikely(!__pyx_mstate_global->__pyx_tuple[0])) __PYX_ERR(7, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[0]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[0]);
  __pyx_mstate_global->__pyx_tuple[1] = PyTuple_Pack(1, __pyx_mstate_global->__pyx_kp_u_self__Parser__cls_is_not_None_or); if (unlikely(!__pyx_mstate_global->__pyx_tuple[1])) __PYX_ERR(7, 11, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[1]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[1]);

  /* "cytimes/parser.py":368
 *         return removed
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def replace_jump(self, tokens: set[str] = None) -> cython.bint:
*/
  __pyx_mstate_global->__pyx_tuple[2] = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[2])) __PYX_ERR(0, 368, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[2]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[2]);

  /* "cytimes/parser.py":616
 *         return dict(self._tz)
 * 
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     @cython.exceptval(-1, check=False)
 *     def add_tz(
*/
  __pyx_mstate_global->__pyx_tuple[3] = PyTuple_Pack(3, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_0, __pyx_mstate_global->__pyx_int_0); if (unlikely(!__pyx_mstate_global->__pyx_tuple[3])) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[3]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[3]);

  /* "cytimes/parser.py":2349
 * 
 *     # Parse --------------------------------------------------------------------------------
 *     @cython.ccall             # <<<<<<<<<<<<<<
 *     def parse(
 *         self,
*/
  __pyx_mstate_global->__pyx_tuple[4] = PyTuple_Pack(6, Py_None, Py_None, Py_None, Py_True, Py_True, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[4])) __PYX_ERR(0, 2349, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[4]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[4]);

  /* "cytimes/parser.py":4259
 * 
 * # Parse --------------------------------------------------------------------------------------
 * @cython.ccall             # <<<<<<<<<<<<<<
 * def parse(
 *     dtstr: str,
*/
  __pyx_mstate_global->__pyx_tuple[5] = PyTuple_Pack(7, Py_None, Py_None, Py_None, Py_True, Py_True, Py_None, Py_None); if (unlikely(!__pyx_mstate_global->__pyx_tuple[5])) __PYX_ERR(0, 4259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_mstate_global->__pyx_tuple[5]);
  __Pyx_GIVEREF(__pyx_mstate_global->__pyx_tuple[5]);

  /* "cytimes/parser.py":4426
 * 
 * 
 * @cython.ccall             # <<<<<<<<<<<<<<
 * @cython.exceptval(-2, check=False)
 * def parse_month(
*/
  __pyx_mstate_global->__pyx_tuple[6] = PyTuple_Pack(2, Py_None, Py_True); if (unlikely(!__pyx_mstate_global->__pyx_tuple[6])) __PYX_ERR(0, 4426, __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
      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: 11; } index[] = {{1},{3},{9},{15},{20},{19},{14},{9},{3},{4},{3},{2},{4},{12},{62},{380},{385},{769},{561},{577},{602},{569},{358},{93},{58},{65},{16},{15},{37},{23},{80},{59},{41},{46},{41},{47},{41},{14},{18},{65},{65},{70},{65},{61},{68},{44},{61},{68},{67},{72},{67},{63},{46},{63},{77},{83},{80},{28},{27},{27},{28},{30},{25},{26},{30},{31},{30},{30},{31},{33},{28},{29},{33},{32},{31},{31},{32},{34},{29},{30},{34},{61},{8},{5},{54},{55},{68},{53},{81},{54},{79},{48},{47},{88},{52},{54},{29},{31},{17},{71},{46},{45},{59},{41},{15},{59},{35},{43},{17},{60},{37},{14},{16},{15},{8},{5},{33},{4},{179},{77},{359},{360},{373},{357},{361},{366},{364},{367},{641},{674},{638},{479},{454},{467},{656},{653},{38},{51},{16},{7},{19},{49},{58},{49},{55},{24},{79},{53},{22},{19},{8},{8},{5},{5},{1},{5},{1},{2},{2},{2},{3},{2},{2},{3},{1},{1},{1},{1},{1},{2},{1},{0},{1},{1},{1},{1},{2},{8},{6},{7},{18},{31},{35},{31},{35},{31},{35},{32},{36},{32},{36},{29},{33},{26},{14},{45},{11},{10},{17},{6},{10},{14},{7},{19},{35},{34},{6},{34},{15},{7},{8},{21},{2},{8},{5},{7},{14},{16},{9},{8},{32},{51},{32},{51},{32},{51},{33},{52},{33},{52},{30},{49},{27},{14},{51},{9},{10},{109},{7},{8},{9},{32},{29},{34},{50},{7},{39},{34},{68},{69},{38},{36},{9},{30},{12},{8},{9},{10},{15},{21},{484},{135},{8},{6},{15},{37},{51},{53},{39},{35},{49},{51},{37},{21},{21},{14},{82},{26},{77},{50},{39},{34},{5},{16},{40},{12},{13},{42},{53},{51},{11},{4},{11},{17},{9},{5},{9},{10},{7},{12},{4},{3},{3},{7},{25},{27},{16},{15},{16},{17},{19},{14},{15},{19},{22},{23},{16},{15},{17},{21},{19},{15},{14},{15},{16},{18},{13},{14},{18},{18},{19},{18},{19},{20},{22},{17},{18},{22},{20},{19},{20},{21},{23},{18},{19},{23},{22},{1},{3},{5},{3},{3},{3},{17},{17},{19},{4},{3},{3},{3},{1},{6},{3},{3},{3},{3},{3},{7},{6},{24},{26},{12},{20},{6},{24},{26},{3},{3},{3},{1},{8},{3},{4},{3},{7},{1},{8},{3},{1},{3},{3},{3},{6},{6},{6},{6},{6},{6},{6},{6},{6},{6},{9},{9},{9},{6},{9},{6},{9},{6},{9},{6},{9},{6},{9},{6},{9},{6},{3},{6},{3},{6},{3},{6},{6},{1},{5},{2},{8},{7},{8},{9},{11},{6},{7},{11},{9},{6},{7},{2},{4},{3},{5},{3},{5},{6},{7},{10},{2},{6},{18},{2},{3},{6},{7},{8},{8},{5},{4},{3},{9},{14},{18},{3},{4},{9},{7},{14},{13},{7},{8},{1},{6},{9},{4},{8},{23},{3},{8},{4},{9},{3},{8},{7},{8},{8},{8},{9},{8},{5},{8},{8},{7},{8},{7},{9},{10},{3},{7},{5},{5},{5},{11},{4},{5},{9},{6},{6},{3},{8},{4},{7},{7},{8},{8},{9},{4},{5},{4},{6},{7},{3},{6},{15},{7},{2},{8},{8},{7},{8},{7},{9},{13},{11},{12},{8},{6},{3},{6},{7},{7},{7},{1},{7},{5},{6},{3},{4},{5},{4},{5},{2},{1},{8},{4},{7},{13},{6},{7},{8},{10},{5},{6},{10},{9},{5},{3},{7},{6},{7},{7},{7},{5},{6},{7},{4},{3},{5},{4},{5},{4},{4},{3},{4},{5},{4},{5},{6},{8},{9},{5},{9},{5},{7},{6},{5},{7},{5},{6},{1},{7},{7},{5},{6},{3},{8},{4},{3},{4},{6},{7},{3},{5},{5},{5},{6},{4},{4},{8},{6},{5},{7},{3},{4},{6},{3},{10},{8},{11},{12},{6},{3},{5},{6},{6},{7},{7},{7},{6},{6},{7},{6},{6},{10},{8},{7},{10},{3},{6},{6},{5},{6},{6},{7},{5},{2},{10},{8},{2},{7},{9},{5},{3},{8},{8},{8},{9},{2},{6},{4},{7},{3},{7},{7},{7},{2},{7},{2},{6},{3},{10},{3},{7},{7},{1},{13},{5},{11},{9},{14},{12},{13},{10},{5},{9},{9},{7},{7},{2},{10},{13},{3},{11},{2},{12},{14},{12},{11},{10},{22},{21},{14},{12},{11},{4},{2},{10},{17},{13},{11},{10},{11},{12},{14},{9},{10},{14},{12},{11},{12},{13},{15},{10},{11},{15},{14},{6},{6},{5},{3},{1},{4},{7},{5},{6},{5},{6},{7},{6},{9},{3},{8},{7},{3},{6},{7},{8},{8},{7},{7},{7},{7},{8},{6},{7},{7},{8},{8},{7},{4},{3},{4},{9},{9},{10},{12},{10},{8},{12},{19},{9},{8},{7},{6},{7},{2},{5},{3},{6},{7},{8},{3},{6},{1},{5},{6},{8},{2},{3},{8},{7},{6},{5},{6},{5},{5},{6},{7},{3},{7},{2},{6},{6},{6},{6},{5},{4},{2},{12},{3},{9},{5},{3},{6},{8},{8},{7},{7},{3},{9},{7},{8},{9},{6},{4},{9},{1},{8},{6},{1511},{585},{252},{555},{220},{220},{336},{20},{11},{113},{89},{415},{136},{131},{63},{131},{37},{37},{37},{37},{37},{37},{37},{37},{58},{58},{58},{58},{58},{131},{133},{89},{65},{89},{65},{178},{123},{65},{131},{93},{111},{82},{72},{82},{72},{82},{82},{82},{72},{112},{89},{9},{11},{125},{285},{106},{245},{55},{55},{485}};
    #if (CYTHON_COMPRESS_STRINGS) == 2 /* compression: bz2 (9364 bytes) */
const char* const cstring = "BZh91AY&SY1\317U\340\000\rv\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\373~\364\316\356\356e|N@@@W\240@\000`*gv\270\343\237gL\301\336\367\227\233\254vk@{j\353\256n\234\273;1\345\317[\335\224+\255\007E\265\002\275w{N\360\267o@\336\356\362\000\247\275\314\341\246\206\212\031\000\032\003F\305eH\333\000;eti&\002h\005k\320\000{\303\244\326\200|\203\200\037l$\220\202\t\244\310\315M4\3655O\323\006\246\0053L\3210Q\3516'\240M)\352~\2004\325\037\245<\247\211\242i\342jh~\232\2151C\322\006\324\306\246\201\246\310 \000\017PI!0\232h\215OB\236\251\352\217i\2523S'\224d\362\2324\000\036\240\032\036\246jcHd\000\032\001\352h\032\r\003@\000\000\000\r\000h4\t@\"D&\2044\014\236\243j\014\215\003&\214\203\023@\006\206\200\032\000\032\000\320\032\000\003@\000\320\320\000\000hh\000I\251\020\232&MOSSML\323(\321\240\323@\r=A\247\224\320\364e4\321\264\320\232\000\0004\031\032\006\232\003C@\003A\210\000\000\006\200\020R\200\000\000\r\000\000\032\000\007\221\244\000\000\320\000h\000\0322\000\032\000\000\000\000\000\000\000\004\211\004\002\000\020\001\032\002a\244i\240\321\244j\237\246\251\372\246\3655=Ojh!\352\014\232\0324\031\031\017P\r4\017S@\000\000\003M\003@\005\337e\263\236\007\234\326d\227M\316\023\347\204\3110p\010\023\230\257\256\271a\356}\020,\321\035\252\273D\210\264e\023\023&\332\306\31430\020\021\005Z8\376\346S\327?H\345hr\364\232\375\227ihz\374\363\355\225UUU_a\206ny\347hg\236}o1\350i\325\262\213d5\322%e\336\026\030\207\331k\263\005\261Sl\233\302B\205\336\236)\242e/YW\346\264\352\032\333~t\371\310\255C\r\354\323\353\364\242n\331\0339Wz\261\005\206\314\3377\276\001\361/\215\350_\271\003\233m\312\225Q(m\305Q@\201\312g\034TE\247\246\031\000g\022\204!\340\305\322i\023\030\272[\373\376S\273\317w\324\370\177.\246&A\211j\326\265\255k\207\317\234\370\366u;\337\215\337|\335\004i\241\260\303\0140\303\0140\302\336\027\204\220\3140\300\303\035\312\022a\201\tr\330\003\235\317\257\034\021\242\321\032-\007\200=\035\013\357\276\373\322\017\264M\031\370\316w]$\227\240""\020\336\206\271\216\022o\201\264\004\221H\210\222(\212*\212E\220\212*\202$`\301V\002\254c#\021\004\221\0300Hm \260\236\234\223@h'\202\010\330A\0300(\210\210\2457\273\334t)\306j\014-\247m7\205\273\354$\212\250K\200\264\231\357C!\222\006@\206\006M\206\002\302\001[\333\214M\024\003\367h\365#\004H2\374\334d\013\221\034\3348{|\301\312P8\010M\254q\234s\245:^8\0230R2\002\306\014FDA\211 \210F OJ\000\316\314!\342\330j\rP\223T\rZ\213I:\0014)\002y\021\335!\007\030\027#*\222\024\240\2133\014\303\n\302\201$\321\000H\240\306#\005\336\336,X03E\222L\222\031\t\253\003\265\206D)\004H\301\201\333B`Lq\000\304\365bb\214Q\212\354Z\365\367\242\210\033CEH\010T\032 \2657d\240\034\333\036\321\332V\331SX\262F\235&\221\rc4\022\022\316\014S6\221\234A\217\250\276i\0131\003\024T\t\241kAM@\260\014\265\353\037\323J\361Q^\214\347\253\242\200\324\221\025\241\223\220\341\310\014p\324\222\rhX\007j2.W+^\242\013\032\210\220\301\264p\207\004\313\010\365\211 \215\312\306\210\215u\367&)\313V*am\264\222\224\211%\022H`\326j\321\345\250\251\247uTD\231\025\335\233\013\202\354\2659\275xAO\252.\320{\242<\306\253\246\271B@ \246\201\002\330\003|O\006Ap\2252\353\002\020s\360\036\230\300\017\013$\231\343\264\336\225\240\256\215K\217g\t\\\002\023m8a)m;&\toG\036\034\262L\212-\001d\232\266k\275\206_\026\013\030b!D\266\213\367\031\032\025Q\321\347\031\351\003\000>2V\265U\013R\320\275\345\354[\026\305x\031\231x\365\347\305Nc\023\3736\321Z\377\024\373\334\211n\336hy\244\005\223\2055_\274\334\311/1\024\220W<\314\304\277\307\"2\216\315\221x\244`\262\371n\260q\320\356a\312\307\r\262\245\213k\034\221 5\200\300L\005\267\316w\020\200U\027\200\247B\347\027\202\"\014\307I\2341\347\215\373\373}\223\250%6\001_\227\005`\232\255\266X\316.\222\275\\x\014\021z\264\005z(^\354g[THTFu\236B\230\003\262\351\300f\303D0B\006 !\321\305eF%\236X\"!\321\307g\206\010mB\200&\347(\t\215Q\023\335\n`u\342)T\265\014\216x]\333\000\244DmFo\3722\226r\252Vi!&\001\216\031,\210\216\306\332\201\033\253SF\026\311\362\200X\206#\320Q\021db-b\"DV$'\006\320\203""\3658w\001\035\217\200\305\0108\014\340\310\332\020W\005\260\004`.\342\230\372\342\371\240b\265\263\033\223q\323t\310\233\212\256\317\206m\320\254\026o\354\226hE\245K\233\301#5\000\337\264\006\320Y\035=\336\025\235\000X\227@=fQ\tT!\325$J\252&L\276v1J`\223\326%\300(\327\205\323\007{~\027\271\251\272\356\244:\346\361\255\243].\034Q0\370Q\013\261Z\3703F\264uhr\037\037\203\324\213\341\230\334Mw#:\330\343\233\232\301[o\030ma%e\260\016|5\000s\353\331]\013\361xKj^\376\200\306\363 \337\t5\213\257^\352i\215UU\025T\265\2473\265\0309\227\203c%l\203\237\276m\244\013B\r~,\005aPE\310\305#0\013AB\270\200hm\253w\204L\325b\242\360\203J\205,\002`\027\001C*\026\ng\027\016\277\312\345\326\253\310\010\303\235\266\347\316K@\014\024\204\373<\220\371\240\330E\340p3\352\001_L\213R\300\t\310RF\300\033\260\016\010\334\005\n&_\271r\341\215j6`rj\024\313nH\314\005\253\210\327A\022\".`jj\332\026\001j\t\350\000\275\032P\313\032,\001\245\014M\321\242\031E\236\021&]v\366L\263N\253\310\327Eo{\016\233v\306m:c\024\233n\351\312co+\246\242Q#w\270x\"\214S\355C\027\210d\273 \261\373EDa\350\343\231\301\327r\371G4\207c\225\272\374\241\240\031\315\311\253\t\022\255j\254\241C]8[,>t\031\034[\216\256(;\363\210\217vSs\207G*\232\340\245(t\303\373\275\3179\367\330\364\301TP\245#TR4\017?\207\335\207\244\204\234xI\2648\260\350\214\270\207\017\313\252\255l\373`~\005\246<\227\343y\247\305\357x\244\323`\344\337\200\212r\317\302n\364(bd\346L\014Hz\004\377\001\035\267i\246\200n\340\345\367\245\014\267\357S\344\023\201\216]\200]\035}\337\3268T\247\243\200wJ\223\243=\376\037F3\247\023A!\244\330\345s\020\035\33081\034u\323\272\352\252\275\306Q\304\231!\351\222\366a\024p\3114\212\345-`\242S\247\340\312\276\3761\361g\241\356uS\343H8\200\\E\000\034\000\344\002j\270\202\377\023\014\220\342\001\031k\324)\212RZB\014\030!d*D)P)\201\305K7aIx\202\000\226B\314\234\210x\336\320\266V\304X\251\267%\261\242p\211\345\201b\\\022\244hh\347\274\324ffm\226\000\221\203\305\260\220c\2166\264\255\217\002\362\276;\247\333\3567\025*\302\347h|\207m{""\220}@8\"\334\212?KR\330Q\200\312\372\362\306\214\000\204!\004\315\017r\353\323\237\265\267\241\267ok\320|p\211\315\355\310\335\266\204\215D\267\264\326\335\334\027L\222\275\006\002\354\270\373i\034i/rd)dt\346\251\253Re[dd\0339|$7\016H\021\021\276\034\322\370i\353}\366W\263\340\263\321xW\344\367\340Q\267\301\352\023\355\244\364\220\003\270\005\367\000\355\235*\005e\311\342.G\022\372\277\035\017\257\364\016^\370\211\211f\"\202u\223\035\314\315\313\351\221^\212J@\034\025d\336\236\362\3664\026I\206ffhq\241\305V\0139-!\310\203\016J\305\336\220@`\302\222\024MX\344\2409\264\267\325\343'\014\211\336H\025\307\330\2155\014\211\017\267\367\027[e\201\200k\025 3m\242\337\022\222\222`\034\314+\253+\260\224fq\023\224\231)1\014\035\027\224\350\327\t\273\230\351\022\033:l\337p\375\343]\223\234\347\254F\023\331\"\022E\024QE\024^\000\233j\236\267:%\320/%\213\205\262\331\351\213Y]\010\242\212(\242\212(\242\212(\243ce*F\260\356\375\2576\222\237\221\345^f0\374\301/9\322\004\320\224|\205\207\341s\2573\352D\021\t\260\371\034\r\364\363\321\311\207\255\235\305\310\320\276+:\344\234\027^66\\w\327\356\220\270\250ut\004\035\227B.k\331\367aQ\364}\267\003^Ym\372\361~\216\330\305\023\222\326\232\220\326+\0168\232\264\010H\016\267\204Mu\246\212P\261\004C\201\n\204$0\354\254\r\322\365\016\221K{\220\203\302\213#\2510\214\343\305\233\263\035_c\257|\264\024\233\223\342\327\n\213\207GB\0039\344\331\205\366[\326\327\036lw\340\215\335\337~\334\\\225\243,\330\007\364sx\346\035\225\326vm\305\021\002\273!\031,\215\375W\265Z\367f\244\205]6\355\310\311\270\362&.\327\213\252\254\366m\336W\013n\177d\273\256KN\002t\302\003\206]$+\3640!\221\025\254\307V\254m\340}q\026)\005\215 \276\327\260\222i(\213\350\250\034|u\n\330\344`5vos\030\035\260XW\235\226\276W\tCc;F\277\201f^[\350\376s\372\332\374\362;\275$J\020w\2115\353\371\034\007\320\317,\007\272\222AX\261yv+\207(\322\255\237<\362\222\345\357|14&\010\240\345\221Ye\224\016bI\005$\026\367\201\216\245W\213\241di\342\026ky`\222Aj\311\005\302\035\266\244;~\335\271\276""\236^-S\276=\221NK\257\356\253\272\026~\2254\327\211f\254\325\224N\353TS\235\376&<\374Y\374;M\300-\277[l\311\200\272\200U\020\n\343\361\221\364\371\370)\276\353\017p\364~nMb-Ph(\232#\326\322\354\221\035\377^<s\300#\001!\310S\321\2505\020\242\312/\026\315\276e\352D\220\217P\211\001\332\036\242\264*R\244\210\"@\232\220I\216HP\345\001!\222\210\257\361@G\3219\247\362\272I\024#\223qi.T)/\274\332\027\"\0028\004\300\325\351\331\366#t\234\245\013|\000M\310\266A\345\211>\367\266\346\374\317\265\372_\235\373\275\270[\366\357\213\275\272\316xS\014/\263\013\235\316\347s\271\334\356w;\232V\225\245iZV\225\245\226vF\010\n\201ZW5\226\356\221\315\013\222\232\003\211\262\335\335\214\3064#\022\016\201\031\320\177H\264 8\330\217\274\344\200\032\023B\256D\226\320\347\256\322\025H\206\200h.n\302|\305\3605\206\326l\273\376\342\344\007vd\"<\303\262\232\025\304\026(\037\244\253&\205\331\253X\013\305\223\344m\276\223r\331\3464\010\363\031\215\321\206L\233~\347V W^\213\216\305\005J\205J\314\026\250\200\214\214+\302O\r\231\316\030\326\347\361\276\275\010\370\320pG\3514[\360%{\033\014\3537Y\207\301\367\344\034\315\027\003\021\350\357\365D\221\221b8$\244i>Q\266\220\277C\344\353\353\372\034\231&\232\005\343\227\263\247q\323\277E{|\353\313\353\373W]\366x\030\242~\347|\343\343G\201\0376\224\304L\236\345p\2569\r\to\006q\373\251\273\204\232I\254\022'\210@\222\326\322-\310\251#\272w\010\031uR\271\007'\027\027\022\366\363\372\331\255\032R1\360\306b^\201\"L\324\222\334o\030\302`\230\240\250\250\n\0060\253I\346\357\244\220\334\002\033\374`\020\227n\370\014\353\223\303\313\301\013\260\361\240\0309\034\210\323\357/\013|\350\344A\374\274\332\263\245wsm\037\313\275\n\207G\0042!\005\210U2=\215\013\363%\326\316\271\301\217\332\327\260\236\270:E(\366\360$?\007\203\332hP\217\032\tt\370\347#\347\244\202OH\222\331G\033U\225\027)\215\323'\3219-\362\226\307\211\324\365(u{z\256\253\250\t$a\212\354\343{m\206\222u\216\304\273~\307\264N\276\271\336\337p,c\2168\343\2169\261w\367\310\231B\303\005\303\242\"\0348q\035\223""\310\267\313S\214c\341\344T\323\243D\004\234\2452s\234\340r\211=\357{\334\003=\310( \226\215\033\345uW,)\205\301L\245J\316\2166\350d\001\2726!\034\0044ACb,5\236\344q\027!Mz\375\314[LcsBp3\030\2062+\347H^\363\263\324\227zL\234\000\277\217=\336T\267\200o\017)\300\363V\236~\032;|g\027\030\217\276q\234h^$2\321\266\323\330\221\256>\001\\\216.\007K8\265\236\016L>p\026\3560\367:\376r\360\263D\231\261\220a?{#\240\304\305t.n4\216\036-\305\305\266\253ur\355\275y\033a\2604#\311\263\310X\205TI\007ikbhYe\226\313Cyo\271g\251\037w;\006\021\006\317\034\227h\206T\310\312\302\267sQ\254\247f\356\346\373z\375\0319\205,\246\345\"\344fv\243\254\021\022t=@\241\025e\001Y\212A/\345\0149y\371\337|\370\2023Zx\374\335\325[\027}\335t\034\202)\334B\265V\255\324Ya\032\265\230j\270\033j\2620\016\036\330\361\332j]\335\332\361y\200\275K\211{\344\272\212\316\337v\264\253\251u\262B\233\264(0\016\022&\365\3535\353\375\031e\2320\314\314\331\261\336\271\215nuV0\230\337\021\340l\330\316\326\333tR\263\206~\200\024\250v\026\036\325\365j\340gn\3122M\177\033\177\t\363\345{7\003fY\302.\000\344\271\006\332B*\016\204\264\225(\031\275[\266\274\3548\nL\2239\232\354\036A\320\204\r\000p\025\354\302N\232\"\0264P\031\334\346@\337\350\010\210\210\210\210\216a\216\304]j\360v\273\3479e\273uL\312\205\201\345\254d\316f\327\213\310B\020\202\231\224.\201\0278h\270{\336\362\324)\213\210E\224\231\314\323\233\310B\020\202\316\2051\325|\331Rf\241\351 \002\320\221\216eY\022\210\036PJR\221h\200\204\333\024\353g\022U\360U\201\013\262\220H%X\\\214\260\273b\242U\225i\207\300\210\203,\013\027\t\202\314\302\323\016\356\342\222\356\220\254\253ith\210\204\322iw\275>Nf\242\333\306\203/:f\3460\210\3155Q\021\021\240\256\024KZ\255h\213E\252\226\252b\252e\346*\252\236b\252\252j\252\234\r\222 *\034Z*h\221\321\021\001D\000Y\230n\003\342\343>\346\360\233\274\374\234z@G;\002\000'\342V\320Wq\344\200\237\311\246\030\213\211q2\243,\231F\347-\214\262e\342\231Z\340M\226/\026\334\240\032\315\202-5\262\245j\246\251a\3448Zq\354OR\242&A,\300T\266P\200""\"\013L\256\234R\200\344\006\271\235\211\000>\031\376\233\362\020\252/\023\014\002d\023h\262Il)\363jO\177\306\310\223\005\310\n\365x\002\225.>\230\003[V\362\315\003K\025\370(\375K\305mQ\364\243\256]V\353D\271\261'\340\330\220\320\007\307;(\030 \216>[oB3S\n\235K\302\315`\363\244\225\245m\214\000\366\335\007\321a\270\002\025p\354\250\273\001~\017rE\032i'z@|\311\2661\214hV\344\017'{8>tg\314H\377v\tWh\006[q\313X\0344\344\367\356\305\201\326\263\257*C\032^\\\305\370\240\317\210O\330\226t\264\023\333*\0006`%@,\234\275\341\032\374y\243*N+W\257\306$O\\\254\304\014F\320\212\304\207\035\251\006\001eeA\222\270G\007?\233\311p\317S\2278\347j\354j\032#\000\031Q\311Xcc0\317\215U\tZA\336\\\325lw\303)~\255\350\266{\026) \211$W2\263\031\017J*z\302\211\034\204\014K0/\222\021.\213\305\024wHu\2059'x\0139\267U9\300k\224\360)\"Q\017\303\032\262/8f\344\216o\253\000\272=\0202\001a\256\302`/\200\340d0\004@d#\261\2749\263\375\361\353@\220\003\000\243\210\nZ\2048\037\206\022\304\273\000\255m\250Q\024\354&U\3579%\335g\223I\362\331r\014\306u\010\025\201\002Hj\350A:\030\252\210\326#74\320@6\3216i!\264\210@Fi\334\026\336\360\002\230}G\357D_?e\375\213\237\275\177\223\207\344\361#Z\tb\021\002i>0$\022P\342\224\301\0019\205*JBj\030\200\240\014\204I?\332/\272~\272\344\211\223\204\323\240\202\n\3152*F\362\263\003\222\245,HN6\336\022\032\022\306f\272N\2219N\031\357\271\316\245\026\r\001\305F\217\0038\337\333\033\262;1\257H\004\342\027c\206\204]>M\023\305\256z\350\233';q\027`\r\000ZR\001m\226]\334\203Z\305\201\0102\306\n\245E1\211\315\361l\247\263:9K\221kH\356_\315\207\216\371\241\327\360\242W \314\300R\240\"\032\337x\370\n\374\362t\036\307}@\233\301\230E\001\210\276\376\035Z\267x\214\344\226Y\343\034`\377\244\327\220Gb\356\3711\2600\366\312\313\016:\260\026\360\204\223g\247\346\002\000\334v\250\322\002\363\005VS\001B\211\022b\221)\305\214\223\206DBX\245UE+\221P,\226\302q\031yz\226\323\235\300\273\013\230\350,\004\026KY\330\004Pv\244%\025\224\241\300\270\232\247\00147D\300\212\205\001:\nb\276\207\013\t""\304\245W\"\204\030\242\233\356\250\300(\201!\0040\000,R\346L\366\345\264\251s0\022Tj\316OJFRL\321\213\353\r\r\260\254\352\356\254UW qUZ\320\255\256\252\256uJ\253j\252\252Z\252\250U*\255A\002\225UUUX\210n\010\211 T@]\330\232j\373\321\357\374\366\302_\n4\213MPd\001\353h:\020I\336!\325f\024\265%\234$\347\355\020i\002K0\r\022\322\330p\205i*\375Pc\265\261D\032%\036\251\335\361\315)\370\313\263\343i\031\264X,\230!\264\nu\372\264\010\332\220\356\315Q\025Il3b\215\021D\373\034X$\211p\267\336\240\243\237\r\344\022E\200\227\243\266\355\220\241\001\356z\203\334^\006`0\021\242Y\374\315\r\01084%\026-rP\322Y\2472\2643\311\003\317=F\027!\035\372\025\274\002\231\353I\004l\314[4Y\312\351\323\244\n\000\213\350\0340\034\003b3eE\266\353\\\227\003\217p\013\027\2703\002$m\245\234a3E\031)\316&cb5\\\034\213\033\355Dq\336@\357\334\010xg\212x\300\367\003\204L8\032cB\271\201\235\002z#\035 (\314h\001>\264h\336)\355Ci\024\256\304](\021\311\224_\031\307\203i\025o4\2104M+\020\r\023\256\000.\205eG:\213\202w\333\230B\340&\2302\255$\224\353\271\240\",\"t@\235\242N\343\246\203-\241\266x\210\2548y\303\010\200>\211\313.tj5 ;\374Q\340\366{9\322>\340\014\006\231\304\004\001\010\200\010\002\030\232\370^a#\253:\322@\221\315\311NK\007\177\001t\361H\037\305Q.\221\013\221\000\226k\255\034!\024\232\002\3033\232Cd#\213\234\\\202:\246\371\001\251\350\271\206\204\020o\236,\361*s\355<u\353Ix\361d\371\200Zy}k\353K\353\236\223\233\365\367\006\344\006.\0044\233\021\000(8\2343!\022\374I\005\001\361\024\022\331\255\365=O\276\373\372n\016NBP\227\352|\272*ggB\315+\022\010AH\221}s\350\203\234\021\315d\300b\020X0\024\000\305I66\201\225$\005\252Kz\343=\356C\364\262\000](a\323\235\201D\220A\201\321\275\004X\"\202\212\n0\021$\024@b%\204\201\346`\2016\355\255\235\031X\215I\232\007H\251\365\333T\212X\300\336\276@\217-\340\367\330\246\302\313\34336\3551\267\321l\275\026@\331\345\321\r\007\200\260\242\353R\027\251\227\2642\250\014\355 \010\241}\305\371\357\235\324\262En\335\250\005K\001\215)\244\034\335\210\004\246\247\225\376q""\35128\202\304\372\"`D\323\267@3r\232@\301\240\272V\311 \233II\33631\207\277\030&&\304N\004r05J\304\t\231\244\370\231\r\337\274F\260\205\010\212\312T\032\033\307u\225Tr\277N\275s\232J\377\220\003BH\361x=0\217\321s\3246\321\326\227|!bngs\363\321>\326%*hB$\tm\327\250\342\336\375\251o\021\306\010ci\214lJG:\nNr\267\2079\306\030\200.-\232\"\216\367\312\365=\017\007\247\022y\272@Z\220O\010\001u\0022\361Q\006\336\235\254\014\003`\231{\306\206)\nz\256`*o\025\233\323\302\002\010QP\026z\244\0260\007.\226\010\251a0h\037w\305=\370\005\376\0059\337\277\254\321\246\221\252\352>\022\313:B\367lK\205\221\331\211\2131u\243,\273\000\353\222^\357go:\261[\027$\221\000\220\263#Y-B(JD\007\232\262\026\367\304}\254\216[\200\304v\244\"\027xL{\346\004\265\200'\320{\006%\214\251\234\010-\001\334r\\\002\357\021O\263ab\017\216\226\263\222\363r\016|\253\242R\001~\253\311\347\340\006\224\005\351\000R\363\332\001h\226\316z\324\234jp\002v\244\023\315\010\225\245[\201\t\325 \305&CB\220\204]\236~\233\014\246-\005\331b\002\303\257\253\"\324\032T\342Rh$\334\200\204\202\203\t\371\020\324\2150\2242\213\005]\024\244\351\260\370\243PZ\353\027\002?O\031yq\267\014vt\3542\276\030oyM\n\252\253|\357\275\272\332m\321fH1\004&\231\013\014\221M'\204*\272<e\000\024@2\306\200\215\031K\305\225\366\313>\177\017\245]\206~\032\221\2162\313)j\276z\334\3552\356N\327\206\365\235c\030\273\206\r6\007\010Q\223\201x\2205\251\251\013=\245\340%\244\336\010\3142\020\221\266Y\311\224k\275q0\305&W\262Dz\367\027\331rF\304[\247a\204\030\357\363\362\277\213\\qj9\242\"\232\332,\002\000\204\022\026edJ\002\367\002\364\225TJ%K$@\215\2131[\005\246\005\257HTf\004L\027\312\252\2460\303\034\026K7)\301\2535$H\235%\026\340\327P'\007\231r\231\300\031\305\025D\222\344=\317\023 rrb-\340\303\372\265\212hm\256\345\253#A\2477*\241UFL\232)\251\005\035\200J\200&\320-IJ\262\365(J\312\316\214\260\323>\251\252>\253Ph\220\200\017\222\3046\222\013\301\240\275\004Z\356\327\313\372}\313/\302\313\262\301\304a\010\201\204\033`6\266\216[l\351\\$\220w\303$+E\357rCh""\023\310\200\320\230!\247\217\252\313\256\246\321db\250\005@L \033\002i@\031\345v\322\2001\251\002\244\202W\271%\244\013\003!/\241\tRD\201-C\256&D\202\350\333l!\016\000A\202F$\005!X\n\301\022\302\275m!^\014\001@I\nm(%\014\02772A\006\200r\207\nG?\232U\335\233\270H\335\rY*\013RB\357\256\\\364\232\016\\\344u\317\035\006\233uU\0070N\316\345[\365\353\020\232bH)\275!\014\231u\342\231\021\230a'\235,\272\316\0134\266^\251D\222\305\215i\221\267c\035.\000f&\025@V\344\2232o\345Z\323d\020\013\352\007\231\010QT\301\2414\014A6\217\303B\005D%+3\333\257A\206z\335sh!,\354\004\332\002RH\364$\"\234\250\327\272\354\330> \010SF\250\007\014\022\374\2661\215\270[\024\307\267[\307\277\321\250ZL\345-\231z\007B\366\206\025y\204\234\rmRA(\305\001p!\264\010cI\032\231\273:4$\007.\\wj\002H2\204\2700,\t\016\313\264\000\226\334UY\273\000\223\331\252\301\\\325\202\356(D\256A\022b\311\001\266>?\276\222Pz\364 8\337\034\245\204F\271\372i\307J\306\232\237\207\370\005F\022\206\327\026\032\020h\335\267f\313\026\301\023\213U\3116\217m&ie-\256}\304\322Rb\333'`\002`*\260\353i.\3733b\021\241\017E\365\224$7D\023-\321\222\021(\005\365J\301\225\304\250\r0\032\t\355\327\t\351\334\320\003\372}1\365\376\206\227\251\211\037)\315\246\274\345i\314\205KPw\247l\367W!\021\335\202p@/\017+$\211\016p\247\010\202FD\024R2D@\020\202$8bn\333\014\224\200\034\340M\013\215\rPi\320)\302d\311EA\205A0s\200\211\223\0309\370\265mm\264\373\000V\226\000\034\003\216\373\260u7\200\274\220\343\032,\337\267L^\261\273\203r\324\357\325@`\313\021M\363\312\036\\\3103y(S\307\255\032\314\261\262\354\030\035*\306\271\232\324\326\306\274mv5\332\326T\003Q`\305\305\232+\3062\263+2\263+2\263+2\265\200\277\026\205`\006S\244\221\360q\"\005.0\026m\026oQ\251p\010\207 \014>\305\026\337\206\221f\311N\355\260\350\213\021H/P\305\000\331z\004\301\026?\212 \3430\020D\215 \033U\327\030q\312\306\220M\244\206\210K\362\006\226,\032$\0245r\001eHKZ\322\332\212u\264\005\214\022\240J\001d\n\031\006\n\2029}\344\n\002\266\264\n\300>\017\370\305\335\310)\375\274\335\010""\325< :Vh\234\355\200\025R\024\342\311)\212\210\232\347C \246\230\002\n\304\020\260\023\2534\343x\027$(\212L:Z\240\206L4\002\021\270v\260\206[\263\345P\202\024XB\362\351a\252-6\001\236`iGL\256\254\305.`\364-3\235\340E\352\364c\023i\001=\020\200!\265E6El\276QY6\r\002\265\023\021\000f|\274\221\251X\300\264$@0\305\362\2060\216\336\203\353Gl|\357\226r\327\026\326Rnh\026\330\361\004@h\200\232\240\017\0209\3510\230\243\222\350v,m\265vZ\320\276(8\236\240\321\224\255uo\272\200\214k0\016D\266\346\351\355p\205 \025H\201zL2b3][\206\244\007\200\360\353XO\244\300[\242\324\003+\240<Am\002V\004EB3\315\003\300$O\021\213\243\202\007\353\314a\210\027\266\347\272\2556\256\353\017\026Or\001\350\030ZD\205\302\344\265\324\243\307\200\247\250\020\345\200\325u\357\036-G,\330f\302\234\360\222\001\367\340\340s\335\235\340\0351\024\274&/\233/\312\34100\003]3\343\226\251X\220\250#\242\224b\231^j\236\355|\347oi\350\344\241\2167=\340h%\234\220\330\24556\272\220E,\252H\225jTC\201\262\006\026\313\220\026\001\213\005\024\210K\223mI4M\004\257>\005\301l\250*\204\002/c\001\312e\221^j\267{\210\345pXQ'P\200\300j\300m\214lI\262U(D\361\306\313$*\005\005\004\354\276\207X\014\301\241\260\245\254^H\345\264\266\370x\240L\026y\001\372\265\200\320\320;b\200\020\201\343\320\340-\244\362\313<\356\2716\255\311\204\tM\001\222\024^%9\177\242z\014\330\325\335\337\226!\336\023\266\203\224\333E\351\365L\021n\334\255C\020\3218\002\020\014\\\350`H\023lG8 '\244\004Iq$5P\272\374\332\365\336\265Q\031\224\223i\210g\241\367\016\254\221F\2214\036\264\026r\354\307|\314\2405\313`\014\210\337(\320\004\221+2\246\273\n\212\252\242\216(\005\355V4\370\2554\\\231\231[`H\033\334\000\256\346\344\213\331Q\t`\025Q\245$\301C\003~\027\206/\2758\316\347\022\211$)pu\357\005\320d\210\005\222\327\236\3040Z\001\261!\300=\350\t\001\013\026U\263!\331`\252\365\327t\254a.G~\217\0358^ZI\002\206\005\032\307\311a\\\372\017x\014\300Y\313\204\372\333\327\025\3231U4\251\252t\314]8+l\212\313\236\005\241h7\366s\225\343!\002\340\225Dn\177\215\324\224\000""\231:\302\005/T%&\376^\303\210>\267U{!R\255\324<\202\374}\000e@\363\000\255A\244C\260`\247\006\262~\003\271\363\004\322E@M~\3041{\026\017$\036|\036\306=~\"\223%\203k\300\201\353\"\330\013x\244\214F\306\\\225\340:S\007) L\\\257\303\347K\n]\001\221\264A\364\030\233\203\2366\373Y\004j\017#X1^\356f\232\243\026\203L\217\237\217M1,Dkd\207\251\343\342\360\367\276\253:\300V$\001\251\006\221\243\212\200\024\022\006\0022a\2442\234Z\t\304\311}\251\002%\366+\327\207\224Z<\250\300E;sw\271\264\227\203m&\237k\200=(\032=\034ii\242;\327\200\241\010\370P\346\024\255\362\313?\266k\323\307l4\200\372\340(]\336\005\322\0211\r\"\000\343\003\220p\221\031\235\222\322\217 \"\026vP\004\302\203A\365!\215\003\001X\374>\357\036\3347\350\"\305\231\3069\345\203\326\356r\023&\206+\363G\323\340\021\r$\303D\322\003\234\226\356\273\301v0\231\323\251\013#0#\031i\316\026\246[\022tq\313j\002Jo\251,\335\337\227\237\353\001=\246q,:%>\220QEt\0167\2735&_\227\342N\312wm\254I\n\305\331\205Q\326S&\010TV\034\363\360\214\210\301\r\301\373'\210W\211\376\303\375\020\341\036\001\357\375\250q\206)>h\250\2220`0\214\003|\360i\020EEU\210\307\262\016\340\360\312,m\3570'\201\010N\350\026w\364\024\212\013\003\204\177S&C\202\035\320^\036\333\260\014\317\226$8\323\301\000\242%\277C\206:bNL\206\344uO\030c\214vW,pF\206G\304\036.\361~X\016\262\0359@\244\023\010w\323\030L!|\037\014\253\217\345\304\n\020\0209h\025hu\022\273\302\245z\244X\247\327\361\377\004\016\370\356\353\355O'5O\230rQ\002l\021\021\373/\221\373P\274^\363d x\300\311/\313\250\301\360\030)\214\237E\301\344d\365\277K\347\021\347\332\302_\371\036\241\370\214\322p,7\2038\374\010\362\304F@:\235-\217\205`C\221\022\0300M\241\354\234\227>vh\244\031H\347:kI6t\243\010=\013\226\313\265\362e\360\374\2348\206\200\332\2151\036c\303\261\234\3219\3220\2407\014?S37\211qX\325\264\353\213\035|\346\343\222~#\363\376A\346\275\275\252\252\252\252\252\252\274$(\354\004\302\307\2041\020\306\212 \224\271\231\272+?\344\353\220\035\2361\317>h\343\214\236\300\022\023\030\017.\263\035\3464s""\364X6\276\1776\206\223\205\244\310~\2024\363\222\351\232K\306\236\010\377\220>\3037I-\224\276n\226\246\217aj9\332\211(;\222G\027\323\221\215\304dzB\323\355h\341;>\257b\017\323\2227\306\222\354\361s|\031\303\232\006eX:\034]\027\267\320\216%R\271\263{\237\273\023\255\034\262\360C\360\2628\206w\300\366\253\235WNG\220\357\306\203.\257W\254\212\362.\264fi \310s/\326z\036_z\274\314\211\200\364\217c-\334<\003\315\304\377\241\376S\036{\374c\021\325\375G|8\316\312\030|P*\036f+S\261\361\261\267\3025\232v+7\313\213\014Hk\342\324\254\340\230\244Q6\274wn1\031\2360\0250\352P\337\025\006P\356E\034\024\035P\312\350p\216\024\203\207\305\313\346\341\273\264\334\355\306K\233\361\306\346\027F{{\r\336\347\031.\326\310\311\311\355\262C\263vj@\377\201\024C\300B\004){D\004\200\2154\221\201\312\340\225=\311\242\002f\271\021=\236\220\217\316\273]XF\024$\004\250\372*3\202\317\034\010\300@\001\020\004\235\224\"H\201\025\004 \340C\031\030\251\017\200 \n\230X;\256\305\357T:\356\\\243V\314\276\344\333\336\0276\267\034\360\267\325\271\270\334\351i\351\366\235\344n9\247sq\321\300\331\317\320\321\255\301\373\310\273\272\203\365\270?Fc\336y\322/=w%vi]k\357\260\213\274s\356\357*\205\377;\301\235\351s-\016\027O\001\251r\030\300\327\325\277*\347a[Pr5e\367\335\360\272?\226\017\211\275\307\307\352\371'\016\205\023=\2558\346^V\330\3736\223r\270\332\3718\255\317\205\346\300m2GD^\351_\324\000\2641P\273\":\005z\211\021\030d\226\033n\345\301\014\234Gs9\236\355S\037\326\352\232\330\223\367\365\330\027E\330\305\275\253\207\276\352\363ub<\214\266\217\230\302\"1\320\245+9+\025M\212\tt\245%\236\301P\341\003\216P\244\22219\266[\303\013a\257q\212b\035B\361@Z\210I\t\034du\272-\310H\021^\010\031G\2234Z\225k\336.\203K\014\344!z\273Y\230\235h\020RK\027*\205Ed\024\005\234\324\031\334P\200[\246\010`\024\252\0217\266\013#\262\244YY\2071\n9B\265\260\250\207W/$TA\002\254\000\360\200K\245\361\240\265amE\335Y\225m\020\224\265\253dD\263Zm\026\212aY\021\0035\001.\240\312\014*]\001\224\300P\266*k\r\206\023s\024EC\330KZ\226\252]^Y""g1\006\264\227\3343\326\225\361D33\333\020\261\021\211\361\016b\270\251A\226\005\214\221t;\031r\326lp\353\257M\256\373\301\032-\207_\361\373\277v\347o\020\336R\216\355\016\35636\263\332d\335n\267\033\257\343\372\377}\\\345\255[w\216\204?\344a~\024\256\030\027xq\217\375\226p\360\351\377\251\220\032{\237\231\317s\234\316fs\231\2340\303j\265\361r1x_>\352\2333Sg4\023\251\242\033\370\241!$\245\354\"\356\370\346U{\370\320\315\246\363vyD\314M\014w\033\003=\236\316\365\226\313\313\252\317\226\234\372CY\205\377\305\334\221N\024$\014s\325x\000";
    PyObject *data = __Pyx_DecompressString(cstring, 9364, 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 (9136 bytes) */
const char* const cstring = "x\332\345|\353o\034G\222')\321c=hK\224e[\036\313v\221\022\335\224L\265\330\024EI\264\251\271\036\221\262h\213\024\037MK\264\254m\025\273\252\233%vW\265\352A\212\264\367\326\267\207Yp\356vq}\203\001\266\201\331\203\373p\267\230\036\334.\320\003\034\006\334\271\373@@6\240\217\375\221\037\211\303\330\207\373\246?\341~\221Y\357~\220\324Qs3\220\320\312\254\254\214\214\214\214\214\214\214\210\312\344\231\276~\351\\7\222n\347a\310MB\305hw\337\240\264\355\253\017\034d}\003\022\325\342\207r\364R:\022=\024O\245\344\274i\014\t\276\307\310\\\244W\210\214Sr\233\222\021J\026(\311Qb\260'\226Z,U\215H\\\222\004S[\224U\301\\\020M\301X\320\254\254$\314\313\202.\247\264\214\252\254\312\222 \032\302\375\274\254\233\242\242\336\027\356\177\024\231\327\264l\344\352\375\350\241C\202\375o(/\352b\316F\004\010\303\324\0010$$\026d_S\273\037M\020%\th{R\242!\237STCV\r\305T\226\3443Q\017\241.\233\226\256\032\276\356\200M\267dAI\333\315\r\013\3036\214\264\225\315\256\364\n\232\271 \353\313\212!\013\327\305\254!\3731\211x\313\020\215\251KbV\221\256ijZ\311\030\237\211YKfx\307\322\302}F\333}A1\004\205C\t\232.\244\000\231UR\246!,+\346\002\357CP\305\234l\344E\364\355c\300\251S\302\350#1\227\317\312\356\253\253W\257\n\251t&\nj\2236\013z\272\264t\327\031\027b\207\274\237M\\\023L%'\257j\252\374\014\354G\363\373^\373\027w\016,3\325\323\225\311\231\273\237\200\373\016\367\356\273-\031- \005\344\351:H\321TIQ3l\252\264t\332\220\315\235\316\216\213:03\315\347\205\343\003\261:c\251\242\232\014\237\3279\370\307\253\243\302\210\234\026\255,\270\007\304\367\373\356\327`\311)\252e\312M\360\330\000\333c2\3003Uj\202\311\006h\206\351\217,q\234\345\333HX\257\213\224\376A\"i\332}#\353\341\023\361\276\313\312\367\235\221\236\361\211rPN\251\371-\326\334}{\316\3017l\317\354Y\341\302`_\237\360\201\213\367\2540HE\033\371\216\345\336\\\355\351\222\r\263\253\227\343\035>wq\367\013 \247\251\346\302\266\322\317\240\004\325\312\315\313\372N\345\237c\336\265\360\363\256|\242F\310\374\375\013=\261\341OD5\032\215\306\372\207G\344""\324\231?G)\013\014\250\221,\2153\240\t\006\344\223&\326vH\010ra\307B\303Z\367t=\020U\310Ml\367\002\263,\313\213\222\270\262\255\310\330p\273\024\032\007\373\256\305\306\351.$8A*\204\236\276a0\025L\033\034\236\261\324?K\311\t\215\250\221\354\334\266\301j\244\307n?$\004X\261c\361\261\233\367tA\216 @}\273\027\240\033\347\307\317\317\334\027\322Y1\263\235\014\021\314.\005\310\306\276'Z\207\341\362\023A\362C\252\366C,>\256\273?\024\372\207\271\332\376\263\024\246\332\0216\222'\016y\235 kD\212\332\223<5b\315\216\205k!g\364t\021\226g\223\254\370\370\371\311\361\347&Y6\366=\221,\206+,Y\361qb\336\344\370\237\245$\325\216\250\221$q\310\346\222\344\260b\307\222\203\232\\O\227\230\333\241\340\030\213J>\017\346\355\336\347z`\345\362/\262\277K\343\007\243\375\276\3265QU5\223\255\007I\316\232\"\361E\225D]\027W\356v\033\367\242\207f\254|^\323M\214\024+P\313Z\246\242\251\024\323P}\001\013\036\2740\334\210\306\002\217rDm\344)-\207Y\221A2\270+\210*\026\3742\225%\321\224\311\3212\206\016\221\3748\305\030\260\207[r\212l\006HJ:-\353\262j\nYY\315\230\013F\224\265\007H\314~3$\270\010\324%8\371>\204\274\034*2\354BZ\327r.\025\203\003wC@\016[\302\250\273\215\010\343\232\246\236S\345\214H\"\204\265\240\211\346\020\301P\200\301\200\"\301( \307\252@\336\276$\247\224\234\230\025\362\032\364Jt\027\370T\r\203\317(\220\204\264f\251\222\333T\227A5#]\260\014R\221)\31301\230\210\224\312\212\006\360\325\002\322\030\303\300f]\350:\220\215\001\271\020\205\240\035*\242\207\354\006\362#S\027S\340\273\272\342\021C\223\r\356\250\246\341\214\013s\217\225\024\t\224&\000\022\252\267\031\366\014<\337\r\002w.\014%\243\356\020\201\362\010\353&\257q\275\302$\377Y\260\004\310p\261m\213 \320\025\027\030AL\233\320\035\\\206\236\265\361\216\031\331@Z\353\302\006\206\265[b\2334\336\236XT\310\031Y\377\177\231\367:(\236i\346\267#e\007s\357\242x\266\331\367\232\357d\356\\\350\035\317\236\254\2475=G\333\215B\033\tF\365\354\272\335A\226\263\262\246\222\307\006)\356\031J\303\232g\n\352\331\361\361\315\3355o\204\236\254\202""\t\214\305.\367\237\361\327\301hv\252\372\006.\004\252h\263\266\353.\364_\014Tq\263\224\327]\032\034\014\324\3311m\273v\240?\026\2505W\355\212\301X\260\231e\246\354\232\213\261K\201\032\307g\345\265W\372\006\334Z]\316iKr`|\375\261X\270\332?\304K\375\341Z\377(\007\006\303\265\201\201^\271\030\256\016\215u\240\006\2737\334\2135\215}#\276p9\\\031\032\364\205\013>\200|\026VWp\324\001\004\274\336?\354+Wj\252\375\343\036\254m\355\037\370\345\376\376\232\372\320\310\007\007j \274\241_\256m\356\033\373`_Mmh\360\200\200\035x\215\231'\006\255\210\254\222Sx\230\330R\351a^6\321D\035\252\377)+\372\277\376\346\027\354\223\327\010\274\320\271\321Gy\231,\331\330\271\021gY\365B\217\030\246,JB\006K\260[:'\301\032P\251'(n\006\021uZA\017\022\254\250\246dAK\303b\261m\207\250\271\252\250i-\022D\025i\326\014\206l6\312\324\231ngu0t\033\r\273V\363Q\317T\334i\307h\344X\221>;\363\354\275{a\004>@X\341\221fT\270VWc2\032\321\340k\272\023\"\242\207<\204L\361\303\361=7x\206\\\224\254\002e\217\351r\003\\\360N\352\301\307\316\305\372\003\r\354X*\201;\300\221\006,\242f\221\235\222\356\243\373\272\250dIX\035\003\233\271\034&\326\257\273\217Q\334?%Bw\243\025\253\216n\337&\253\241E\235V\2624$|To\010\274\222\232\316[\n<Y\327\356enG\304\253\266\367X\333M\364\177\323\210tK\021\337'\233^l}\206I.\261\275\002\205s\227\007{\007\372\372\230\275\301\037\243\016\2329\254\276\021\356\343/\221\313\311\220y\030\200\265/\032\355\017B7\006\274\202\177\321\372\300\264\356S|;\235\227\035\006\362\2211\351e\222\3404%Yi\320K,\032\275\020s\373\340r\022\t\026\355`E\260\251\303\213X\317'\242z\206B\354=\354CC\010\023\243\223\210\364\342P!\220\306t\305\372]PG\340#\341\027Mi\353\353\031\327\210\266\301\036\026\311\256AV\217\270\233bj\321\326^+\021\257\304h\365\225WdQ\347:\227\016\034`b\316\317M8\241\0027\276\340\315\017s\247(\231\320L\231GZ\256\255\230\013\320\362\212A\021\001\005\203\200\240fW\004\303\324\225\024\231t\314\034\235\034\235<7py\200I\232.?`\013\027V\023s\364d\203(!)7\301/s%O\337)\307\322\302\212f\301,u\204\334\0104""0\027d\222k\223\305\243\"\214<f\316%\321\034\276d\004V\027x\301lL\264\346\301\225[*\221\305\343\023\206\3407\321\370\276\204\316\357\326\215S\334\013i\013\260;:\3156\376P\244\220-M\036\200\244-\322\322\271\211\271\373\310S8\376\310\315\214g\217=\361\366\333D\237\204\036\356k+\206i\234\331u4qA\256\023\216\n\306\232\032\006\233|\226!\013\354y\361&\207\315\201P\377\236\2619\374\001\341\305`\263\027y\257\345s\275c&{\306\356\006gX^\014\256\3279\270\3420\335\037g\3363f\207\202\327/\006\223\353D\254\035&\007\216(\354\031\227\303\007\037^\0146\373\316\025\3242:tPp\317X]{\000\361\305`v\375S\207\016\267\303'\317\366\214\335u\216\264\275\030\374vNZ\325\362:t`e\317X]{\020\346\305\340t\340|\211\237\335,\256\304\273\260-\341\234\230'\273\276)s}0\022\\\217\273\340q/\374\307{\347\311_q\271\255\312\313.$\334\216\200\251\035>\325H\r\375\035\361\017\327\366Am\201:\241\250\223\276\",\203\261\262\260(\257\220_\021\262\337\215@s\201\271@\314W\344\2605\037\323\215\006\347\003x\347\364\325\227\221\325K\037XeN(qJ\342\204\2079\346gSs\211aL\337\343\017\324\364\301.\350\314\004?N\007O\027\204>T\357\376\270Acy\363\202\260=_\222\2071$\364\365\n]yz\210\365\n\321hT\370\313\006\002h\373\010\317O\000\375N\310\236\t`\000is\001\2549\027d\354\360\350\323N\0052\310\301?\001\201\014\270}\317 \220;?I\265\235@\222+\366%\367\305\270Drvs\251\354\342\034G\241\237\211h#\t\265m\320\347'\241~#w\317$4\200\264\271\204\372\243wF\223#\301;\025\310 \303\376\004\0042\340E<\203@\356\350\204\361v\262\310\215\372/\231U\317\345/-\317\273\302\327H?R\014\216d\244\216oolo\n1\020\240 A\254#\204\315\220\327\227C?\267\266\027\204 ^v\337\343\377\267(<\277\023]\276\217y\230e\244]\230b\nH4S.\316\014\370\242\t{7\255~\244{1\235\034\337\0132\215,\324\361%\305:0\215\354|\366\366\263\030t\241\367n\"Cx\367b.]\224/\310t:^\376\227\344\346\223\356\325\364\246S\352\363\317\237\337\306\037\212\001\354\331\336\037\306\333|\373\367\276h\032\376\013h\273\336\366k8\366'\260\363\207\243,\317\260\371\373>\370\362O\220\317j\000\230\253\220>\212|""\014\t\347b\227\373\372\310\036\225%^\034\030\240b3?\311\rb<?q\014\306I\366L\032Ch\233\013c\360{\255\321\370\226\321N\2452\314\267?\001\241\014\305\243\236A&wxqi;\211t\002D_\262\010\021\367\220LK\256\353\264\317\330\027W\371\032p\276\240\247\025U1\345^\367\273-\211\225\241\254\262\243-\"\0230~\226\333\201\027\275\263\211\366\321\203h\302\261\017\355E\226`L\211\360,M\207L\234\003Qu^\321\351\017\357\353\271\250\nr.o\362\217\343\230\352\006\r<b8\\\360\3633\373\004?\253\032\356A\373\224w\324\212>d\363c\037\204\324w\350e\327\r\354\223T\321C\376\206\222H'\376W\362\301\376\335\223)\336\211\177\376\215\\p\377\244\301\\\2570\336+\334\356\025Fz\205\205^!\327+\320i\024\374\267\360\037+\331\217\0162\223_\261O\221\023u=\023\223s\311\221xb416>:;1\226\020d\200\234\021\"\376F\0368\023\347 O\351t\003\375%\005\312\351o+\314\235\0379?\316N\241\334\275w/rU\350\215@\226>\212D\204\2363W\207\204H\364P\364\203\017\317\003\356\\\367OP\244\323\247I\225\216;P\370h\230%\335\222s\206\263\337=\303\211BRR\226\222)Y\311\016A\337,)\214\303\363+\302\252\254kQ\177u2g5\003\221\264eu\233\352m0\310K\262\272M\3656\030\322YM\323\267\253\337\006\207\251[jj\273\372mpX\371\246\225MZ\3474\251N\r\246\323\264\3278\211i\330\210c\321p\332ol\363\027\366\206+F)v\320%:\017\305`?\342)p\025\245\177\210\035\267\201x\320I\245\264\242\033\346\260\273\277\221B\271')\2068\237\225%m\245\007\020\347\264\3649:\200s\006-$3\251\030\032\035'\246#\3520\272\363\221\360\271\033\200\000\221\013\222\316\231a\020Y%\354i-+\271JDV\230\216\356#\325\034\353\265\317LF\202\013\304>Sv\317\316)Mz\207\034{(9\223I\321\362\241\253:\302B\316`\361AP\035TM\030\241\360\025)-\244D\0166\034F\220DM\351\252\017\010_h\266HB\365P(\264GJ\032v\026\032eZ\341\177\202@\311\250X\363\203\003\347\346\025\323m\322`\325\204\352w\205\262\3012\n\325\357\ne\243u\025\006\330\025\322F\013-\014\260+\244uW^\240v\307\350\352/\305\234\222\3225n\315C\222r\330\251sV\316\336\277=\261\316\260\313B\3661\262\234\370\310\003\212\362`)\223B\373\257+\014\347\024\203\335%\n\357G$""\356\037\371Ny^\215\n\223YY\224\205\274\256-)\222m\303\222\332\240F\367\033n:\032\377\362\3057G\036w\033\346i7\027rvdl\233\035\334W\357\236pt\317\372\325\253\0146\247\273\026\266\365\230\004\271\222\005K))H\226\354\\\003C\227K\212\230Em\212\314\237d\222(S\215\010\333Y\243\311\224\246\203wt\013\302\276\307\346\036%Ur\264\235\372\301,\232\277\032\010\360\301b\236\277.\252\0319*\214\333\024\3633\177\331\025w0w\317]\036\244S\245Q\226\335\023z\344G\251\254e\320\227\314\275\300\301Ob'M-i\337\354\2110\265\035\326\212.\024\330\331\010F\260\035\360\341\210_l\024.\330\256\235\201\355\243\207U/\311\3220q\225\246\333\025a\347\321\030v\377\214\nS\250=\241\"\377\013\036\206\234MG\223\266\n\306Te\r\247;F\017\004\226C\260\233\003\rk\222\362#\263~-\335(hT\321\270\025\273h\320\260\246q;\036\202n\\\325\270\245s7\241Ye\343\326\346j\243\367\215\333\320u\206F\025\215[9>M\263\312pk^9\311\266\322&S\014\237\247~\005d\255\301\360H\206cM\352\214 \031<\202\307\\\237a\332\242\221\303,\247)\0356`\376\260\325a\331\213\310\277.\205\036\303\024u\263\026(B(<]u\225|\263\340\275\214:M\010\225\257\315\360N\032\325]\255\036\030[\322\315)\346\253~\027\364\332\rvCm\023\315b\350\251\363\260\027\351F\300y\347\002\311\212\377%]-1\242\371G\322G|\2630\240\036R\362\325\0106\261\324\242Q\377J\3653\375\225\270:\030\331\311grr\032\326\354\276\0333\3477S\345GyQ\245\233\357\230\244\274E\347MR\262\014U8o\321\2658~9(\330\302\333m\304,]\233\200\347\305\201\203`\365\354_j\0043\026\251\357&E\335[\262N\0347\265 \322\315=:z\357\334Q\204\363\033\271w\317W\360_^\214\322]\275\346(\232\336\354n\324\310Rm\263iG\375p\367$\t\327sX0W\207\315U\036\233\030&\313\236y\301\036\361\264K\261\251\021\240\335\206\235\310\314\260\223wK\344\200 \033\022\350\201\373,\361\361\311\361x^\217[\031{{r\034\005\327\336\340\016P2\351UPp\313\004\323k\252\234;\215\241{\214\341\273\2135\027\026\353\334R\014^M\014\335G\254s\t\321\365\334`\352\351D!\271vn\317!7\307y\235\221\315\000\275T\366\321K\305\000}\364\002\273\r\237\001\377\313\020\021\212\021@\213""\242\017+J~&\240\030\350\003\345\020\013\360\306\343\000\n>\006\240\024\352Z\323%\354?\013\220\210:w1k\357_\326\271sY\357\242e\375\333\2255W*k\357Q\326\277<Y\357\306d\235[\222\365nF\326\275\016\331\340\016d\355\305\307:\267\035\033\\q\364^c\252]y\032\031\221S,\330z]\236\277\256+7\306g\354\000+\373\233^\243\272\2569\367\227\270!0\006a\263_\330\177\271\211\301|2;>\371\211\250~be?\261\324\361\361[\023\211\0333\343\242>.\256\000\317\204\266t+eN\216N'\342c\023\034\rOk\227\244\373\276fEN\372\256/\242\264\362\010\377G`l''`\266L\313\351i\346\317\361\264\026\257\373\276\006\357\214h\316\310\371\031KM$>\277u\375\372\314h\"\261`Q\234:a\311\263\211k\237\337\232\030\275}{t\364\323\221\370\334\314mY\232\373\376_\376\373\017\377\260\366\303\337\377\343\037\326\277\306\303\037~\377\267\224\256\377\034\351\367\277\372\025{\363Kz\376\331?\263\367\377\226=\3777z\376\227\377D\317\177\367ox\312\233\323\003\303\360C\361\233\037\376\341\033\274\374\376?\226\251\212\027\177\377\267T\004\200]\373sV\373s^Dw(R\2476\360/\031\360/\355\332\237\3753\325\202\014V\004\301(\"\375\341\357\177\367}\345?P\272\3667\370\375\237_|\363\277\177\375\213?\254\377\273\357\377\016\324\376{\244\2428\257+YQrT\237\255\362\034U\347\2528\237j\343*\315Ve>\025\306\256\305\253\232\246\212\031\315\200\245\221\304\236\210$\307\320\302\241\325\036\377\017S\314\353\370\241CJ\240\351\304\354\267\277]|\374kQ\377\356\03317/\212\206hP\320V4V\324\224\242E\341\330a/V`\231\210\246he\360\203\211\303S\205g\226!~\373\r\3755\016C\\\002J\n\306\300D%\003V4\230\253\342W\247)\272\366\013\327*IW\340\345y1\265\010;7\005\307\221\376\303\2240\024\333\320\2613\373\372\254Sb\326OjU\326\227Sbju\231Z,J\222\270\250,\212<\315\212:\305\235\235\r=|\031\327\326\340`\225\023rCnH\217\177\223\222s\363\020a9\205\237L\237!l\247Y\222W\355\"\345\272&)6\244\222R\330C2I1\273$\317$E\246\333\260\031I\001\273S\013\200R\r\tE-'\253\n&J\313\201\007\232\004\357\216h\300{U\225u\326\000\204\360\277{\"\231\332\374\003\tkF\227h\032d\232\321\234\2021f\344E\272\272,\353""\032\005\027\330\3059\2314\201!\257d\037\377\317lZ\236\307o^\027\025\r\271N\377\001J\231%\352v\246\330\371JZ^\222uYA}V\314\260\030\022E\001\323\030\026\212\2500)S\360#.\0057>*B\350\322\230\3314\005d\223\351\307\277\301\264\313zFVUt\356l\210\366F\350n\200\201\215\317\267\341%\223\031GC$3\n\235C~\374O\031\305\312\250Z&g\202W\253\214cHE\236\255dtKR\025qaA\\U`\303/\310\226.\263\304@w\013\232.\322\177\372\203N:\363\234\027t\005\246\222\246\313\374\026\267\275\257&\221\273\222\3157W{Su6So\023e\233'\3374\275\315\322\215\276*\246\2343\036\210*~\304Pd`0O\025\236\255 [\002\203\036\310\226\244<\260\300z\343\201\245d\263\262\211L}`e\361[\320\220(\364\237\036V\210\220\007\026\352T\031\377\251RU\350\277\266(\032\337\3766\267\270\254\310&x\360\370w\337~\003\343WV\263J>\205\035\002k\020\352B\314j\313\262\236}\374;\022\261\254\225\001\316\254\245J\n\022b.e\006\374\0029\243\345r\342\343\337\212*\364\003)\207\0142X\315b\006\323\220\023\225d2G\2764\245(>\300\017p\352\302\343\377b\177z\304r\305/%R\262\200\204d^\177\374k\300\352F\216!\"\317\340\361?\361e\215t\025U\244\004\320b\005?\224V\276\375\255\221\223!\325zJ\3132X<\321\332\362\005\373|\217\006_\007XC,\200\307\022\221\307\362x\312\337\323za\361=\226),\325x\312_\255PJ\355\037\377\206ul\220S\261\254a\024\217\377\221\370\220\244\020\244\225\225)W\361\303t\223H\240g\022\214\234F\242N)U\352*\261\342\361\177\325Ws\206*\002\005P\021\006\372\312\211T\302\177y\031\211\"Cx\345\254\010i\"\037d\t?\246Wx\256\313v\256!\347zE5\240\007\344\224\t\227f\021\244ap\222F%\250\007\254k\312t\031\231EYZ[\344\257\341L\220\276\301\002\360\2148\210\276frp\213\300\265|^\374\356\367D\rh_\024\331\312\346\233<\033\036\177D\337\301h\231?*\306\237\355\205\340i\206\274\270*\352,!5\216\305\363\33574D{\025\345\225o\177\006e\235\317\345\241\014u\205\204,\257q\266\210\337\3755*@\027\336|\367\327\264\272\345<\324K\036&GJ\314C\020\355\347\005\031^\247\225\343%\036N\346\317\266\372\240G\322\231\374\311B\227\251E\314\242\0334\013\274u\302,\364r\311\244\357\016\324\317CK\314""\362\251c\037\300\223L\303B\313\200\235^\364\264\306\330q_\310\217\350\3215\226=#\331g\034\373\215\342\2401\354\032\301\236\361\0334z\375\306\256\317\310\365\033\267\001\2436d\314zF\254\317x\r\031\255Ac\225\037)\370\356W\330\367D\235\376\360\216\256-\033\206(\232\364?\213\255K\234\027\027(\241\315\037v\204\001\326\321G\253\034\355i\020teE\346)\203E+\240\243\r\367\361\177\236\307f\210Um/l\226\312v\246:E\236+<st\200!g,V\342\231!/Z\204\200R\221g\262\235\251v\256\363|\205\342]\020u\203>2\343?[~\366\003\215:o:\033:q\200\013\001\236l;\000Ol}\372\014\332d\035\343\226\030\307\361ay\345\241\242\215\307\277#\225\202\305\254\231\242\201\375\236\030\303\033a\213\207\361D\364\232\234\\s%\265JM\340\335\323hV\240I\260\212\201/g\255&\223\324\000\351\202\271`\341\247\033\004\000\325\231\2055\256\344H\311\"\205\315C\353\037\233\022v\027r\372yt\017:\200\275\2660\2352k\270\312wCs\225\306\371\3357\026f\320\3123c)\017a\301f\252Z\206\005\371w\006\010A\301\217o\336\314\006\263,\235\237sY\202b\"\225\275D\246\tT8\355t\330``\022<@\227\313\262\204\237\312:\265%l\031\366\013Q\263\254\257\312\337\375\n\343]&\025\265H\361\0047\246\260\272J_q\000\264J\332739\227\274yk\342c\226\264<\363?\270/\300J\0074\222\316\203p\326\3776\36199[\354\335-\246{\361X\363O\322,\350\212\226\026\350\301P\r}\317\274\033\273p\317~\272\210\207\221\304\340@rb&92\222\034\217\337\t\024\307&\334\342\215\033\201Z*\372j\307\307\002\265T\364\327\216\007k\307\203\2653\301\332\231@\355D\260v\"X;\023\254\235\t\326\316\006kg\203\265\267o\007j\251\350\253\235\233\013\324R\021\265\243\223\267\256\335H^\213\365\3659\217\003\356\203\367\356\247\361\231Q\373\031\016\242\375t\343\326\354\264\3758>vm\372\326\314\350\265[\023#\356\233\2337\307Bo&f\023\016\026\346:\333\317\001\250\271\321\370t\0138F\335 c}p\006Rc<\331\320\023\034d\302\006a\\\364h`E\217\200\t\027\301\204\213`\206#\230\261\021\314\270 \211\0210\210\315\250\207\317{\347!u\336M\304'\302`\376\"\343s\010\023{\027\302\204waLxe\027g9\261\2636\261\263\301\341\315\272\264\317\316\004""\2719\222h\201s\317\347|$179\232\214\317\370K##\376\322\365@\335\215\033\376\322\370X\2404\036(\005\332M\004J\223\201\322L\2404\033(\335\276\355/\315an\343\211\226D\222>\356Rt\002\217\224\215M\\\277\325\002\225t-~\323\253Jb\220\311\370\3151H\351\214;\t\3040\207\215\364<\222H\322\007c\372P\314\271\340\025\031\033\274\342\365`-c\204Wd\234\360\025\307\203\305`\333\211`q2X\234\t\026g\203E\306\020\257H\034\231\275\211Q\333\361\233\226[\323#c\023`\003[\325\361\271\231\344O\247\355u\305Jc\023\376\022\352\246f\343\323\211\321i\267\326.\327U\320=\2362f\207b\004\333\344[T\362p\271\215\274h\246\026z\351;\260\225r\352\264<\\P\035\026\337%;l\220\034\344V*wc\205\263.\030\3733`\014\366L\313\037\251w2\255\033R\340\364\265\223n\317\260m\3469\020\310?\316\326'\3619u\351|-\255\337)\203iq\271\327b\233=->r[\002xj\367\357 5\363\017j\t\261\275\0044\331\036\226\373\016\000M\216\214^\217\317\336\3042\036\237\034\367J7\260\366\334\002Ej\275\022_\010n\321\216\321z/\022\237{\317\2440\335\202\035\022\365^@\271^\037\373\330\327\321d|zftz\357f\210G\227\374\216P3\241\330\233nR\266\257\306\277X\375\221;e\006\355\037\253S[\224\370\347\313\246\235\372&\240\245!\227Z\032\016\245\245a\177_\267n\276v|\353p\373\346\301\327\n\261\315\216\367\212\017\237\366\264\274t\340\353\245\265\231B\353\346\201\243\205\326\247?\242\362j\241\243\020)vl\036\000\304\346\201\303k\003k&\340\333\217\027\342T\272X\330W8U\270]\214o\266\037Y{\270y\364\215B\272z\262\257\322\272y|\246:3[\235\375l\213C\2422\204\2160\031\205\316\315\366cH\200\334(\365\226\305\262\333E\177!\001(T\276_=\321[\216o\036\275\274\276o\275s\313C\004\310W\327\322\325\343=\345\326\315\366W6\377\325\307\033\346\223\330\223\370V[\373Z\3749\216-Z\0267\217OW\247\023\325\304\354.\306v\266\034/O\325\033\333\331r\347\346\321\301\312\374zk\235\261\275_\022il?\271\276!=\351|\022cc\253\266\234*\305\236\236\365\r\347\325\265\007\305V l\023J/\227\036\202\035m/\203\224\327\034\322\016\264\034|\253\010\260\267\210\2627\013\300\r\246\340\355K\007\327^Z\233-tb\304\007^Y""\273S\230*d\212\214\304\253\305\216\"\243\375ta\276\270\277x\241\230*u\224N\227\346\211\321'\200\351\225\243\205\375\304&\233)\017J\230\355\3277/\017azB\357>\272\272.\206\337\305\257m\304\266\030c\366\002\317\033\005q\363\225\216\002\270\371\n!=\213\311:\332\261\331\335[\376\270\022\253\214\256wp~\232k1\233M\233\355\303\353\323\353\017\267\332\016\257\305\326>.\\)\222\254\034{\355\351\273-/\265\257].\304\n\327\213\247\212Sx\327v\272\024/}V\216}\035\337|\363\304\346\373\261J\307\323\023-\007\333\327.A$\2466\333_/L\001\365\301\343\205\001b\350\233\005\263\030\243\362+k\267\212\350\252\275\332\316$\352\340f\373\321\302K\200?z\274p\263\324Z:^\355\276Ty\270~x#\266y\344\350\026\352\332I\270\216V\217\n%&\3044_\274\303\367>(\307\236v\265\034\354(\264U\217\023)seq\353\300\211b[\365$VCy\256\222Y\237\331\200\310@\000!Lo\225\"\345\216\255\003\355\030\321@\365M,\277J\007\233\252\342\361\342\275r7-*\216\370T\177\245\023C\3050\006\326V1\313\357\243\333c\357\026Eb\253H\214\343\277\256\356R\242\334Q\356\244\021\235(\030\305\316\342\020{q\272\234[\277\2621\362\244\365\311\361'S[\220\224\237@N\220\rAv\244bO\351\375\362\313\350\013\363\364\227\305xq\206\306[\232\362\352?\000;/U XG\252G\300\235\322\376R\2544\002\231\252\003\260\366U1V\274\006\230\266R\334_?Eu_\202\236\201p\335\331\322\3652k\371\257!\303G; \375?\205\360\356+\236\206\360\276Y>X\351\250\234\256(\353\346\306\305'\255[n\243\336R\272\034w\350qZI\020\200\333\245\261\362TY\252|\260\236\330x}C\364ZDJo\224\036:\004\322\030\367aa\244\312oV\016\256w\254\237^O\2039/=\231\n\362\244\325\341\310\024h9V\032(\031\345H\345\255\365\316\365\201\365e\254\353\356'\017}\363\336u\241\302\346\235\204\361\002\346\204\004\234\246\341\365\302\010\255a\010@1\316\005\355S\022\274v.oL\316\366\027.\026_..\225\230\264}\214\327\307O0\365R\036\2044`\301\320\317{\263\305\005\360e`Av\030\340\001\371;5P\211\357\214\216\233T\206\300\237\204(\327!\344\006^;\335\322\344\372\236m\022\016\320\252\264\227\202C\302\323C\\H\277\302L\233%\320Fz\034\353\374d1\001\241""\202,\272o\216\027\276\360\275\331\242\204\217\340\364\305\312\324\316F0N\212\021#x\207\324_\355\010\306\360\332\241\372r%\346\177\266Gp\220\264\371\321\302+\000\0140\361\344;O_%\002\006\2312f\024\037\340\2423R:\354\250\226w\336m\014\324^\216s \241\2631\320\221\362\303f@$y\211\322{\225V\016\364\366\311\306@?vh\252O8\007z\333\241\251>\341\034\350dy\212\003\275\373^c\240w\312\242-l\247\237\036\363\001\321\036s\200\t\004\247\211\226\323`\341-\332\223X\325\353\205\277(\331\204vv\005Z\262\355\330i\211!\373Z\262*_KP\337\260%\206\330\244%\206\324\260\345I\276\3117h\371\236\320\270%\230\321\244e\367`E\334\2310O\220J\2060\223V\257#\314\237\340\265#\300W*q\377\263-\314\207\250\377\243\205W\213bP\230#\227\327[wD\202\255\n@\003\355juh\270I\033\270\335\357\207\025\321\377\274\265\315\266\370\016\254\275\300\266x\273\034\367m\213\267+\327\327O\255O9\333\342\233d\017\325\337\026\357\226_\242\251\362\020\277\373\364\2150ZT\026\332H\223\206Q@\2121\350\303\245\230\017\301\273g\312\035\001\312\356\224\247|\224\335\251|\266~\001F\214M\331\tlJ\255\365)\373\242\374:\211\202\207\370\275\000e\014-\247\014\252\265>e\355\245\270\243G\177\324\202\375\274\343\307\230\323\327hV\216\275\rE\177\214\330\372Zg\211W<\375\252\325\223\311cDk\242\362zEZ\357t\225#\177\030\343\006\"\025\332\231\025{\261x\240\324\312\r\234d\351\223r\252\362c\354h\0177\354W\177Q\272R\276V^]?\276>\205a\037c&\374\361\302h\221\031\030\303#\314\212\350 \333\364(P]\302\226~\251t\306V?\234\350#Do\007\2111%\260\337=\036\300,\363X\313\354h\354\364\357c/\356)w\241S\035\224\\\336\210q\341$n\277Q\\.\211\365\271\375y\311*\307}\334\206B\361s\373n\245\325\341\366\247\305\207\365\271}\244\344\333\300\237\036\017\355\211[\316\036\315mB*z;wm\311\267|\267\334]\225/%\252\016!\016\354\\.\t\307<;\224 l\214'\311\002\331\3448X3\352\231\241\243Nm\nk\201l\004\236\201r\256<\2653K\270\306@\261\r\341\033\244\357\252\2350t*\037\257;\206p=#\300V\231\316|t\227\246\310^\333\"d|\362>+Qs\276\361\207\246\346\225\315\243'\335\375\003\276\240\207\021\273\244""\037c\206\326\323\261\302\007\260\316$nE\3033\330d\226\221Y}\033VP\005D\277\355l\331\233\315\361\270\224\335\306\n\334\2162\332e\002\224\371d\2170.\220\305\357P\326S\356lBY{#\031v\361\270\224\335\201\016\336\2162\332\305\002\224u\235\n`T\312\017}\030\347\340\244n\207\221v\267\000\306\323\335\001\214\2130H=\214wa3o\207\221v\367m1:\334\373\240<\325\204{G\312~\013\374\024<\374\235\tx\255\345kK\370\030uZ\355\242N\356\254Om67\022;\317\227\037\0066\016\246s\334\215\343\356\372\301\215\3276\342\316\306\361v\351\343r\254\276*K\226GQ`\210\341\276\036Z\373\240\300\374X{\331|\335J.\377\253k\211\302{\360\234>.\017\224\277\202\272^\205'w\273\232\270S\275\223\254&S\325T\256\232{X}\250o\266Q\007\344\014\367br\333^\376zi\3556t\367q\322\r,\244\361f\341!\321\310B\r\304\274\352\221H\311,\307\340u\177\270\236\331\240\035\312\377Ft;\257vt\302Z\277\203-\346$\\\253\223O\022\325)\364\375E\365\213L5\263X]4\252\306\362\323\226\226G\255#\373\220\215\354\273A\331\215}S\224M\355\233\245lv\337<e\363\373\322\224\245\367=\244\354\341>\2132k\337\310~j\267\377\006e7\366OP6\261\177\232\262\351\375_P\366\305\376\373\224\335\337\237\241,\263\177\221\262\305\375K\224-\355_\245lu\377h\033\262\321\2661\312\306\332\356Pv\247\355\013\312\276h\273\327\366\014\314\351)\2671\353\344Sx|\342V\360\rf\213\"U\257\220\007~\204Z\275J1\232WI\250\216\220^g!,\252}zc\037\217e\\Xc\366\301_\025\323\314R\031\253\334\3358\364\344l5\201)\274O\013b\211\271\236\360\355\231\347\373\366\372'\033\017\252\223w\253w\277\330qO\323\2555\341,\346\360\222az\215\357\032G\326,n\320_)~ZZ\305\216\373\341\206L\021\252\227\266`\322\376\250 \222_y\242x\260\324\301\225*\323\360E&\253\260\233 \177\344\202\332n\362BQ&\027\357D\361P\251\263t\251\374>\311\177=\370\315\266\303k\303D6\013\371\221%\323~\026\256\364\361\312T\205lU\210\330\341n\262|X\214\353*\3440\361\244\343I'\006\335\206\215\267*\364U\016\203\310\305\352\324\364f\333k\205A\330`\035\245N\232\243\257\310\376\330<\000\254\345\267*Q\0300\024\034j\320\354\022\\\372NP\3535\203\335W>[\231""\330\350d\315\252-]\245\316\247\321]E\347\030\321\247)\361Bt\301`\335\241m\203uGX\344\362\350[\260y\367\225N\225f\312\373\261\366F*\373\340e\327{\311T_\263h\036\217\270\261\350\332\216\243t?\211ot<\257\010\340\356p\357>*\370\341z?\374\006(ufH\255\024\231\331\267\002\013w?\354\330\033\225\237B\302\274\220\341\377\005\272\005\235\013";
    PyObject *data = __Pyx_DecompressString(cstring, 9136, 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 (33783 bytes) */
const char* const bytes = ")02d-%02d%02d-%02d:%02d:%02d-%02d:%02d:%02d.%06d%02d:%02d:%02d.%06d%02d:%02d:%02d+%02d%02d04d%06d06d2d%.7f'.\nAccepts: .\nAccepts: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'Add token that should be recognized as `pertain` `<'bool'>`.\n\n        :param token `<'str'>`: The `pertain` token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_pertain(\"of\")\n        Add token that should be recognized as UTC timezone `<'bool'>`.\n\n        :param token `<'str'>`: The `UTC` timezone token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_utc(\"gmt\")\n        Add token that should be recognized as `timezone`\n        with the corresponding UTC offset.\n\n        :param token `<'str'>`: The `timezone` token to add (case-insensitive).\n        :param hours `<'int'>`: UTC offset in hours. Defaults to `0`.\n        :param minutes `<'int'>`: UTC offset in minutes. Defaults to `0`.\n        :param seconds `<'int'>`: UTC offset in seconds. Defaults to `0`.\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the UTC offset (hours & minutes & seconds) is invalid.\n\n        ## UTC Offset\n        - offset = hours * 3600 + minutes * 60 + seconds\n\n        ## Example\n        >>> cfg.add_tz(\"est\", hours=-5)\n        Add token that should be recognized as `month`\n        with the corresponding month number.\n\n        :param token `<'str'>`: The `month` token to add (case-insensitive).\n        :param month `<'int'>`: The month number (1=Jan...12=Dec).\n    ""    :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the month number is invalid.\n\n        ## Month Number\n        - month: 1=Jan...12=Dec\n\n        ## Example\n        >>> cfg.add_month(\"jan\", 1)\n        Add token that should be recognized as `weekday`\n        with the corresponding weekday number.\n\n        :param token `<'str'>`: The `weekday` token to add (case-insensitive).\n        :param weekday `<'int'>`: The weekday number (0=Mon...6=Sun).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the weekday number is invalid.\n\n        ## Weekday Number\n        - weekday: 0=Mon...6=Sun\n\n        ## Example\n        >>> cfg.add_weekday(\"mon\", 0)\n        Add token that should be recognized as `H/M/S` flag\n        with the corresponding flag number.\n\n        :param token `<'str'>`: The `H/M/S` token to add (case-insensitive).\n        :param month `<'int'>`: The H/M/S flag number (0=hour; 1=minute; 2=second).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the H/M/S flag number is invalid.\n\n        ## H/M/S Flag Number\n        - flag: 0=hour; 1=minute; 2=second\n\n        ## Example\n        >>> cfg.add_hms(\"hour\", 0)\n        Add token that should be recognized as `AM/PM` flag\n        with the corresponding flag number.\n\n        :param token `<'str'>`: The `AM/PM` token to add (case-insensitive).\n        :param month `<'int'>`: The AM/PM flag number (0=AM; 1=PM).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If token conflicts with other namespaces,\n            or the AM/PM flag number is invalid.""\n\n        ## AM/PM Flag Number\n        - flag: 0=AM; 1=PM\n\n        ## Example\n        >>> cfg.add_ampm(\"am\", 0)\n        Add token that should be skipped `<'bool'>`.\n\n        :param token `<'str'>`: The `jump` token to added (case-insensitive).\n        :returns `<'bool'>`: True if added successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.add_jump(\"at\")\n        Cannot add delta to ndarray[%s].\nSupported resolutions: 'ns', 'us', 'ms', 's', 'm', 'h', 'D'.Cannot compare naive and aware datetimes:\n  - datetime1: 'Cannot compare ndarrays with different lengths.\n  - arr1 length: Cannot convert 'Cannot convert Cannot convert array from datetime64[Cannot convert ndarray[Cannot convert '%s' to non-negative float: contains more than one decimal point.Cannot convert '%s' to non-negative float: no digits found.Cannot create date using custom 'dclass' Cannot create datetime using custom 'dtclass' Cannot create time using custom 'tclass' Cannot create timedelta using custom 'tdclass' .\nCannot extract any datetime components.Cannot parse 'Cannot parse None.Cannot parse '%s' to float: contains more than one decimal point.Cannot parse '%s' to float: contains more than one negative sign.Cannot parse '%s' to float: contains mixed positive and negative sign.Cannot parse '%s' to float: contains more than one positive sign.Cannot parse '%s' to float: negative sign found after digits.Cannot parse '%s' to float: negative sign found after decimal point.Cannot parse '%s' to float: no digits found.Cannot parse '%s' to float: positive sign found after digits.Cannot parse '%s' to float: positive sign found after decimal point.Cannot parse '%s' to integer: contains more than one negative sign.Cannot parse '%s' to integer: contains mixed positive and negative sign.Cannot parse '%s' to integer: contains more than one positive sign.Cannot parse '%s' to integer: ne""gative sign found after digits.Cannot parse '%s' to integer: no digits found.Cannot parse '%s' to integer: positive sign found after digits.Cannot perform addition on ndarrays with different lengths.\n  - arr1 length: Cannot perform multiplication on ndarrays with different lengths.\n  - arr1 length: Cannot perform subtraction on ndarrays with different lengths.\n  - arr1 length: Configs.add_ampm (line 1182)Configs.add_hms (line 1043)Configs.add_jump (line 325)Configs.add_month (line 766)Configs.add_pertain (line 421)Configs.add_tz (line 616)Configs.add_utc (line 517)Configs.add_weekday (line 904)Configs.remove_ampm (line 1211)Configs.remove_hms (line 1072)Configs.remove_jump (line 346)Configs.remove_month (line 795)Configs.remove_pertain (line 442)Configs.remove_tz (line 655)Configs.remove_utc (line 538)Configs.remove_weekday (line 933)Configs.replace_ampm (line 1238)Configs.replace_hms (line 1099)Configs.replace_jump (line 368)Configs.replace_month (line 822)Configs.replace_pertain (line 464)Configs.replace_tz (line 682)Configs.replace_utc (line 560)Configs.replace_weekday (line 960)].\nConversion limits to units between: 's', 'ms', 'us', 'ns'.\342\206\222'D', D/M/YExpects 1-D ndarray, instead got %d-dimensional array.Expects an instance of 'datetime.tzinfo', instead got 'Expects an instance of 'dateutil.parser.parserinfo', instead got %s.Expects an instance of 'np.datetime64', instead got 'Expects an instance of 'np.ndarray[datetime64[*]]', instead got 'np.ndarray[%s]'.Expects an instance of 'np.timedelta64', instead got 'Expects instance of 'np.ndarray[timedelta64[*]]', instead got 'np.ndarray[%s]'..\nExpects integer (0-6) or literal weekday name..\nExpects integer (1-12) or literal month name.Expects 'ndarray[datetime64[*]]' or 'ndarray[timedelta64[*]]', instead got 'ndarray[%s]'Fail to convert timestamp '%s' to UTC calendar time.Fail to convert timestamp '%s' to local calendar time.Failed: <'ndarray[datetime64[Failed to build datetime from 'Failed to parse 'In""valid UTC offset '%d' in seconds, must be between -86,400 and 86,400.Invalid Y/M/D flag value '%d', must be in 0..2Invalid Y/M/D value '%d', must be in 0..9999.Invalid Y/M/D value '%s', cannot be converted to an integerInvalid day value '%d', must be in 1..31.Invalid month 'Invalid month number '%d', must be between 1(Jan)..12(Dec).Invalid month '%s', not recognized.Invalid month value '%d', must be in 1..12.Invalid weekday 'Invalid weekday number '%d', must be between 0(Mon)..6(Sun).Invalid weekday '%s', not recognized.Lack of 'day'.Lack of 'month'.Lack of 'year'.\342\206\222'M', M/D/YNamespace `token` cannot be None.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.Only supports arrays with units in ['ns', 'us', 'ms', 's'], instead got '%s'.Remove `AM/PM` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `AM/PM` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_ampm(\"am\")\n        Remove `H/M/S` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `H/M/S` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_hms(\"hour\")\n        Remove `UTC` timezone token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `UTC` timezone token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_utc(\"gmt\")""\n        Remove `jump` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `jump` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_jump(\"at\")\n        Remove `month` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `month` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_month(\"jan\")\n        Remove `pertain` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `pertain` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_pertain(\"of\")\n        Remove `timezone` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `timezone` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_tz(\"est\")\n        Remove `weekday` token from the configuration `<'bool'>`.\n\n        :param token `<'str'>`: The `weekday` token to remove (case-insensitive).\n        :returns `<'bool'>`: True if removed successfully, otherwise False (not exists).\n        :raises `<'InvalidConfigsValue'>`: If the `token` is invalid.\n\n        ##  Example\n        >>> cfg.remove_weekday(\"mon\")\n        Replace the `AM/PM` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `AM/PM` tokens"". Defaults to `None`.\n\n            - Accepts dictionary where keys are `AM/PM` tokens\n              and values are AM/PM flag numbers (0=AM; 1=PM).\n            - If `None`, resets to the default `AM/PM` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `AM/PM` token conflicts with\n            other namespaces or the AM/PM flag number is invalid.\n\n        ## Example\n        >>> cfg.replace_ampm({\"am\": 0, \"pm\": 1, ... })\n        Replace the `H/M/S` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `H/M/S` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `H/M/S` tokens\n              and values are H/M/S flag numbers (0=hour; 1=minute; 2=second).\n            - If `None`, resets to the default `H/M/S` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `H/M/S` token conflicts with\n            other namespaces or the H/M/S flag number is invalid.\n\n        ## Example\n        >>> cfg.replace_hms({\"hour\": 0, \"minute\": 1, \"second\": 2, ...})\n        Replace the `month` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `month` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `month` tokens\n              and values are month numbers (1=Jan...12=Dec).\n            - If `None`, resets to the default `month` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `month` token conflicts with\n            other namespaces or the month number is invalid.\n\n        ## Example\n        >>> cfg.replace_month({\"jan\": 1, \"feb\": 2, ... })\n        Replace the set of `UTC` timezone tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `U""TC` timezone tokens. Defaults to `None`.\n            If `None`, resets to the default `UTC` timezone set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_utc({\"utc\", \"gmt\", ...})\n        Replace the set of `jump` tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `jump` tokens. Defaults to `None`.\n            If `None`, resets to the default `jump` set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_jump({\"at\", \"on\", ...})\n        Replace the set of `pertain` tokens `<'bool'>`.\n\n        :param tokens `<'set[str]/None'>`: The new set of `pertain` tokens. Defaults to `None`.\n            If `None`, resets to the default `pertain` set.\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `token` is invalid or conflicts with other namespaces.\n\n        ## Example\n        >>> cfg.replace_pertain({\"of\", \"for\", ...})\n        Replace the `timezone` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `timezone` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `timezone` tokens\n              and values are UTC offsets in seconds.\n            - If `None`, resets to the default `timezone` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `timezone` token conflicts with\n            other namespaces or the UTC offset value is invalid.\n\n        ## Example\n        >>> cfg.replace_tz({\"est\": -18000, \"edt\": -14400, ... })\n        Rep""lace the `weekday` mapping `<'bool'>`.\n\n        :param mapping `<'dict[str,int]/None'>`: The new mapping of `weekday` tokens. Defaults to `None`.\n\n            - Accepts dictionary where keys are `weekday` tokens\n              and values are weekday numbers (0=Mon...6=Sun).\n            - If `None`, resets to the default `weekday` mapping.\n\n        :returns `<'bool'>`: True if replaced successfully, otherwise False.\n        :raises `<'InvalidConfigsValue'>`: If any `weekday` token conflicts with\n            other namespaces or the weekday number is invalid.\n\n        ## Example\n        >>> cfg.replace_weekday({\"mon\": 0, \"tue\": 1, ... })\n        Seconds value must be finite, got '%s'The size of a new array must be a positive integer.Timezone offset Token 'Token for 'Configs.Token for 'Configs.%s' cannot be an empty string.Token for 'Configs.%s' must be a string, instead got None.Unsupported conversion unit '%d' for timedelta64.Unsupported conversion unit '%d' for timedelta64 array..\nUnsupported data type.Unsupported datetime resolution '%s'. Accepts: Y, M, W, D, h, m, s, ms, us, ns.Unsupported numpy time unit (NPY_DATETIMEUNIT enum) 'Unsupported time unit Value for 'Configs.\342\206\222'W', \342\206\222'Y', Y/D/MY/M/D[]]'> ,'...<'' ()>: '.\n.+;/', -%?: ' add_note ampm=ampm=%d\n  - arr2 length: arr_div_ceil: division by zero.arr_div_ceil_mul: division by zero.arr_div_down: division by zero.arr_div_down_mul: division by zero.arr_div_even: division by zero.arr_div_even_mul: division by zero.arr_div_floor: division by zero.arr_div_floor_mul: division by zero.arr_div_trunc: division by zero.arr_div_trunc_mul: division by zero.arr_div_up: division by zero.arr_div_up_mul: division by zero.arr_mod: division by zero.' at position ' conflicts with existing tokens in 'Configs.cython.bintcython.int\n  - datetime2: 'day=%d dayfirst=dict[str, int]disabledoy(day-of-year)=%ddt_isoformat: 'sep' cannot be None.dt_strformat: 'fmt' cannot be Noneenablefold must be either"" 0 or 1, got %d' for 'Configs. from '] from 'from_parserinfo(info)gc\342\206\222'h',  hms=hour=%d, instead got int | str | Noneisenabled\342\206\222'm', math_div_ceil: division by zero.math_div_ceil: result does not fit in signed 64-bitmath_div_down: division by zero.math_div_down: result does not fit in signed 64-bitmath_div_even: division by zero.math_div_even: result does not fit in signed 64-bitmath_div_floor: division by zero.math_div_floor: result does not fit in signed 64-bitmath_div_trunc: division by zero.math_div_trunc: result does not fit in signed 64-bitmath_div_up: division by zero.math_div_up: result does not fit in signed 64-bitmath_mod: division by zero.microsecond=%dminimum value cannot be greater than maximum value.minute=%d, minutes=missing time resolution for <ndarray[%s]>. Pleae provide the `arr_reso` (NPY_DATETIMEUNIT enum) of the array. month=month=%d\342\206\222'ms', ' must be a string, instead got ' must be an integer between ' must be an integer, instead got no default __reduce__ due to non-trivial __cinit__\342\206\222'ns'numpy._core.multiarray failed to importnumpy._core.umath failed to import) out of range. Must be strictly between [-86400..86400] (exclusive)) out of range. Must be strictly between [-86400..86400] (exclusive).parse_to_float: 'token' cannot be Noneparse_to_int: 'token' cannot be None pertain=' resolution is not supported.' (resolved=\342\206\222's', second=%d, seconds= seconds from ( seconds from (hours=self._Configs__cls is not None or self._ampm is not None or self._ampm_ext is not None or self._hms is not None or self._hms_ext is not None or self._jump is not None or self._jump_ext is not None or self._month is not None or self._month_ext is not None or self._pertain is not None or self._pertain_ext is not None or self._tz is not None or self._tz_ext is not None or self._utc is not None or self._utc_ext is not None or self._weekday is not None or self._weekday_ext is not Noneself._Parser__cls is not None or self._cfg i""s not None or self._res is not None or self._token1 is not None or self._tokens is not Noneset[str] size= | sizes: jump=slice_to_ufloat: out of range (start=slice_to_ufloat: 'size' must be > 0, instead got %dslice_to_ufloat: 'start' must be >= 0, instead got %dslice_to_ufloat: 'token' cannot be Noneslice_to_uint: out of range (start=slice_to_uint: 'size' must be > 0, instead got %dslice_to_uint: 'start' must be >= 0, instead got %dslice_to_uint: 'token' cannot be Nonesrc/cytimes/parser.pysrc/cytimes/utils.pxd<stringsource>' ticks.\nSupported resolution: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'' ticks.\nSupported units: ' ticks.\nSupported units: 'Y', 'M', 'W', 'D', 'h', 'm', 's', 'ms', 'us', 'ns'tm_strformat: expanded output exceeds buffer limittm_strformat: failed to allocate buffertm_strformat: 'fmt' cannot be None to '] to datetime64[' to float: contains invalid character '' to int64 ']] to int64 '' to integer. Contains invalid character '' to non-negative float: contains invalid character '' to unsigned integer. Contains invalid character ' token_len= tz=tzoffset=%d' unit to int64 '\342\206\222'us',  utc= weekday=weekday=%dyear=%d: yearfirst=AMPMAprAugConfigsConfigs.__reduce_cython__Configs.__setstate_cython__Configs.add_ampmConfigs.add_hmsConfigs.add_jumpConfigs.add_monthConfigs.add_pertainConfigs.add_tzConfigs.add_utcConfigs.add_weekdayConfigs.clear_settingsConfigs.from_parserinfoConfigs.get_ampmConfigs.get_hmsConfigs.get_monthConfigs.get_tz_offsetConfigs.get_weekdayConfigs.is_ampmConfigs.is_hmsConfigs.is_jumpConfigs.is_monthConfigs.is_pertainConfigs.is_tzConfigs.is_utcConfigs.is_weekdayConfigs.order_hintConfigs.remove_ampmConfigs.remove_hmsConfigs.remove_jumpConfigs.remove_monthConfigs.remove_pertainConfigs.remove_tzConfigs.remove_utcConfigs.remove_weekdayConfigs.replace_ampmConfigs.replace_hmsConfigs.replace_jumpConfigs.replace_monthConfigs.replace_pertainConfigs.replace_tzConfigs.replace_utcConfigs.replace_weekdayConfigs.reset_settingsDDecFalseFe""bFriHMSInvalidMonthErrorInvalidParserInfoInvalidWeekdayErrorJUMPJanJulJunMMONTHSMarMayMonNovOctPERTAINParserParser.__reduce_cython__Parser.__setstate_cython__Parser.parse__Pyx_PyDict_NextRefResultResult.__reduce_cython__Result.__setstate_cython__SatSepSunTTZOFFSETThuTrueTueUTCZONEWWEEKDAYSWedY\345\271\264\346\234\210\346\227\245\344\270\200\346\234\210\344\272\214\346\234\210\344\270\211\346\234\210\345\233\233\346\234\210\344\272\224\346\234\210\345\205\255\346\234\210\344\270\203\346\234\210\345\205\253\346\234\210\344\271\235\346\234\210\345\215\201\346\234\210\345\215\201\344\270\200\346\234\210\345\215\201\344\272\214\346\234\210\346\230\237\346\234\237\344\270\200\345\221\250\344\270\200\346\230\237\346\234\237\344\272\214\345\221\250\344\272\214\346\230\237\346\234\237\344\270\211\345\221\250\344\270\211\346\230\237\346\234\237\345\233\233\345\221\250\345\233\233\346\230\237\346\234\237\344\272\224\345\221\250\344\272\224\346\230\237\346\234\237\345\205\255\345\221\250\345\205\255\346\230\237\346\234\237\346\227\245\345\221\250\346\227\245\346\227\266\345\260\217\346\227\266\345\210\206\345\210\206\351\222\237\347\247\222\344\270\212\345\215\210\344\270\213\345\215\210aabriladadd_ampmadd_hmsadd_jumpadd_monthadd_pertainadd_tzadd_utcadd_weekdayafternoonagosto__all__amampmandao\303\273tapraprilaprilearal\304\261k\303\247ar\305\237ambaasastypeasyncio.coroutinesataugaugustaugustiaugustusa\304\237ustosavrilceilcfg__class__clear_settingscline_in_tracebackclscumacumartesicytimescytimes.parsercytimes.utilsczerwcaczwartekddakikadakikalardatadatetimedateutil.parser._parserdaydayfirstdaysd\303\251cembredecdecemberdefaultdezemberdezembrodicembrediciembre__dict___dictdienstagdimanchedinsdagdomenicadomingodonderdagdonnerstagdstdtclassdtobjdtstrdtypeeftermiddagekimeneroenumerateerrorseyl\303\274lfebfebbraiofebrfebrerofebruarfebruarifebruaryfevereiroflagfloorfoldfredagfreitagfrifridayfrom_parserinfofromutcfs__func__f\303\251vriergennaioget_ampmget_hmsget_monthget_tz_offsetget""_weekday__getstate__gioved\303\254giugnogmtgodzingodzinagodzinygrudniahhaziranheureheureshmshorahorashourhourshriignoretzinfois_ampm_is_coroutineis_hmsis_jumpis_monthis_pertainis_tzis_utcis_weekdayisoformatitemsjanjaneirojanuarjanuarijanuaryjanvierjeudijuevesjuilletjuinjuljulhojulijuliojulyjumpjunjunejunhojunijuniokas\304\261mkwietnia\303\266\304\237ledenlipcalistopadalowerl\303\266rdaglugliolundiluned\303\254luneslutegomma\303\261anamaandagmaartmaggiomai__main__maiomajmajamanh\303\243mappingmarmarcamarchmardimar\303\247omarsmartmarted\303\254martesmarzomattinamaymayomay\304\261smeimercoled\303\254mercredimicrosecondmicrosecondsmiddagminminutminutaminuteminutenminuterminutesminutiminutominutosminutyminuutmi\303\251rcolesmittwochm\303\245ndag__module__monmondaymontagmonthmorgenmorgonmorningm\303\244rzmsnachmittag__name__nd__new__niedzielanisannovnovembernovembrenovembronoviembrensobjectocakochtendoctoctoberoctobreoctubreofoktoberononsdagoraorder_hintoreottobreoutubroppa\305\272dziernikaparseparse_monthparse_objparse_to_floatparse_to_intparse_weekdayparserinfopazarpazartesiper\305\237embepertainpi\304\205tekpmpomeriggioponiedzia\305\202ekpoppopo\305\202udnieps__pyx_capi____pyx_checksum__pyx_result__pyx_state__pyx_type__pyx_unpickle_Configs__pyx_unpickle_Parser__pyx_vtable____qualname__raise_errorranord__reduce____reduce_cython____reduce_ex__remove_ampmremove_hmsremove_jumpremove_monthremove_pertainremove_tzremove_utcremove_weekdayreplace_ampmreplace_hmsreplace_jumpreplace_monthreplace_pertainreplace_tzreplace_utcreplace_weekdayreset_settingsreturn\305\233rodaroundrowssaatsaatlersabahsabatosal\304\261samedisamstagsaniyesaniyelersatsaturdays\303\241badosecsecondsecondesecondensecondessecondisecondosecondssegundosegundossekundsekundasekundesekundensekundersekundyselfsepseptseptemberseptembreseptiembre__set_name__setdefaultsetembro__setstate____setstate_cython__settembresierpnias\303\266ndagsobotasonntagststatestrstundestundenstyczniasunsundayttardetemmuz__test__ththuthur""sdaytimelextimmartimmetisdagtitletokentokenstorsdagtuetuesdaytztzinfotzname\305\237ubatupdateupperurenususe_setstateutcutcoffsetutilsuurvaluesvendredivenerd\303\254viernesvrijdagwedwednesdayweekdaywoensdagwrze\305\233niawtorekyearyearfirstzzaterdagzondagPY_LONG_LONG\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000PyDateTime_DateTime *\000PyDateTime_TZInfo *\000PyObject *\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000double\000\000int\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000int [13]\000\000int [5]\000\000DT64_NS_DD_MAX\000DT64_NS_DD_MIN\000DT64_NS_HH_MAX\000DT64_NS_HH_MIN\000DT64_NS_MI_MAX\000DT64_NS_MI_MIN\000DT64_NS_MM_MAX\000DT64_NS_MM_MIN\000DT64_NS_MS_MAX\000DT64_NS_MS_MIN\000DT64_NS_NS_MAX\000DT64_NS_NS_MIN\000DT64_NS_SS_MAX\000DT64_NS_SS_MIN\000DT64_NS_US_MAX\000DT64_NS_US_MIN\000DT64_NS_WW_MAX\000DT64_NS_WW_MIN\000DT64_NS_YY_MAX\000DT64_NS_YY_MIN\000EPOCH_C100\000EPOCH_C4\000EPOCH_C400\000EPOCH_CBASE\000EPOCH_DAY\000EPOCH_HOUR\000EPOCH_MICROSECOND\000EPOCH_MILLISECOND\000EPOCH_MINUTE\000EPOCH_MONTH\000EPOCH_SECOND\000EPOCH_YEAR\000MS_DAY\000MS_HOUR\000MS_MINUTE\000MS_SECOND\000NS_DAY\000NS_HOUR\000NS_MICROSECOND\000NS_MILLISECOND\000NS_MINUTE\000NS_SECOND\000SS_DAY\000SS_HOUR\000SS_MINUTE\000TD64_MM_MICROSECOND\000TD64_MM_MILLISECOND\000TD64_MM_NANOSECOND\000TD64_MM_SECOND\000TD64_YY_MICROSECOND\000TD64_YY_MILLISECOND\000TD64_YY_NANOSECOND\000TD64_YY_SECOND\000US_DAY\000US_HOUR\000US_MILLISECOND\000US_MINUTE\000US_SECOND\000EPOCH_DT\000UTC\000DT64_DTYPE_AS\000DT64_DTYPE_DD\000DT64_DTYPE_FS\000DT64_DTYPE_HH\000DT64_DTYPE_MI\000DT64_DTYPE_MM\000DT64_DTYPE_MS\000DT64_DTYPE_NS\000DT64_DTYPE_PS\000DT64_DTYPE_SS\000DT64_DTYPE_US\000DT64_DTYPE_WW\000DT64_DTYPE_YY\000NAT\000T_TIMEZONE\000T_ZONEINFO\000_LOCAL_TIMEZONE\000_UTC_ALIASES\000TD64_MM_""DAY\000TD64_YY_DAY\000DT_NPY_UNIT_AS\000DT_NPY_UNIT_DD\000DT_NPY_UNIT_FS\000DT_NPY_UNIT_HH\000DT_NPY_UNIT_MI\000DT_NPY_UNIT_MM\000DT_NPY_UNIT_MS\000DT_NPY_UNIT_NS\000DT_NPY_UNIT_PS\000DT_NPY_UNIT_SS\000DT_NPY_UNIT_US\000DT_NPY_UNIT_WW\000DT_NPY_UNIT_YY\000NULL_TZOFFSET\000ORDINAL_MAX\000DAYS_BR_MONTH\000DAYS_IN_MONTH\000DAYS_BR_QUARTER\000DAYS_IN_QUARTERPyDateTime_DateTime *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse *__pyx_optional_args)\000PyDateTime_DateTime *(PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_obj *__pyx_optional_args)\000PyObject *(PyObject *, int __pyx_skip_dispatch)\000int (PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_month *__pyx_optional_args)\000int (PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6parser_parse_weekday *__pyx_optional_args)\000parse\000parse_obj\000timelex\000parse_month\000parse_weekdayPyObject *\000\000\000\000\000\000\000\000struct __pyx_obj_7cytimes_6parser_Configs *\000struct __pyx_obj_7cytimes_6parser_Parser *\000_DEFAULT_AMPM\000_DEFAULT_HMS\000_DEFAULT_JUMP\000_DEFAULT_MONTH\000_DEFAULT_PERTAIN\000_DEFAULT_TZ\000_DEFAULT_UTC\000_DEFAULT_WEEKDAY\000_DEFAULT_CONFIGS\000_DEFAULT_PARSERint (PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_error *__pyx_optional_args)\000int (int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_configs_token_error *__pyx_optional_args)\000int (int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_configs_value_error *__pyx_optional_args)\000int (int __pyx_skip_dispatch, struct __pyx_opt_args_7cytimes_6errors_raise_parser_failed_error *__pyx_optional_args)\000raise_error\000raise_configs_token_error\000raise_configs_value_error\000raise_parser_failed_error\200\001\330\023\024\340\013\014\330\t\023\2201\330\021\037\230q\360(\000\005\010\200v\210S\220\001\330\010\020\220\001\360\006\000\005\010\200z""\220\021\220'\230\021\330\010\037\230q\330\010\013\2104\210t\2201\330\014\024\220A\330\010\013\2105\220\002\220#\220W\230A\330\014\017\210q\330\020\026\220f\320\0340\260\001\330\024S\320SU\320UV\340\014\024\220A\330\010\017\210q\360\006\000\005\010\200z\220\021\220'\230\021\330\010\013\2104\210s\220!\330\014\022\220!\330\010\037\230s\240,\250a\250q\330\010\013\2104\210t\2202\220T\230\021\330\014\022\220&\320\030,\250A\330\0208\270\002\270!\340\010\017\210q\360\006\000\005\010\200q\330\010\016\210f\320\024(\250\001\330\014\r\330@G\300t\3101\310A\340\004\014\210A\200\001\330\023\024\340\013\014\330\t\023\2201\330\021\037\230q\360(\000\005\010\200v\210S\220\001\330\010\020\220\001\360\006\000\005\010\200z\220\021\220'\230\021\330\010\037\230q\330\010\013\2104\210t\2201\330\014\024\220A\330\010\013\2105\220\002\220#\220W\230A\330\014\017\210q\330\020\026\220f\320\034.\250a\330\024R\320RT\320TU\340\014\024\220A\330\010\017\210q\360\006\000\005\010\200z\220\021\220'\230\021\330\010\013\2104\210s\220!\330\014\022\220!\330\010\037\230s\240*\250A\250Q\330\010\013\2104\210t\2202\220T\230\021\330\014\022\220&\320\030*\250!\330\0206\260b\270\001\340\010\017\210q\360\006\000\005\010\200q\330\010\016\210f\320\024&\240a\330\014\r\330?F\300d\310!\3101\340\004\014\210A\320\000#\2401\360*\000\005\010\200v\210S\220\001\330\010\016\210j\230\001\230\021\330\004 \240\007\240q\250\001\330\004\007\200z\220\023\220A\330\010\017\210q\360\010\000\t\031\230\001\330\010\031\230\021\330\010\027\220q\330\010\023\2201\360\010\000\005\t\210\005\210U\220!\2201\330\010\r\210X\220Q\220g\230Q\330\010\013\210>\230\021\230!\330\014\022\220$\220b\230\003\2303\230c\240\021\240$\240b\250\001\330\014\030\230\001\330\r\020\220\003\2201\330\014\017\210q\330\020\026\220j\240\001\330\024\025\3308:\270!\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330<>\270a\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330AC\3001\340\014\022\220!\330\r\020\220\003\2201\330\014\017\210q\330\020\026\220j\240\001""\330\024\025\3308:\270!\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330<>\270a\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330AC\3001\340\014\026\220a\330\r\021\220\021\330\014\r\340\014\022\220*\230A\330\020\021\330%,\250G\2601\260E\270\021\360\006\000\005\010\200t\2101\330\010\016\210j\230\001\330\014=\270R\270q\340\004\013\2101\210G\2209\230A\200\001\330\022\023\360\036\000\005\014\2108\2201\220F\230#\230Q\200\001\330\004$\240A\240V\2501\200A\330\027\030\330&1\260\021\360\030\000\t\014\2107\220#\220Q\330\014\025\220Q\360\006\000\t\024\2204\220q\330\010\027\220t\2301\360\006\000\t\r\210O\2301\330\010\014\320\014\037\230q\330\010\t\330\014\020\220\005\220Q\330\020\024\220L\240\001\240\024\320%7\260q\270\013\3001\330\017\020\340\014\020\220\014\230A\330\014\020\320\020 \240\001\330\014\r\330\010\017\210q\200A\330\027\030\330\037+\2501\360\"\000\t\021\220\004\320\024$\240A\240Y\250a\340\010\030\230\004\320\034,\250A\250Y\260g\270S\300\001\340\010\024\220A\220T\230\031\240'\250\021\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\030\230\001\230\024\230]\250%\250q\330\010\017\210q\200A\330#2\260!\360\036\000\t\014\2104\210z\230\021\230&\240\001\330\022\036\230a\330\020\026\220a\330\020\021\330\020\021\330\020\021\330\"%\240T\250\021\250!\360\006\000\t\030\220s\230!\230:\240T\250\021\250$\250m\2709\300D\310\001\310\024\310Q\340\010\013\210?\230!\330\010\013\210:\220Q\220d\230(\240&\250\007\250q\330\014\017\210}\230A\230S\240\001\240\024\240Q\330\010\013\210:\220Q\220d\230+\240V\2507\260!\330\014\017\320\017\037\230q\240\003\2401\240D\250\001\330\010\013\210:\220Q\220d\230+\240V\2507\260!\330\014\017\210|\2301\230C\230q\240\004\240A\330\010\013\210:\220Q\220d\230+\240Q\330\014\017\210{\230!\2304\230q\240\004\240A\330\010\013\210:\220Q\220d\230*\240F\250!\330\014\017\210~\230Q\330\020\021\220\023\220B\220b\230\002\230$\230c\240\027\250\t\260\021\260$\260i\270t\3005\310\001\340\010\013\210:\220Q\220d\230,\240f\250A\330\014\017\320\017\037\230q""\330\020\021\220\023\220B\220d\230#\230W\240I\250Q\250d\260+\270T\300\025\300a\340\010\013\210:\220Q\220d\230'\240\026\240q\330\014\017\210|\2301\230A\230S\240\002\240$\240c\250\027\260\t\270\021\270$\270f\300D\310\005\310Q\330\010\013\210:\220Q\220d\230(\240&\250\001\330\014\017\210}\230A\230Q\230c\240\022\2404\240s\250'\260\031\270!\2704\270w\300d\310%\310q\330\010\017\210q\200A\330\027\030\330\"3\2601\360\"\000\t\014\2108\2203\220a\330\014\026\220a\360\006\000\t\025\220D\230\001\330\010\030\230\004\230A\360\006\000\t\r\210K\220q\330\010\014\210O\2301\330\010\t\330\014\020\220\003\2205\230\007\230v\240Q\330\020\024\220G\2301\330\024\030\320\030*\250!\2506\260\021\330\024\025\330\024\025\330\024\030\320\030*\250!\2506\260\021\340\017\020\340\014\020\220\007\220q\330\014\020\220\013\2301\330\014\r\330\010\017\210q\200A\330\027\030\330#4\260A\360\"\000\t\014\2108\2203\220a\330\014\026\220a\360\006\000\t\025\220D\230\001\330\010\030\230\004\230A\360\006\000\t\r\210L\230\001\330\010\014\320\014\034\230A\330\010\t\330\014\020\220\003\2205\230\007\230v\240Q\330\020\024\220H\230A\330\024\030\320\030*\250!\2507\260!\330\024\030\320\030*\250!\2507\260!\340\017\020\340\014\020\220\010\230\001\330\014\020\220\014\230A\330\014\r\330\010\017\210q\200A\360\n\000\t\014\2104\210|\2304\230t\2401\330\014\023\2201\330\r\021\220\034\230T\240\024\240T\250\021\330\014\023\2201\330\r\021\220\024\220\\\240\024\240T\250\021\330\014\023\2201\340\014\023\2201\200A\330\027\030\330$5\260Q\360\"\000\t\014\2108\2203\220a\330\014\026\220a\360\006\000\t\025\220D\230\001\330\010\030\230\004\230A\360\006\000\t\r\210M\230\021\330\010\014\320\014\035\230Q\330\010\t\330\014\020\220\003\2205\230\007\230v\240Q\330\020\024\220I\230Q\330\024\030\320\030*\250!\2508\2601\330\024\030\320\030*\250!\2508\2601\340\017\020\340\014\020\220\t\230\021\330\014\020\220\r\230Q\330\014\r\330\010\017\210q\200A\330\027\030\330\034\035\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210|\2301\230D\240\013""\2501\200A\330\027\030\330\035\036\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210|\2301\230D\240\014\250A\200A\330\027\030\330 !\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210|\2301\230D\240\017\250q\200A\330\027\030\330 !\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210}\230A\230T\240\037\260\001\200A\330\027\030\330\033\034\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210}\230A\230T\240\032\2501\200A\330\027\030\330\034\035\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210}\230A\230T\240\033\250A\200A\330\027\030\330\035\036\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210}\230A\230T\240\034\250Q\200A\330\027\030\330\036\037\360\016\000\t\014\2106\220\023\220A\330\014\023\2201\330\010\017\210}\230A\230T\240\035\250a\200A\330\027\030\330#$\360\022\000\t\014\2106\220\023\220A\330\014\030\230\001\330\010\020\220\014\230A\230T\240\032\2501\330\010\013\2106\220\031\230!\330\014\030\230\001\330\010\025\220^\2401\200A\330\027\030\330!\"\360\022\000\t\014\2106\220\023\220A\330\014\024\220A\330\010\020\220\014\230A\230T\240\037\260\001\330\010\013\2106\220\031\230!\330\014\024\220A\330\010\025\220^\2401\200A\330\027\030\330\035\036\360\022\000\t\014\2106\220\023\220A\330\014\024\220A\330\010\020\220\014\230A\230T\240\033\250A\330\010\013\2106\220\031\230!\330\014\024\220A\330\010\025\220^\2401\200A\330\027\030\330\036\037\360\022\000\t\014\2106\220\023\220A\330\014\024\220A\330\010\020\220\014\230A\230T\240\034\250Q\330\010\013\2106\220\031\230!\330\014\024\220A\330\010\025\220^\2401\200A\330\027\030\330\037 \360\022\000\t\014\2106\220\023\220A\330\014\024\220A\330\010\020\220\014\230A\230T\240\035\250a\330\010\013\2106\220\031\230!\330\014\024\220A\330\010\025\220^\2401\200A\330\027\030\330%6\260a\360\"\000\t\014\2108\2203\220a\330\014\026\220a\360\006\000\t\025\220D\230\001\330\010\030\230\004\230A\360\006\000\t\r\210N\230!\330\010\014\320\014\036""\230a\330\010\t\330\014\020\220\003\2205\230\007\230v\240Q\330\020\024\220J\230a\330\024\030\320\030*\250!\2509\260A\330\024\030\320\030*\250!\2509\260A\340\017\020\340\014\020\220\n\230!\330\014\020\220\016\230a\330\014\r\330\010\017\210q\200A\330\027\030\330'8\270\001\360\"\000\t\014\2108\2203\220a\330\014\026\220a\360\006\000\t\025\220D\230\001\330\010\030\230\004\230A\360\006\000\t\r\320\014\034\230A\330\010\014\320\014 \240\001\330\010\t\330\014\020\220\003\2205\230\007\230v\240Q\330\020\024\220L\240\001\330\024\030\320\030*\250!\250;\260a\330\024\030\320\030*\250!\250;\260a\340\017\020\340\014\020\220\014\230A\330\014\020\320\020 \240\001\330\014\r\330\010\017\210q\200A\330\027\030\330\035(\250\001\360\"\000\t\021\220\004\320\024$\240A\240W\250A\340\010\030\230\004\320\034,\250A\250W\260F\270#\270Q\340\010\024\220A\220T\230\027\240\007\240q\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\030\230\001\230\024\230[\250\005\250Q\330\010\017\210q\200A\330\027\030\330\035\036\360\026\000\t\021\220\004\320\024$\240A\240W\250A\340\010\017\210q\220\004\220G\2301\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\023\2201\220D\230\013\2401\330\010\017\210q\200A\330\027\030\330\036)\250\021\360\"\000\t\021\220\004\320\024$\240A\240X\250Q\340\010\030\230\004\320\034,\250A\250X\260V\2703\270a\340\010\024\220A\220T\230\030\240\027\250\001\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\030\230\001\230\024\230\\\250\025\250a\330\010\017\210q\200A\330\027\030\330\036\037\360\026\000\t\021\220\004\320\024$\240A\240X\250Q\340\010\017\210q\220\004\220H\230A\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\023\2201\220D\230\014\240A\330\010\017\210q\200A\360\006\000\020\021\330\021\032\230!\330\023\034\230A\330\022\033\2301\330\022 \240\001\330\023!\240\021\330\021\032\230!\360|\001\000\t\014\2106\220\023\220A\330\022,\250A\250T\260\025\260d\270!\360\006\000\t\r\210M\230\021\360\006\000\t\r\210I\220Q\220g\230Q\360\006\000\t\014\2104\210t\2205\230\010\240""\001\330\014\020\220\005\220_\240J\250c\260\032\2704\270q\300\001\330\014\020\220\005\220^\2409\250C\250z\270\024\270Q\270a\340\022,\250A\330\020\024\220E\230\021\330\020\021\330=D\300D\310\001\310\021\360\010\000\t\020\210t\2207\230!\2307\240)\2501\200A\330\027\030\360\006\000\020\021\330\017\034\230A\330\021\036\230a\330\021\036\230a\360(\000\t\021\220\004\320\024$\240A\240V\2501\340\010\030\230\004\320\034,\250A\330\014\022\220&\230\002\230&\240\002\240(\250\"\250C\250r\260\032\2708\3001\360\006\000\t\025\220A\220T\230\026\230w\240a\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\030\230\001\230\024\230Z\240u\250A\330\010\017\210q\200A\330\027\030\330!\"\360\026\000\t\021\220\004\320\024$\240A\240[\260\001\340\010\017\210q\220\004\220K\230q\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\023\2201\220D\230\017\240q\330\010\017\210q\200A\330\027\030\360\024\000\t\r\210L\230\001\330\010\014\320\014\034\230A\340\010\014\210O\2301\330\010\014\320\014\037\230q\340\010\014\210K\220q\330\010\014\210O\2301\340\010\014\210K\220q\330\010\014\210O\2301\340\010\014\210N\230!\330\010\014\320\014\036\230a\340\010\014\320\014\034\230A\330\010\014\320\014 \240\001\340\010\014\210L\230\001\330\010\014\320\014\034\230A\340\010\014\210M\230\021\330\010\014\320\014\035\230Q\330\010\017\210q\200A\330\027\030\360\022\000\t\r\210O\2301\330\010\014\210M\230\021\230!\330\010\014\320\014\034\230A\230Q\330\010\014\210L\230\001\230\021\330\010\014\210K\220q\230\001\330\010\014\210N\230!\2301\330\010\014\320\014\034\230A\230Q\330\010\014\210L\230\001\230\021\330\010\014\210M\230\021\230!\330\010\017\210q\200A\330\027\030\330\"-\250Q\360\030\000\t\014\2107\220#\220Q\330\014\025\220Q\360\006\000\t\024\2204\220q\330\010\027\220t\2301\360\006\000\t\r\210K\220q\330\010\014\210O\2301\330\010\t\330\014\020\220\005\220Q\330\020\024\220H\230A\230T\320!3\2601\260G\2701\330\017\020\340\014\020\220\010\230\001\330\014\020\220\014\230A\330\014\r\330\010\017\210q\200A\330\027\030\330\037 ""\360\026\000\t\021\220\004\320\024%\240Q\240f\250A\340\010\t\330\014\030\230\001\230\024\230V\2401\330\017\020\330\014\023\2201\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\r\330\020\034\230A\230T\240\032\2501\330\023\024\340\010\017\210q\200A\330\027\030\330 !\360\026\000\t\021\220\004\320\024%\240Q\240g\250Q\340\010\022\220+\230Q\230d\240'\250\021\340\010\013\2101\330\014\020\220\007\220t\320\0334\260A\260Q\330\020\033\2301\230D\240\013\2501\330\010\017\210q\200A\330\027\030\330 !\360\026\000\t\021\220\004\320\024%\240Q\240g\250Q\340\010\t\330\014\030\230\001\230\024\230W\240A\330\017\020\330\014\023\2201\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\r\330\020\034\230A\230T\240\033\250A\330\023\024\340\010\017\210q\200A\330\027\030\330!\"\360\026\000\t\021\220\004\320\024%\240Q\240h\250a\340\010\022\220+\230Q\230d\240(\250!\340\010\013\2101\330\014\020\220\007\220t\320\0334\260A\260Q\330\020\033\2301\230D\240\014\250A\330\010\017\210q\200A\330\027\030\330!\"\360\026\000\t\021\220\004\320\024%\240Q\240h\250a\340\010\t\330\014\030\230\001\230\024\230X\240Q\330\017\020\330\014\023\2201\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\r\330\020\034\230A\230T\240\034\250Q\330\023\024\340\010\017\210q\200A\330\027\030\330\"#\360\026\000\t\021\220\004\320\024%\240Q\240i\250q\340\010\t\330\014\030\230\001\230\024\230Y\240a\330\017\020\330\014\023\2201\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\r\330\020\034\230A\230T\240\035\250a\330\023\024\340\010\017\210q\200A\330\027\030\330$%\360\026\000\t\021\220\004\320\024%\240Q\240k\260\021\340\010\t\330\014\030\230\001\230\024\230[\250\001\330\017\020\330\014\023\2201\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\r\330\020\034\230A\230T\240\037\260\001\330\023\024\340\010\017\210q\200A\330\027\030\330$%\360\026\000\t\021\220\004\320\024%\240Q\240k\260\021\340\010\022\220+\230Q\230d\240+\250Q\340\010\013\2101\330\014\020\220\007\220t\320\0334\260A\260Q\330\020\033\2301\230D\240\017""\250q\330\010\017\210q\200A\330\027\030\330#.\250a\360\030\000\t\014\2107\220#\220Q\330\014\025\220Q\360\006\000\t\024\2204\220q\330\010\027\220t\2301\360\006\000\t\r\210L\230\001\330\010\014\320\014\034\230A\330\010\t\330\014\020\220\005\220Q\330\020\024\220I\230Q\230d\320\"4\260A\260X\270Q\330\017\020\340\014\020\220\t\230\021\330\014\020\220\r\230Q\330\014\r\330\010\017\210q\200A\330\027\030\330!/\250q\360\"\000\t\021\220\004\320\024$\240A\240[\260\001\340\010\030\230\004\320\034,\250A\250[\270\t\300\023\300A\340\010\024\220A\220T\230\033\240G\2501\340\010\014\210G\2204\320\0270\260\001\260\021\330\014\030\230\001\230\024\230_\250E\260\021\330\010\017\210q\200\001\330\004\n\210+\220Q\200\001\330\004%\240Q\240f\250A\200\001\360\010\000\005\016\210T\220\037\240\004\240G\2504\250|\2704\270z\310\024\310W\320TX\320X_\320_c\320cm\320mq\320qr\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017'\240t\2501\250G\260;\270g\300Q\340\010\017\320\017'\240t\2501\250G\260;\270a\200\001\360\010\000\005\016\210T\320\021!\240\024\240X\250T\260\034\270T\300\034\310T\320QX\320X\\\320\\g\320gk\320ks\320sw\360\000\000x\001D\002\360\000\000D\002H\002\360\000\000H\002Q\002\360\000\000Q\002U\002\360\000\000U\002b\002\360\000\000b\002f\002\360\000\000f\002q\002\360\000\000q\002u\002\360\000\000u\002D\003\360\000\000D\003H\003\360\000\000H\003N\003\360\000\000N\003R\003\360\000\000R\003\\\003\360\000\000\\\003`\003\360\000\000`\003g\003\360\000\000g\003k\003\360\000\000k\003v\003\360\000\000v\003z\003\360\000\000z\003E\004\360\000\000E\004I\004\360\000\000I\004X\004\360\000\000X\004\\\004\360\000\000\\\004]\004\330\004\014\210G\2201\220F\230,\240a\330\004\007\200v\210W\220E\230\024\230Q\330\010\022\220!\330\010\027\220q\340\010\030\230\001\330\004\007\200q\330\010\017\320\017(\250\004\250A\250W\260K\270w\300a\340\010\017\320\017(\250\004\250A\250W\260K\270q\200\001\340\013""\014\330\r\026\220a\330\017\030\230\001\330\016\027\220q\330\016\034\230A\330\017\035\230Q\330\t\023\2201\330\r\026\220a\360H\002\000\005\010\200t\2103\210a\330\010\017\210\177\230f\240A\240W\250I\260[\300\n\310*\320T_\320_`\340\010\017\210v\220Q\220d\230&\240\001\240\027\250\t\260\033\270J\300j\320P[\320[\\\200\001\340\013\014\330\r\026\220a\330\017\030\230\001\330\016\027\220q\330\016\034\230A\330\017\035\230Q\330\t\023\2201\330\r\026\220a\360R\001\000\005\010\200z\220\021\220'\230\021\330\010\013\2104\210|\2301\230A\330\014\024\220C\220q\230\001\330\010\017\210u\220A\330\014\023\2209\230K\240z\260\032\270;\300e\3101\340\004\005\340\010\020\220\006\220a\220q\330\014\030\230\t\240\021\240'\250\021\340\010\020\220\010\230\001\230\021\330\014\030\230\013\2401\240G\2506\260\021\340\010\013\210:\220Q\220h\230e\2401\330\014\030\230\n\240!\2407\250&\260\001\340\010\020\220\010\230\001\230\021\330\014\030\230\013\2401\240G\2506\260\021\330\004\013\210=\230\001\330\016(\250\001\330\014\033\2301\330\014*\250'\260\024\260Q\260a\330\014\r\360\010\000\013%\240A\330\010\027\220q\330\010>\270g\300T\310\021\310!\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\2206\230\030\240\021\240!\330\004\007\200|\2207\230!\330\010(\250\001\250\031\260.\300\001\330\004\013\2101\200\001\340\004\037\230q\320 0\260\013\270;\300k\320QR\330\004\023\2207\230(\240!\2401\330\004\007\200|\2207\230!\330\010)\250\021\250*\260N\300!\330\004\013\2101\320\000\"\240!\360.\000\005\010\200v\210S\220\001\330\010\016\210j\230\001\230\021\330\004 \240\007\240q\250\001\330\004\007\200z\220\023\220A\330\010\017\210q\360\010\000\t%\240A\330\010$\240A\330\010\031\230\021\330\010\027\220q\330\010\031\230\021\330\010\027\220q\330\010\023\2201\360\n\000\005\t\210\005\210U\220!\2201\330\010\r\210X\220Q\220g\230Q\330\010\013\210>\230\021\230!\330\014\017\210t\2201\330\020\031\230\027\240\002\240#\240S\250\003\2501\250D\260\002\260!\340\020\031\230\027\240\002\240#\240S\250\003\2501\250D\260\002\260!""\330\020\033\2301\330\014\030\230\001\330\r\020\220\003\2201\330\014\017\210q\330\020\026\220j\240\001\330\024\025\330<>\270a\340\014\026\220a\330\r\020\220\003\2201\330\014\017\210q\330\020\026\220j\240\001\330\024\025\3308:\270!\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330?A\300\021\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330<>\270a\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330AC\3001\340\014\022\220!\330\r\020\220\003\2201\330\014\017\210q\330\020\026\220j\240\001\330\024\025\3308:\270!\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330?A\300\021\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330<>\270a\340\014\017\210q\330\020\026\220j\240\001\330\024\025\330AC\3001\340\014\026\220a\330\r\021\220\021\330\014\r\340\014\022\220*\230A\330\020\021\330%,\250G\2601\260E\270\021\360\006\000\005\010\200t\2101\330\010\016\210j\230\001\330\014;\2702\270Q\340\t\r\210Q\330\010\017\210y\230\001\340\010\017\210y\230\010\240\003\2409\250H\260B\260a\330\004\013\2101\210G\2209\230A";
    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 < 839; i++) {
      Py_ssize_t bytes_length = index[i].length;
      PyObject *string = PyUnicode_DecodeUTF8(bytes + pos, bytes_length, NULL);
      if (likely(string) && i >= 300) 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 = 839; i < 899; 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 < 899; i++) {
      if (unlikely(PyObject_Hash(stringtab[i]) == -1)) {
        __PYX_ERR(0, 1, __pyx_L1_error)
      }
    }
    #if CYTHON_IMMORTAL_CONSTANTS
    {
      PyObject **table = stringtab + 839;
      for (Py_ssize_t i=0; i<60; ++i) {
        #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
        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,2,3,4,5,6,7,8,9,10,11,12,28};
    int32_t const cint_constants_4[] = {31358320L,258420170L};
    for (int i = 0; i < 17; i++) {
      numbertab[i] = PyLong_FromLong((i < 15 ? cint_constants_1[i - 0] : cint_constants_4[i - 15]));
      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<17; ++i) {
      #if CYTHON_COMPILING_IN_CPYTHON_FREETHREADING
      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 : 4;
    unsigned int num_posonly_args : 1;
    unsigned int num_kwonly_args : 1;
    unsigned int nlocals : 4;
    unsigned int flags : 10;
    unsigned int first_line : 13;
} __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 = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1438};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[0] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_utils_pxd, __pyx_mstate->__pyx_n_u_parse_to_int, __pyx_mstate->__pyx_kp_b_iso88591_1_vS_j_q_z_A_q_q_1_U_1_XQgQ_b_3, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[0])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1527};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[1] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_utils_pxd, __pyx_mstate->__pyx_n_u_parse_to_float, __pyx_mstate->__pyx_kp_b_iso88591_vS_j_q_z_A_q_A_A_q_q_1_U_1_XQgQ, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[1])) 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_data};
    __pyx_mstate_global->__pyx_codeobj_tab[2] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_timelex, __pyx_mstate->__pyx_kp_b_iso88591_81F_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[2])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 15, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 236};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_cls, __pyx_mstate->__pyx_n_u_info, __pyx_mstate->__pyx_n_u_cfg, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_row, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_row, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_row, __pyx_mstate->__pyx_n_u_t, __pyx_mstate->__pyx_n_u_i, __pyx_mstate->__pyx_n_u_row, __pyx_mstate->__pyx_n_u_t};
    __pyx_mstate_global->__pyx_codeobj_tab[3] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_from_parserinfo, __pyx_mstate->__pyx_kp_b_iso88591_A_2_4z_a_a_T_s_T_m9D_Q_Qd_q_AS_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[3])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 305};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[4] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_order_hint, __pyx_mstate->__pyx_kp_b_iso88591_A_4_4t1_1_T_T_1_T_1_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[4])) 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_token};
    __pyx_mstate_global->__pyx_codeobj_tab[5] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_jump, __pyx_mstate->__pyx_kp_b_iso88591_A_AXQ_q_HA_G4_0_1D_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[5])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 346};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[6] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_jump, __pyx_mstate->__pyx_kp_b_iso88591_A_Qha_Qd_1_t_4AQ_1D_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[6])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 368};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tokens};
    __pyx_mstate_global->__pyx_codeobj_tab[7] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_jump, __pyx_mstate->__pyx_kp_b_iso88591_A_a_7_Q_Q_4q_t1_L_A_Q_IQd_4AXQ_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[7])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 402};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[8] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_jump, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_1D_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[8])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 421};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[9] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_pertain, __pyx_mstate->__pyx_kp_b_iso88591_A_A_q_Kq_G4_0_1D_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[9])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 442};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[10] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_pertain, __pyx_mstate->__pyx_kp_b_iso88591_A_Qk_Qd_Q_1_t_4AQ_1D_q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[10])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 464};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tokens};
    __pyx_mstate_global->__pyx_codeobj_tab[11] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_pertain, __pyx_mstate->__pyx_kp_b_iso88591_A_1_7_Q_Q_4q_t1_O1_q_Q_L_7q_1_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[11])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 498};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[12] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_pertain, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_1D_q, 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), 517};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[13] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_utc, __pyx_mstate->__pyx_kp_b_iso88591_A_AWA_q_G1_G4_0_1D_1_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[13])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 538};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[14] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_utc, __pyx_mstate->__pyx_kp_b_iso88591_A_QgQ_Qd_1_t_4AQ_1D_1_q, 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), 560};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_tokens};
    __pyx_mstate_global->__pyx_codeobj_tab[15] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_utc, __pyx_mstate->__pyx_kp_b_iso88591_A_Q_7_Q_Q_4q_t1_Kq_O1_Q_HAT_31G1, 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), 594};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[16] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_utc, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_1D_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[16])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {5, 0, 0, 5, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 616};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_hours, __pyx_mstate->__pyx_n_u_minutes_2, __pyx_mstate->__pyx_n_u_seconds};
    __pyx_mstate_global->__pyx_codeobj_tab[17] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_tz, __pyx_mstate->__pyx_kp_b_iso88591_A_A_a_a_AV1_A_Cr_81_AT_wa_G4_0_Z, 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), 655};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[18] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_tz, __pyx_mstate->__pyx_kp_b_iso88591_A_QfA_V1_1_G4_0_AT_1_q, 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), 682};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_mapping};
    __pyx_mstate_global->__pyx_codeobj_tab[19] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_tz, __pyx_mstate->__pyx_kp_b_iso88591_A_31_83a_a_D_A_Kq_O1_5_vQ_G1_6_6, 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), 726};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[20] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_tz, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_AT_1, 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), 739};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[21] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_get_tz_offset, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_AT_1_6_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[21])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 766};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_month};
    __pyx_mstate_global->__pyx_codeobj_tab[22] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_month, __pyx_mstate->__pyx_kp_b_iso88591_A_1_AYa_AYgS_AT_G4_0_q_q, 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), 795};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[23] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_month, __pyx_mstate->__pyx_kp_b_iso88591_A_Qiq_Ya_1_G4_0_AT_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[23])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 822};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_mapping};
    __pyx_mstate_global->__pyx_codeobj_tab[24] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_month, __pyx_mstate->__pyx_kp_b_iso88591_A_6a_83a_a_D_A_N_a_5_vQ_Ja_9A_9A, 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), 864};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[25] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_month, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_AT_a, 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), 877};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[26] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_get_month, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_A_AT_a_6_A_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[26])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 904};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_weekday};
    __pyx_mstate_global->__pyx_codeobj_tab[27] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_weekday, __pyx_mstate->__pyx_kp_b_iso88591_A_q_A_A_A_AT_G1_G4_0__E_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[27])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 933};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[28] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_weekday, __pyx_mstate->__pyx_kp_b_iso88591_A_Qk_1_G4_0_AT_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), 960};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_mapping};
    __pyx_mstate_global->__pyx_codeobj_tab[29] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_weekday, __pyx_mstate->__pyx_kp_b_iso88591_A_8_83a_a_D_A_A_5_vQ_L_a_a_A_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[29])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1002};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[30] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_weekday, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_AT, 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), 1015};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[31] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_get_weekday, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_A_AT_6_A_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[31])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1043};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_flag};
    __pyx_mstate_global->__pyx_codeobj_tab[32] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_hms, __pyx_mstate->__pyx_kp_b_iso88591_A_AWA_AWF_Q_AT_q_G4_0_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[32])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1072};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[33] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_hms, __pyx_mstate->__pyx_kp_b_iso88591_A_QgQ_WA_1_G4_0_AT_A_q, 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), 1099};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_mapping};
    __pyx_mstate_global->__pyx_codeobj_tab[34] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_hms, __pyx_mstate->__pyx_kp_b_iso88591_A_4A_83a_a_D_A_L_A_5_vQ_HA_7_7_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[34])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1141};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[35] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_hms, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_AT_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[35])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1154};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[36] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_get_hms, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_A_AT_A_6_A_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[36])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1182};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_flag};
    __pyx_mstate_global->__pyx_codeobj_tab[37] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_add_ampm, __pyx_mstate->__pyx_kp_b_iso88591_A_AXQ_AXV3a_AT_G4_0_a_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[37])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1211};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[38] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_remove_ampm, __pyx_mstate->__pyx_kp_b_iso88591_A_Qha_XQ_1_G4_0_AT_Q_q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[38])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1238};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_mapping};
    __pyx_mstate_global->__pyx_codeobj_tab[39] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_replace_ampm, __pyx_mstate->__pyx_kp_b_iso88591_A_5Q_83a_a_D_A_M_Q_5_vQ_IQ_81_81, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[39])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1280};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[40] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_is_ampm, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_1_AT_Q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[40])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {2, 0, 0, 2, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1293};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_token};
    __pyx_mstate_global->__pyx_codeobj_tab[41] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_get_ampm, __pyx_mstate->__pyx_kp_b_iso88591_A_6_A_A_AT_Q_6_A_1, 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), 1312};
    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_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_clear_settings, __pyx_mstate->__pyx_kp_b_iso88591_A_L_A_O1_q_Kq_O1_Kq_O1_N_a_A_L_A, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[42])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 1, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1348};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self};
    __pyx_mstate_global->__pyx_codeobj_tab[43] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_reset_settings, __pyx_mstate->__pyx_kp_b_iso88591_A_O1_M_AQ_L_Kq_N_1_AQ_L_M_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, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __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_T_XT_T_TQXX_ggkkssw_x_D_D_H_H_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), 16};
    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_QfA, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[45])) 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[46] = __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[46])) 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[47] = __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[47])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {8, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 2349};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_dtstr, __pyx_mstate->__pyx_n_u_default, __pyx_mstate->__pyx_n_u_yearfirst, __pyx_mstate->__pyx_n_u_dayfirst, __pyx_mstate->__pyx_n_u_ignoretz, __pyx_mstate->__pyx_n_u_isoformat, __pyx_mstate->__pyx_n_u_dtclass};
    __pyx_mstate_global->__pyx_codeobj_tab[48] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_parse, __pyx_mstate->__pyx_kp_b_iso88591_A_A_1_6_A_AT_d_M_IQgQ_4t5__Jc_4q, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[48])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {1, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 1};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_self, __pyx_mstate->__pyx_n_u_state, __pyx_mstate->__pyx_n_u_dict_2, __pyx_mstate->__pyx_n_u_use_setstate};
    __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_T_G4_4z_WTXX__ccmmqqr_G1F_a_vWE, 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), 16};
    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_AV1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[50])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {8, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4259};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_dtstr, __pyx_mstate->__pyx_n_u_default, __pyx_mstate->__pyx_n_u_yearfirst, __pyx_mstate->__pyx_n_u_dayfirst, __pyx_mstate->__pyx_n_u_ignoretz, __pyx_mstate->__pyx_n_u_isoformat, __pyx_mstate->__pyx_n_u_cfg, __pyx_mstate->__pyx_n_u_dtclass};
    __pyx_mstate_global->__pyx_codeobj_tab[51] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_parse, __pyx_mstate->__pyx_kp_b_iso88591_a_q_A_Q_1_aH_t3a_fAWI_T___vQd_J, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[51])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {8, 0, 0, 8, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4343};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_dtobj, __pyx_mstate->__pyx_n_u_default, __pyx_mstate->__pyx_n_u_yearfirst, __pyx_mstate->__pyx_n_u_dayfirst, __pyx_mstate->__pyx_n_u_ignoretz, __pyx_mstate->__pyx_n_u_isoformat, __pyx_mstate->__pyx_n_u_cfg, __pyx_mstate->__pyx_n_u_dtclass};
    __pyx_mstate_global->__pyx_codeobj_tab[52] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_parse_obj, __pyx_mstate->__pyx_kp_b_iso88591_a_q_A_Q_1_aR_z_4_1A_Cq_uA_9Kz_e, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[52])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4426};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_cfg, __pyx_mstate->__pyx_n_u_raise_error};
    __pyx_mstate_global->__pyx_codeobj_tab[53] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_parse_month, __pyx_mstate->__pyx_kp_b_iso88591_1_q_vS_z_q_4t1_A_5_WA_q_f_a_RRT, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[53])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 3, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4487};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_token, __pyx_mstate->__pyx_n_u_cfg, __pyx_mstate->__pyx_n_u_raise_error};
    __pyx_mstate_global->__pyx_codeobj_tab[54] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_src_cytimes_parser_py, __pyx_mstate->__pyx_n_u_parse_weekday, __pyx_mstate->__pyx_kp_b_iso88591_1_q_vS_z_q_4t1_A_5_WA_q_f_0_SSU, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[54])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[55] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_Configs, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_7_1_7_N_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[55])) goto bad;
  }
  {
    const __Pyx_PyCode_New_function_description descr = {3, 0, 0, 4, (unsigned int)(CO_OPTIMIZED|CO_NEWLOCALS), 4};
    PyObject* const varnames[] = {__pyx_mstate->__pyx_n_u_pyx_type, __pyx_mstate->__pyx_n_u_pyx_checksum, __pyx_mstate->__pyx_n_u_pyx_state, __pyx_mstate->__pyx_n_u_pyx_result};
    __pyx_mstate_global->__pyx_codeobj_tab[56] = __Pyx_PyCode_New(descr, varnames, __pyx_mstate->__pyx_kp_u_stringsource, __pyx_mstate->__pyx_n_u_pyx_unpickle_Parser, __pyx_mstate->__pyx_kp_b_iso88591_q_0_kQR_6_7_1, tuple_dedup_map); if (unlikely(!__pyx_mstate_global->__pyx_codeobj_tab[56])) 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)

  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;
}

/* 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;
}

/* 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

/* GetException */
#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
}

/* 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
}

/* 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;
}

/* ModInt[long] */
static CYTHON_INLINE long __Pyx_mod_long(long a, long b, int b_is_constant) {
    long r = a % b;
    long adapt_python = (b_is_constant ?
        ((r != 0) & ((r < 0) ^ (b < 0))) :
        ((r != 0) & ((r ^ b) < 0))
    );
    return r + adapt_python * b;
}

/* py_unicode_predicate */
#if CYTHON_COMPILING_IN_LIMITED_API
static int __Pyx_Py_UNICODE_ISALPHA(Py_UCS4 uchar) {
    int result;
    PyObject *py_result, *ustring;
    if (uchar < 170) {
        switch (uchar) {
            case (Py_UCS4)'A':
            case (Py_UCS4)'B':
            case (Py_UCS4)'C':
            case (Py_UCS4)'D':
            case (Py_UCS4)'E':
            case (Py_UCS4)'F':
            case (Py_UCS4)'G':
            case (Py_UCS4)'H':
            case (Py_UCS4)'I':
            case (Py_UCS4)'J':
            case (Py_UCS4)'K':
            case (Py_UCS4)'L':
            case (Py_UCS4)'M':
            case (Py_UCS4)'N':
            case (Py_UCS4)'O':
            case (Py_UCS4)'P':
            case (Py_UCS4)'Q':
            case (Py_UCS4)'R':
            case (Py_UCS4)'S':
            case (Py_UCS4)'T':
            case (Py_UCS4)'U':
            case (Py_UCS4)'V':
            case (Py_UCS4)'W':
            case (Py_UCS4)'X':
            case (Py_UCS4)'Y':
            case (Py_UCS4)'Z':
            case (Py_UCS4)'a':
            case (Py_UCS4)'b':
            case (Py_UCS4)'c':
            case (Py_UCS4)'d':
            case (Py_UCS4)'e':
            case (Py_UCS4)'f':
            case (Py_UCS4)'g':
            case (Py_UCS4)'h':
            case (Py_UCS4)'i':
            case (Py_UCS4)'j':
            case (Py_UCS4)'k':
            case (Py_UCS4)'l':
            case (Py_UCS4)'m':
            case (Py_UCS4)'n':
            case (Py_UCS4)'o':
            case (Py_UCS4)'p':
            case (Py_UCS4)'q':
            case (Py_UCS4)'r':
            case (Py_UCS4)'s':
            case (Py_UCS4)'t':
            case (Py_UCS4)'u':
            case (Py_UCS4)'v':
            case (Py_UCS4)'w':
            case (Py_UCS4)'x':
            case (Py_UCS4)'y':
            case (Py_UCS4)'z':
            return 1;
        }
        return 0;
    }
    ustring = PyUnicode_FromOrdinal(uchar);
    if (!ustring) goto bad;
    py_result = PyObject_CallMethod(ustring, "isalpha", NULL);
    Py_DECREF(ustring);
    if (!py_result) goto bad;
    result = PyObject_IsTrue(py_result);
    Py_DECREF(py_result);
    if (result == -1) goto bad;
    return result != 0;
bad:
    PyErr_Clear();
    return 0;
}
#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);
}

/* 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
}

/* PyUnicode_Substring */
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_Substring(
            PyObject* text, Py_ssize_t start, Py_ssize_t stop) {
    Py_ssize_t length;
    #if !CYTHON_COMPILING_IN_LIMITED_API
    if (unlikely(__Pyx_PyUnicode_READY(text) == -1)) return NULL;
    #endif
    length = __Pyx_PyUnicode_GET_LENGTH(text);
    #if !CYTHON_ASSUME_SAFE_SIZE
    if (unlikely(length < 0)) return NULL;
    #endif
    if (start < 0) {
        start += length;
        if (start < 0)
            start = 0;
    }
    if (stop < 0)
        stop += length;
    else if (stop > length)
        stop = length;
    if (stop <= start)
        return __Pyx_NewRef(__pyx_mstate_global->__pyx_empty_unicode);
    if (start == 0 && stop == length)
        return __Pyx_NewRef(text);
#if CYTHON_COMPILING_IN_LIMITED_API
    return PyUnicode_Substring(text, start, stop);
#else
    return PyUnicode_FromKindAndData(PyUnicode_KIND(text),
        PyUnicode_1BYTE_DATA(text) + start*PyUnicode_KIND(text), stop-start);
#endif
}

/* 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);
}

/* 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

/* 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);
}

/* 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;
}

/* 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

/* ModInt[PY_LONG_LONG] */
static CYTHON_INLINE PY_LONG_LONG __Pyx_mod_PY_LONG_LONG(PY_LONG_LONG a, PY_LONG_LONG b, int b_is_constant) {
    PY_LONG_LONG r = a % b;
    PY_LONG_LONG adapt_python = (b_is_constant ?
        ((r != 0) & ((r < 0) ^ (b < 0))) :
        ((r != 0) & ((r ^ b) < 0))
    );
    return r + adapt_python * b;
}

/* 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);
}

/* 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

/* 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;
}

/* CIntToPyUnicode */
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char) {
#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(!(is_unsigned || value == 0 || value > 0) ||
                    !(sizeof(value) <= 2 || value & ~ (int) 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_int(int value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(int)*3+2];
    char *dpos, *end = digits + sizeof(int)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    int remaining;
#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 (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 = (int) (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 = (int) (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 = (int) (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);
}

/* 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;
}

/* 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

/* CIntToPyUnicode */
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_PY_LONG_LONG(PY_LONG_LONG 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_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_LONG) 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_LONG_LONG) 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_LONG_LONG(PY_LONG_LONG value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(PY_LONG_LONG)*3+2];
    char *dpos, *end = digits + sizeof(PY_LONG_LONG)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    PY_LONG_LONG remaining;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const PY_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_LONG) 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_LONG_LONG) (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_LONG_LONG) (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_LONG_LONG) (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);
}

/* CIntToPyUnicode */
static CYTHON_INLINE PyObject* __Pyx_uchar___Pyx_PyUnicode_From_npy_intp(npy_intp value, Py_ssize_t width, char padding_char) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const npy_intp neg_one = (npy_intp) -1, const_zero = (npy_intp) 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 & ~ (npy_intp) 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_npy_intp(npy_intp value, Py_ssize_t width, char padding_char, char format_char) {
    char digits[sizeof(npy_intp)*3+2];
    char *dpos, *end = digits + sizeof(npy_intp)*3+2;
    const char *hex_digits = DIGITS_HEX;
    Py_ssize_t length, ulength;
    int prepend_sign, last_one_off;
    npy_intp remaining;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const npy_intp neg_one = (npy_intp) -1, const_zero = (npy_intp) 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 = (npy_intp) (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 = (npy_intp) (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 = (npy_intp) (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);
}

/* ModInt[npy_int64] */
static CYTHON_INLINE npy_int64 __Pyx_mod_npy_int64(npy_int64 a, npy_int64 b, int b_is_constant) {
    npy_int64 r = a % b;
    npy_int64 adapt_python = (b_is_constant ?
        ((r != 0) & ((r < 0) ^ (b < 0))) :
        ((r != 0) & ((r ^ b) < 0))
    );
    return r + adapt_python * b;
}

/* DivInt[npy_int64] */
static CYTHON_INLINE npy_int64 __Pyx_div_npy_int64(npy_int64 a, npy_int64 b, int b_is_constant) {
    npy_int64 q = a / b;
    npy_int64 r = a - q*b;
    npy_int64 adapt_python = (b_is_constant ?
        ((r != 0) & ((r < 0) ^ (b < 0))) :
        ((r != 0) & ((r ^ b) < 0))
    );
    return q - adapt_python;
}

/* 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

/* 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);
}

/* 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

/* 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);
    }
}

/* IterFinish (used by set_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;
}

/* set_iter */
static CYTHON_INLINE PyObject* __Pyx_set_iterator(PyObject* iterable, int is_set,
                                                  Py_ssize_t* p_orig_length, int* p_source_is_set) {
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000
    is_set = is_set || likely(PySet_CheckExact(iterable) || PyFrozenSet_CheckExact(iterable));
    *p_source_is_set = is_set;
    if (likely(is_set)) {
        *p_orig_length = PySet_Size(iterable);
        Py_INCREF(iterable);
        return iterable;
    }
#else
    CYTHON_UNUSED_VAR(is_set);
    *p_source_is_set = 0;
#endif
    *p_orig_length = 0;
    return PyObject_GetIter(iterable);
}
static CYTHON_INLINE int __Pyx_set_iter_next(
        PyObject* iter_obj, Py_ssize_t orig_length,
        Py_ssize_t* ppos, PyObject **value,
        int source_is_set) {
    if (!CYTHON_COMPILING_IN_CPYTHON || PY_VERSION_HEX >= 0x030d0000 || unlikely(!source_is_set)) {
        *value = PyIter_Next(iter_obj);
        if (unlikely(!*value)) {
            return __Pyx_IterFinish();
        }
        CYTHON_UNUSED_VAR(orig_length);
        CYTHON_UNUSED_VAR(ppos);
        return 1;
    }
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030d0000
    if (unlikely(PySet_GET_SIZE(iter_obj) != orig_length)) {
        PyErr_SetString(
            PyExc_RuntimeError,
            "set changed size during iteration");
        return -1;
    }
    {
        Py_hash_t hash;
        int ret = _PySet_NextEntry(iter_obj, ppos, value, &hash);
        assert (ret != -1);
        if (likely(ret)) {
            Py_INCREF(*value);
            return 1;
        }
    }
#endif
    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;
}

/* GetAttr3 */
#if __PYX_LIMITED_VERSION_HEX < 0x030d0000
static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    Py_INCREF(d);
    return d;
}
#endif
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r;
#if __PYX_LIMITED_VERSION_HEX >= 0x030d0000
    int res = PyObject_GetOptionalAttr(o, n, &r);
    return (res != 0) ? r : __Pyx_NewRef(d);
#else
  #if CYTHON_USE_TYPE_SLOTS
    if (likely(PyUnicode_Check(n))) {
        r = __Pyx_PyObject_GetAttrStrNoError(o, n);
        if (unlikely(!r) && likely(!PyErr_Occurred())) {
            r = __Pyx_NewRef(d);
        }
        return r;
    }
  #endif
    r = PyObject_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
#endif
}

/* DivInt[long] */
static CYTHON_INLINE long __Pyx_div_long(long a, long b, int b_is_constant) {
    long q = a / b;
    long r = a - q*b;
    long adapt_python = (b_is_constant ?
        ((r != 0) & ((r < 0) ^ (b < 0))) :
        ((r != 0) & ((r ^ b) < 0))
    );
    return q - adapt_python;
}

/* ModFloat[double] */
static CYTHON_INLINE double __Pyx_mod_double(double a, double b, int b_is_constant) {
    CYTHON_UNUSED_VAR(b_is_constant);
    double r = fmod(a, b);
    r += ((r != 0) & ((r < 0) ^ (b < 0))) * b;
    return r;
}

/* 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);
    }
}

/* CallTypeTraverse */
#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

/* VoidPtrExport */
static int __Pyx_ExportVoidPtr(PyObject *api_dict, const char *name, void *p, const char *sig) {
    PyObject *cobj;
    cobj = PyCapsule_New(p, sig, 0);
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(api_dict, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    return 0;
bad:
    Py_XDECREF(cobj);
    return -1;
}

/* GetApiDict */
static PyObject *__Pyx_ApiExport_GetApiDict(void) {
    PyObject *d;
    if (__Pyx_PyDict_GetItemRef(__pyx_mstate_global->__pyx_d, __pyx_mstate_global->__pyx_n_u_pyx_capi, &d) == -1)
        return NULL;
    if (!d) {
        d = PyDict_New();
        if (!d)
            goto bad;
        if (PyObject_SetAttr(__pyx_m, __pyx_mstate_global->__pyx_n_u_pyx_capi, d) < 0)
            goto bad;
    }
    return d;
bad:
    Py_XDECREF(d);
    return NULL;
}

/* FunctionExport */
static int __Pyx_ExportFunction(PyObject *api_dict, const char *name, void (*f)(void), const char *sig) {
    PyObject *cobj;
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    tmp.fp = f;
    cobj = PyCapsule_New(tmp.p, sig, 0);
    if (!cobj)
        goto bad;
    if (PyDict_SetItemString(api_dict, name, cobj) < 0)
        goto bad;
    Py_DECREF(cobj);
    return 0;
bad:
    Py_XDECREF(cobj);
    return -1;
}

/* 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 */
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;
}

/* 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;
}

/* TypeImport */
#ifndef __PYX_HAVE_RT_ImportType_3_2_1
#define __PYX_HAVE_RT_ImportType_3_2_1
static PyTypeObject *__Pyx_ImportType_3_2_1(PyObject *module, const char *module_name, const char *class_name,
    size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_2_1 check_size)
{
    PyObject *result = 0;
    Py_ssize_t basicsize;
    Py_ssize_t itemsize;
#if defined(Py_LIMITED_API) || (defined(CYTHON_COMPILING_IN_LIMITED_API) && CYTHON_COMPILING_IN_LIMITED_API)
    PyObject *py_basicsize;
    PyObject *py_itemsize;
#endif
    result = PyObject_GetAttrString(module, class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s.%.200s is not a type object",
            module_name, class_name);
        goto bad;
    }
#if !( defined(Py_LIMITED_API) || (defined(CYTHON_COMPILING_IN_LIMITED_API) && CYTHON_COMPILING_IN_LIMITED_API) )
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
    itemsize = ((PyTypeObject *)result)->tp_itemsize;
#else
    if (size == 0) {
        return (PyTypeObject *)result;
    }
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
    py_itemsize = PyObject_GetAttrString(result, "__itemsize__");
    if (!py_itemsize)
        goto bad;
    itemsize = PyLong_AsSsize_t(py_itemsize);
    Py_DECREF(py_itemsize);
    py_itemsize = 0;
    if (itemsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if (itemsize) {
        if (size % alignment) {
            alignment = size % alignment;
        }
        if (itemsize < (Py_ssize_t)alignment)
            itemsize = (Py_ssize_t)alignment;
    }
    if ((size_t)(basicsize + itemsize) < size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize+itemsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error_3_2_1 &&
            ((size_t)basicsize > size || (size_t)(basicsize + itemsize) < size)) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd-%zd from PyObject",
            module_name, class_name, size, basicsize, basicsize+itemsize);
        goto bad;
    }
    else if (check_size == __Pyx_ImportType_CheckSize_Warn_3_2_1 && (size_t)basicsize > size) {
        if (PyErr_WarnFormat(NULL, 0,
                "%.200s.%.200s size changed, may indicate binary incompatibility. "
                "Expected %zd from C header, got %zd from PyObject",
                module_name, class_name, size, basicsize) < 0) {
            goto bad;
        }
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(result);
    return NULL;
}
#endif

/* PxdImportShared (used by VoidPtrImport) */
#ifndef __PYX_HAVE_RT_ImportFromPxd_3_2_1
#define __PYX_HAVE_RT_ImportFromPxd_3_2_1
static int __Pyx_ImportFromPxd_3_2_1(PyObject *module, const char *name, void **p, const char *sig, const char *what) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    d = PyObject_GetAttrString(module, "__pyx_capi__");
    if (!d)
        goto bad;
#if (defined(Py_LIMITED_API) && Py_LIMITED_API >= 0x030d0000) || (!defined(Py_LIMITED_API) && PY_VERSION_HEX >= 0x030d0000)
    PyDict_GetItemStringRef(d, name, &cobj);
#else
    cobj = PyDict_GetItemString(d, name);
    Py_XINCREF(cobj);
#endif
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C %.8s %.200s",
                PyModule_GetName(module), what, name);
        goto bad;
    }
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C %.8s %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             what, PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    *p = PyCapsule_GetPointer(cobj, sig);
    if (!(*p))
        goto bad;
    Py_DECREF(d);
    Py_DECREF(cobj);
    return 0;
bad:
    Py_XDECREF(d);
    Py_XDECREF(cobj);
    return -1;
}
#endif

/* VoidPtrImport */
#ifndef __PYX_HAVE_RT_ImportVoidPtr_3_2_1
#define __PYX_HAVE_RT_ImportVoidPtr_3_2_1
static int __Pyx_ImportVoidPtr_3_2_1(PyObject *module, const char *name, void **p, const char *sig) {
    return __Pyx_ImportFromPxd_3_2_1(module, name, p, sig, "variable");
}
#endif

/* FunctionImport */
#ifndef __PYX_HAVE_RT_ImportFunction_3_2_1
#define __PYX_HAVE_RT_ImportFunction_3_2_1
static int __Pyx_ImportFunction_3_2_1(PyObject *module, const char *funcname, void (**f)(void), const char *sig) {
    union {
        void (*fp)(void);
        void *p;
    } tmp;
    int result = __Pyx_ImportFromPxd_3_2_1(module, funcname, &tmp.p, sig, "function");
    if (result == 0) {
        *f = tmp.fp;
    }
    return result;
}
#endif

/* dict_setdefault (used by FetchCommonType) */
static CYTHON_INLINE PyObject *__Pyx_PyDict_SetDefault(PyObject *d, PyObject *key, PyObject *default_value) {
    PyObject* value;
#if 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);
#elif PY_VERSION_HEX >= 0x030d0000
    PyDict_SetDefaultRef(d, key, default_value, &value);
#else
    value = PyDict_SetDefault(d, key, default_value);
    if (unlikely(!value)) return NULL;
    Py_INCREF(value);
#endif
    return value;
}

/* 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;
}

/* 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);
        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;
}

/* 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__2);
        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;
}

/* ListPack */
static PyObject *__Pyx_PyList_Pack(Py_ssize_t n, ...) {
    va_list va;
    PyObject *l = PyList_New(n);
    va_start(va, n);
    if (unlikely(!l)) goto end;
    for (Py_ssize_t i=0; i<n; ++i) {
        PyObject *arg = va_arg(va, PyObject*);
        Py_INCREF(arg);
        if (__Pyx_PyList_SET_ITEM(l, i, arg) != (0)) {
            Py_CLEAR(l);
            goto end;
        }
    }
    end:
    va_end(va);
    return l;
}

/* 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

/* CheckUnpickleChecksum */
static void __Pyx_RaiseUnpickleChecksumError(long checksum, long checksum1, long checksum2, long checksum3, const char *members) {
    PyObject *pickle_module = PyImport_ImportModule("pickle");
    if (unlikely(!pickle_module)) return;
    PyObject *pickle_error = PyObject_GetAttrString(pickle_module, "PickleError");
    Py_DECREF(pickle_module);
    if (unlikely(!pickle_error)) return;
    if (checksum2 == checksum1) {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x) = (%s))",
            checksum, checksum1, members);
    } else if (checksum3 == checksum2) {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x, 0x%x) = (%s))",
            checksum, checksum1, checksum2, members);
    } else {
        PyErr_Format(pickle_error, "Incompatible checksums (0x%x vs (0x%x, 0x%x, 0x%x) = (%s))",
            checksum, checksum1, checksum2, checksum3, members);
    }
    Py_DECREF(pickle_error);
}
static int __Pyx_CheckUnpickleChecksum(long checksum, long checksum1, long checksum2, long checksum3, const char *members) {
    int found = 0;
    found |= checksum1 == checksum;
    found |= checksum2 == checksum;
    found |= checksum3 == checksum;
    if (likely(found))
        return 0;
    __Pyx_RaiseUnpickleChecksumError(checksum, checksum1, checksum2, checksum3, members);
    return -1;
}

/* 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;\
    }

/* Declarations */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
      return ::std::complex< float >(x, y);
    }
  #else
    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
      return x + y*(__pyx_t_float_complex)_Complex_I;
    }
  #endif
#else
    static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float x, float y) {
      __pyx_t_float_complex z;
      z.real = x;
      z.imag = y;
      return z;
    }
#endif

/* Arithmetic */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
#else
    static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
       return (a.real == b.real) && (a.imag == b.imag);
    }
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        __pyx_t_float_complex z;
        z.real = a.real + b.real;
        z.imag = a.imag + b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        __pyx_t_float_complex z;
        z.real = a.real - b.real;
        z.imag = a.imag - b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        __pyx_t_float_complex z;
        z.real = a.real * b.real - a.imag * b.imag;
        z.imag = a.real * b.imag + a.imag * b.real;
        return z;
    }
    #if 1
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        if (b.imag == 0) {
            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else if (fabsf(b.real) >= fabsf(b.imag)) {
            if (b.real == 0 && b.imag == 0) {
                return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.imag);
            } else {
                float r = b.imag / b.real;
                float s = (float)(1.0) / (b.real + b.imag * r);
                return __pyx_t_float_complex_from_parts(
                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
            }
        } else {
            float r = b.real / b.imag;
            float s = (float)(1.0) / (b.imag + b.real * r);
            return __pyx_t_float_complex_from_parts(
                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
        }
    }
    #else
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
        if (b.imag == 0) {
            return __pyx_t_float_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else {
            float denom = b.real * b.real + b.imag * b.imag;
            return __pyx_t_float_complex_from_parts(
                (a.real * b.real + a.imag * b.imag) / denom,
                (a.imag * b.real - a.real * b.imag) / denom);
        }
    }
    #endif
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex a) {
        __pyx_t_float_complex z;
        z.real = -a.real;
        z.imag = -a.imag;
        return z;
    }
    static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex a) {
       return (a.real == 0) && (a.imag == 0);
    }
    static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex a) {
        __pyx_t_float_complex z;
        z.real =  a.real;
        z.imag = -a.imag;
        return z;
    }
    #if 1
        static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex z) {
          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
            return sqrtf(z.real*z.real + z.imag*z.imag);
          #else
            return hypotf(z.real, z.imag);
          #endif
        }
        static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex a, __pyx_t_float_complex b) {
            __pyx_t_float_complex z;
            float r, lnr, theta, z_r, z_theta;
            if (b.imag == 0 && b.real == (int)b.real) {
                if (b.real < 0) {
                    float denom = a.real * a.real + a.imag * a.imag;
                    a.real = a.real / denom;
                    a.imag = -a.imag / denom;
                    b.real = -b.real;
                }
                switch ((int)b.real) {
                    case 0:
                        z.real = 1;
                        z.imag = 0;
                        return z;
                    case 1:
                        return a;
                    case 2:
                        return __Pyx_c_prod_float(a, a);
                    case 3:
                        z = __Pyx_c_prod_float(a, a);
                        return __Pyx_c_prod_float(z, a);
                    case 4:
                        z = __Pyx_c_prod_float(a, a);
                        return __Pyx_c_prod_float(z, z);
                }
            }
            if (a.imag == 0) {
                if (a.real == 0) {
                    return a;
                } else if ((b.imag == 0) && (a.real >= 0)) {
                    z.real = powf(a.real, b.real);
                    z.imag = 0;
                    return z;
                } else if (a.real > 0) {
                    r = a.real;
                    theta = 0;
                } else {
                    r = -a.real;
                    theta = atan2f(0.0, -1.0);
                }
            } else {
                r = __Pyx_c_abs_float(a);
                theta = atan2f(a.imag, a.real);
            }
            lnr = logf(r);
            z_r = expf(lnr * b.real - theta * b.imag);
            z_theta = theta * b.real + lnr * b.imag;
            z.real = z_r * cosf(z_theta);
            z.imag = z_r * sinf(z_theta);
            return z;
        }
    #endif
#endif

/* Declarations */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
      return ::std::complex< double >(x, y);
    }
  #else
    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
      return x + y*(__pyx_t_double_complex)_Complex_I;
    }
  #endif
#else
    static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double x, double y) {
      __pyx_t_double_complex z;
      z.real = x;
      z.imag = y;
      return z;
    }
#endif

/* Arithmetic */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
#else
    static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
       return (a.real == b.real) && (a.imag == b.imag);
    }
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        __pyx_t_double_complex z;
        z.real = a.real + b.real;
        z.imag = a.imag + b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        __pyx_t_double_complex z;
        z.real = a.real - b.real;
        z.imag = a.imag - b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        __pyx_t_double_complex z;
        z.real = a.real * b.real - a.imag * b.imag;
        z.imag = a.real * b.imag + a.imag * b.real;
        return z;
    }
    #if 1
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        if (b.imag == 0) {
            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else if (fabs(b.real) >= fabs(b.imag)) {
            if (b.real == 0 && b.imag == 0) {
                return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
            } else {
                double r = b.imag / b.real;
                double s = (double)(1.0) / (b.real + b.imag * r);
                return __pyx_t_double_complex_from_parts(
                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
            }
        } else {
            double r = b.real / b.imag;
            double s = (double)(1.0) / (b.imag + b.real * r);
            return __pyx_t_double_complex_from_parts(
                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
        }
    }
    #else
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
        if (b.imag == 0) {
            return __pyx_t_double_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else {
            double denom = b.real * b.real + b.imag * b.imag;
            return __pyx_t_double_complex_from_parts(
                (a.real * b.real + a.imag * b.imag) / denom,
                (a.imag * b.real - a.real * b.imag) / denom);
        }
    }
    #endif
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex a) {
        __pyx_t_double_complex z;
        z.real = -a.real;
        z.imag = -a.imag;
        return z;
    }
    static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex a) {
       return (a.real == 0) && (a.imag == 0);
    }
    static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex a) {
        __pyx_t_double_complex z;
        z.real =  a.real;
        z.imag = -a.imag;
        return z;
    }
    #if 1
        static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex z) {
          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
            return sqrt(z.real*z.real + z.imag*z.imag);
          #else
            return hypot(z.real, z.imag);
          #endif
        }
        static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex a, __pyx_t_double_complex b) {
            __pyx_t_double_complex z;
            double r, lnr, theta, z_r, z_theta;
            if (b.imag == 0 && b.real == (int)b.real) {
                if (b.real < 0) {
                    double denom = a.real * a.real + a.imag * a.imag;
                    a.real = a.real / denom;
                    a.imag = -a.imag / denom;
                    b.real = -b.real;
                }
                switch ((int)b.real) {
                    case 0:
                        z.real = 1;
                        z.imag = 0;
                        return z;
                    case 1:
                        return a;
                    case 2:
                        return __Pyx_c_prod_double(a, a);
                    case 3:
                        z = __Pyx_c_prod_double(a, a);
                        return __Pyx_c_prod_double(z, a);
                    case 4:
                        z = __Pyx_c_prod_double(a, a);
                        return __Pyx_c_prod_double(z, z);
                }
            }
            if (a.imag == 0) {
                if (a.real == 0) {
                    return a;
                } else if ((b.imag == 0) && (a.real >= 0)) {
                    z.real = pow(a.real, b.real);
                    z.imag = 0;
                    return z;
                } else if (a.real > 0) {
                    r = a.real;
                    theta = 0;
                } else {
                    r = -a.real;
                    theta = atan2(0.0, -1.0);
                }
            } else {
                r = __Pyx_c_abs_double(a);
                theta = atan2(a.imag, a.real);
            }
            lnr = log(r);
            z_r = exp(lnr * b.real - theta * b.imag);
            z_theta = theta * b.real + lnr * b.imag;
            z.real = z_r * cos(z_theta);
            z.imag = z_r * sin(z_theta);
            return z;
        }
    #endif
#endif

/* Declarations */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
  #ifdef __cplusplus
    static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) {
      return ::std::complex< long double >(x, y);
    }
  #else
    static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) {
      return x + y*(__pyx_t_long_double_complex)_Complex_I;
    }
  #endif
#else
    static CYTHON_INLINE __pyx_t_long_double_complex __pyx_t_long_double_complex_from_parts(long double x, long double y) {
      __pyx_t_long_double_complex z;
      z.real = x;
      z.imag = y;
      return z;
    }
#endif

/* Arithmetic */
#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
#else
    static CYTHON_INLINE int __Pyx_c_eq_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
       return (a.real == b.real) && (a.imag == b.imag);
    }
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_sum_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
        __pyx_t_long_double_complex z;
        z.real = a.real + b.real;
        z.imag = a.imag + b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_diff_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
        __pyx_t_long_double_complex z;
        z.real = a.real - b.real;
        z.imag = a.imag - b.imag;
        return z;
    }
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_prod_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
        __pyx_t_long_double_complex z;
        z.real = a.real * b.real - a.imag * b.imag;
        z.imag = a.real * b.imag + a.imag * b.real;
        return z;
    }
    #if 1
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
        if (b.imag == 0) {
            return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else if (fabsl(b.real) >= fabsl(b.imag)) {
            if (b.real == 0 && b.imag == 0) {
                return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.imag);
            } else {
                long double r = b.imag / b.real;
                long double s = (long double)(1.0) / (b.real + b.imag * r);
                return __pyx_t_long_double_complex_from_parts(
                    (a.real + a.imag * r) * s, (a.imag - a.real * r) * s);
            }
        } else {
            long double r = b.real / b.imag;
            long double s = (long double)(1.0) / (b.imag + b.real * r);
            return __pyx_t_long_double_complex_from_parts(
                (a.real * r + a.imag) * s, (a.imag * r - a.real) * s);
        }
    }
    #else
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_quot_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
        if (b.imag == 0) {
            return __pyx_t_long_double_complex_from_parts(a.real / b.real, a.imag / b.real);
        } else {
            long double denom = b.real * b.real + b.imag * b.imag;
            return __pyx_t_long_double_complex_from_parts(
                (a.real * b.real + a.imag * b.imag) / denom,
                (a.imag * b.real - a.real * b.imag) / denom);
        }
    }
    #endif
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_neg_long__double(__pyx_t_long_double_complex a) {
        __pyx_t_long_double_complex z;
        z.real = -a.real;
        z.imag = -a.imag;
        return z;
    }
    static CYTHON_INLINE int __Pyx_c_is_zero_long__double(__pyx_t_long_double_complex a) {
       return (a.real == 0) && (a.imag == 0);
    }
    static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_conj_long__double(__pyx_t_long_double_complex a) {
        __pyx_t_long_double_complex z;
        z.real =  a.real;
        z.imag = -a.imag;
        return z;
    }
    #if 1
        static CYTHON_INLINE long double __Pyx_c_abs_long__double(__pyx_t_long_double_complex z) {
          #if !defined(HAVE_HYPOT) || defined(_MSC_VER)
            return sqrtl(z.real*z.real + z.imag*z.imag);
          #else
            return hypotl(z.real, z.imag);
          #endif
        }
        static CYTHON_INLINE __pyx_t_long_double_complex __Pyx_c_pow_long__double(__pyx_t_long_double_complex a, __pyx_t_long_double_complex b) {
            __pyx_t_long_double_complex z;
            long double r, lnr, theta, z_r, z_theta;
            if (b.imag == 0 && b.real == (int)b.real) {
                if (b.real < 0) {
                    long double denom = a.real * a.real + a.imag * a.imag;
                    a.real = a.real / denom;
                    a.imag = -a.imag / denom;
                    b.real = -b.real;
                }
                switch ((int)b.real) {
                    case 0:
                        z.real = 1;
                        z.imag = 0;
                        return z;
                    case 1:
                        return a;
                    case 2:
                        return __Pyx_c_prod_long__double(a, a);
                    case 3:
                        z = __Pyx_c_prod_long__double(a, a);
                        return __Pyx_c_prod_long__double(z, a);
                    case 4:
                        z = __Pyx_c_prod_long__double(a, a);
                        return __Pyx_c_prod_long__double(z, z);
                }
            }
            if (a.imag == 0) {
                if (a.real == 0) {
                    return a;
                } else if ((b.imag == 0) && (a.real >= 0)) {
                    z.real = powl(a.real, b.real);
                    z.imag = 0;
                    return z;
                } else if (a.real > 0) {
                    r = a.real;
                    theta = 0;
                } else {
                    r = -a.real;
                    theta = atan2l(0.0, -1.0);
                }
            } else {
                r = __Pyx_c_abs_long__double(a);
                theta = atan2l(a.imag, a.real);
            }
            lnr = logl(r);
            z_r = expl(lnr * b.real - theta * b.imag);
            z_theta = theta * b.real + lnr * b.imag;
            z.real = z_r * cosl(z_theta);
            z.imag = z_r * sinl(z_theta);
            return z;
        }
    #endif
#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;
}

/* 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;
}

/* 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_PY_LONG_LONG(PY_LONG_LONG value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const PY_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_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(PY_LONG_LONG) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(PY_LONG_LONG) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(PY_LONG_LONG) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(PY_LONG_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(PY_LONG_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(PY_LONG_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_unsigned_PY_LONG_LONG(unsigned PY_LONG_LONG value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const unsigned PY_LONG_LONG neg_one = (unsigned PY_LONG_LONG) -1, const_zero = (unsigned PY_LONG_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 PY_LONG_LONG) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(unsigned PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned PY_LONG_LONG) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(unsigned PY_LONG_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 PY_LONG_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 PY_LONG_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 PY_LONG_LONG __Pyx_PyLong_As_PY_LONG_LONG(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const PY_LONG_LONG neg_one = (PY_LONG_LONG) -1, const_zero = (PY_LONG_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))) {
        PY_LONG_LONG val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (PY_LONG_LONG) -1;
        val = __Pyx_PyLong_As_PY_LONG_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(PY_LONG_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(PY_LONG_LONG) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) >= 2 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(PY_LONG_LONG) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) >= 3 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(PY_LONG_LONG) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_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(PY_LONG_LONG) >= 4 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_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 (PY_LONG_LONG) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(PY_LONG_LONG) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(PY_LONG_LONG) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(PY_LONG_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(PY_LONG_LONG) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(PY_LONG_LONG) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) ((((((PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(PY_LONG_LONG) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_LONG, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) ((((((((PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_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(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) (((PY_LONG_LONG)-1)*(((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(PY_LONG_LONG) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(PY_LONG_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(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT)) {
                            return (PY_LONG_LONG) ((((((((((PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (PY_LONG_LONG)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(PY_LONG_LONG) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, long, PyLong_AsLong(x))
        } else if ((sizeof(PY_LONG_LONG) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(PY_LONG_LONG, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        PY_LONG_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 (PY_LONG_LONG) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (PY_LONG_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 (PY_LONG_LONG) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (PY_LONG_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(PY_LONG_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 |= ((PY_LONG_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(PY_LONG_LONG) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((PY_LONG_LONG) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((PY_LONG_LONG) 1) << (sizeof(PY_LONG_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 (PY_LONG_LONG) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to PY_LONG_LONG");
    return (PY_LONG_LONG) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to PY_LONG_LONG");
    return (PY_LONG_LONG) -1;
}

/* 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
    }
}

/* CIntToPy */
static CYTHON_INLINE PyObject* __Pyx_PyLong_From_npy_intp(npy_intp value) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const npy_intp neg_one = (npy_intp) -1, const_zero = (npy_intp) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(npy_intp) < sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(npy_intp) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#if !CYTHON_COMPILING_IN_PYPY
        } else if (sizeof(npy_intp) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(npy_intp) <= sizeof(long)) {
            return PyLong_FromLong((long) value);
        } else if (sizeof(npy_intp) <= 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(npy_intp),
                                     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(npy_intp));
        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 npy_intp __Pyx_PyLong_As_npy_intp(PyObject *x) {
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wconversion"
#endif
    const npy_intp neg_one = (npy_intp) -1, const_zero = (npy_intp) 0;
#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
#pragma GCC diagnostic pop
#endif
    const int is_unsigned = neg_one > const_zero;
    if (unlikely(!PyLong_Check(x))) {
        npy_intp val;
        PyObject *tmp = __Pyx_PyNumber_Long(x);
        if (!tmp) return (npy_intp) -1;
        val = __Pyx_PyLong_As_npy_intp(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(npy_intp, __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(npy_intp) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) >= 2 * PyLong_SHIFT)) {
                            return (npy_intp) (((((npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(npy_intp) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) >= 3 * PyLong_SHIFT)) {
                            return (npy_intp) (((((((npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(npy_intp) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, 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(npy_intp) >= 4 * PyLong_SHIFT)) {
                            return (npy_intp) (((((((((npy_intp)digits[3]) << PyLong_SHIFT) | (npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)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 (npy_intp) -1;
            if (unlikely(result == 1))
                goto raise_neg_overflow;
        }
#endif
        if ((sizeof(npy_intp) <= sizeof(unsigned long))) {
            __PYX_VERIFY_RETURN_INT_EXC(npy_intp, unsigned long, PyLong_AsUnsignedLong(x))
        } else if ((sizeof(npy_intp) <= sizeof(unsigned PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(npy_intp, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
        }
    } else {
#if CYTHON_USE_PYLONG_INTERNALS
        if (__Pyx_PyLong_IsCompact(x)) {
            __PYX_VERIFY_RETURN_INT(npy_intp, __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(npy_intp) - 1 > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) - 1 > 2 * PyLong_SHIFT)) {
                            return (npy_intp) (((npy_intp)-1)*(((((npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if ((8 * sizeof(npy_intp) > 1 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 2 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) - 1 > 2 * PyLong_SHIFT)) {
                            return (npy_intp) ((((((npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if ((8 * sizeof(npy_intp) - 1 > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) - 1 > 3 * PyLong_SHIFT)) {
                            return (npy_intp) (((npy_intp)-1)*(((((((npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if ((8 * sizeof(npy_intp) > 2 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 3 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if ((8 * sizeof(npy_intp) - 1 > 3 * PyLong_SHIFT)) {
                            return (npy_intp) ((((((((npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if ((8 * sizeof(npy_intp) - 1 > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, 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(npy_intp) - 1 > 4 * PyLong_SHIFT)) {
                            return (npy_intp) (((npy_intp)-1)*(((((((((npy_intp)digits[3]) << PyLong_SHIFT) | (npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if ((8 * sizeof(npy_intp) > 3 * PyLong_SHIFT)) {
                        if ((8 * sizeof(unsigned long) > 4 * PyLong_SHIFT)) {
                            __PYX_VERIFY_RETURN_INT(npy_intp, 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(npy_intp) - 1 > 4 * PyLong_SHIFT)) {
                            return (npy_intp) ((((((((((npy_intp)digits[3]) << PyLong_SHIFT) | (npy_intp)digits[2]) << PyLong_SHIFT) | (npy_intp)digits[1]) << PyLong_SHIFT) | (npy_intp)digits[0])));
                        }
                    }
                    break;
            }
        }
#endif
        if ((sizeof(npy_intp) <= sizeof(long))) {
            __PYX_VERIFY_RETURN_INT_EXC(npy_intp, long, PyLong_AsLong(x))
        } else if ((sizeof(npy_intp) <= sizeof(PY_LONG_LONG))) {
            __PYX_VERIFY_RETURN_INT_EXC(npy_intp, PY_LONG_LONG, PyLong_AsLongLong(x))
        }
    }
    {
        npy_intp 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 (npy_intp) -1;
            assert(PyLong_CheckExact(v));
        }
        {
            int result = PyObject_RichCompareBool(v, Py_False, Py_LT);
            if (unlikely(result < 0)) {
                Py_DECREF(v);
                return (npy_intp) -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 (npy_intp) -1;
        } else {
            stepval = v;
        }
        v = NULL;
        val = (npy_intp) 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(npy_intp) * 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 |= ((npy_intp) 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(npy_intp) * 8) - bits - (is_unsigned ? 0 : 1);
            if (unlikely(idigit >= (1L << remaining_bits)))
                goto raise_overflow;
            val |= ((npy_intp) idigit) << bits;
        }
        if (!is_unsigned) {
            if (unlikely(val & (((npy_intp) 1) << (sizeof(npy_intp) * 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 (npy_intp) -1;
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to npy_intp");
    return (npy_intp) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to npy_intp");
    return (npy_intp) -1;
}

/* PyObjectCall2Args */
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 */
#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
}

/* UpdateUnpickledDict */
static int __Pyx__UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index) {
    PyObject *state_dict = __Pyx_PySequence_ITEM(state, index);
    if (unlikely(!state_dict)) {
        return -1;
    }
    int non_empty = PyObject_IsTrue(state_dict);
    if (non_empty == 0) {
        Py_DECREF(state_dict);
        return 0;
    } else if (unlikely(non_empty == -1)) {
        return -1;
    }
    PyObject *dict;
    #if CYTHON_COMPILING_IN_LIMITED_API && __PYX_LIMITED_VERSION_HEX < 0x030A0000
    dict = PyObject_GetAttrString(obj, "__dict__");
    #else
    dict = PyObject_GenericGetDict(obj, NULL);
    #endif
    if (unlikely(!dict)) {
        Py_DECREF(state_dict);
        return -1;
    }
    int result;
    if (likely(PyDict_CheckExact(dict))) {
        result = PyDict_Update(dict, state_dict);
    } else {
        PyObject *obj_result = __Pyx_PyObject_CallMethod1(dict, __pyx_mstate_global->__pyx_n_u_update, state_dict);
        if (likely(obj_result)) {
            Py_DECREF(obj_result);
            result = 0;
        } else {
            result = -1;
        }
    }
    Py_DECREF(state_dict);
    Py_DECREF(dict);
    return result;
}
static int __Pyx_UpdateUnpickledDict(PyObject *obj, PyObject *state, Py_ssize_t index) {
    Py_ssize_t state_size = __Pyx_PyTuple_GET_SIZE(state);
    #if !CYTHON_ASSUME_SAFE_SIZE
    if (unlikely(state_size == -1)) return -1;
    #endif
    if (state_size <= index) {
        return 0;
    }
    return __Pyx__UpdateUnpickledDict(obj, state, index);
}

/* 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__60);
    }
    goto done;
}
#endif

/* 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
}

/* 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, *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)) return NULL;
        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 */
